关于rederbuffer
来源:互联网 发布:linux显卡驱动安装 编辑:程序博客网 时间:2024/06/05 22:55
// gdi gdi+ 使用的双缓存class RenderBuffer{public:RenderBuffer();~RenderBuffer();public: void Resize(unsigned int width, unsigned int height); void Clear(DWORD dwColor, RECT* prc);void Destroy(); void Dump();void GetImageData(ImageData* pData);public: GRAPHICS_RENDER_LIBRARY_TYPE m_eGraphicsType; // 同时支持gdi/gdi+HBITMAP m_hBitmap; HDC m_hDC; unsigned int m_nWidth; unsigned int m_nHeight;};
这个类的实质就是封装了一下HBITMAP和GDI,对HBITMAP的数据进行操作,有点像mfc的memdc的概念。只是这里多了提取hbitmap内存数据的接口。
RenderBuffer::RenderBuffer(){ m_eGraphicsType= GRAPHICS_RENDER_LIBRARY_TYPE_GDI; m_hDC = NULL; m_nWidth = 0; m_nHeight = 0; m_hBitmap = NULL;}RenderBuffer::~RenderBuffer(){Destroy();}void RenderBuffer::Destroy(){SAFE_DELETE_GDIOBJECT(m_hBitmap); DeleteDC(m_hDC); m_hDC = NULL; m_nHeight = m_nWidth = 0;}void RenderBuffer::Clear(DWORD dwColor, RECT* prc){ if (!m_hBitmap) return; HBRUSH hBrush = CreateSolidBrush(dwColor); if (prc) { ::FillRect(m_hDC, prc, hBrush); } else { RECT rc = {0, 0, m_nWidth, m_nHeight}; ::FillRect(m_hDC, &rc, hBrush); } SAFE_DELETE_GDIOBJECT(hBrush);}void RenderBuffer::Resize(unsigned int width, unsigned int height){ if (width == 0 || height == 0) { Destroy(); return; } if (width == m_nWidth && height == m_nHeight) { return; } if (m_hBitmap) { SAFE_DELETE_GDIOBJECT(m_hBitmap); } Image image;image.Create(width, -(int)height, 32, Image::createAlphaChannel); m_hBitmap = image.Detach(); if (!m_hDC) { m_hDC = CreateCompatibleDC(NULL); SetBkMode(m_hDC, TRANSPARENT); SetStretchBltMode(m_hDC, HALFTONE); } HBITMAP hOldBitmap = (HBITMAP)SelectObject(m_hDC, m_hBitmap); m_nWidth = width; m_nHeight = height;}// void RenderBuffer::Draw(HDC hDC)// {// if (m_bAlphaBlend)// {// if (255 == m_nOpcity)// {// m_image.Draw(hDC, 0, 0);// }// else// {// m_image.Draw(hDC, 0, 0, m_nOpcity);// }// }// else// {// m_image.BitBlt(hDC, 0, 0);// }// }void RenderBuffer::Dump(){ if (m_hBitmap) { Image image; image.Attach(m_hBitmap, Image::DIBOR_TOPDOWN); image.Save(L"C:\\aaa.bmp", Gdiplus::ImageFormatBMP); image.Save(L"C:\\aaa.png", Gdiplus::ImageFormatPNG); image.Detach(); }}void RenderBuffer::GetImageData(ImageData* pData){BITMAP bm;<span style="background-color: rgb(204, 0, 0);">::GetObject(m_hBitmap, sizeof(bm), &bm);</span>pData->m_nbpp = bm.bmBitsPixel;pData->m_nWidth = bm.bmWidth;pData->m_nHeight = bm.bmHeight;pData->m_nStride = bm.bmWidthBytes;pData->m_pScan0 = (BYTE*)bm.bmBits;pData->m_ptr = (BYTE*)bm.bmBits;}
0 0
- 关于rederbuffer
- 关于
- 关于
- 关于++,--
- 关于#
- 关于。。。
- 关于
- 关于......
- 关于
- 关于
- 关于****
- 关于
- 关于!
- 关于++
- 关于
- 关于
- 关于$?
- 关于%
- hashCode和identityHashCode的区别
- 子窗体更新父窗体
- 2014Esri中国用户大会亮点系列之——ArcGIS产品
- Sql sp_executesql 参数问题
- Struts2入门经典实例
- 关于rederbuffer
- 判断一个单向链表中是否存在环
- treeView 与数据库的操作
- 黑马程序员—OC—三大特性
- Cocos2d-x 3.2 自动更新 -- 使用AssetsManager更新游戏资源包
- fastpath源码的一些对象
- dataGridView保存选中的单元格的值
- Java 实现二分查找\折半查找
- css3实现的翻转特效及tab切换功能