创建WINCE下16位格式位图实现快速BitBlt

在WINCE下,如果创建的位图与屏幕设备格式不一样,将会导致BitBlt函数极为缓慢,因此需要创建一幅16位色565格式位图,用此方法创建出的位图可以提供1ms的快速BitBlt绘制。当然,如果设备不是565颜色格式的,更改代码中的颜色掩码位bmiColors就可以了。

  1. //////////////////////////////////////////////////////////////////////////  
  2. /// @brief      创建一幅缓存图像。  
  3. /// @param[out]  pHBitmap 生成的位图句柄。  
  4. /// @param[out]  pData  生成的位图中的数据位置。  
  5. /// @param[in]  hDC 目标DC句柄。  
  6. /// @param[in]  width 位图宽度。  
  7. /// @param[in]  height 位图高度。  
  8. /// @param[in]  bitCount 每个像素占多少个bit。  
  9. /// @attention  创建的位图是无压缩格式的。  
  10. /// @author    Loongee  
  11. /// @date      2010/01/15  
  12. //////////////////////////////////////////////////////////////////////////  
  13. void CreateBufferBitmap(HBITMAP* pHBitmap, void** pData,   
  14.                             HDC hDC, LONG width, LONG height, WORD bitCount)  
  15. {  
  16.     BITMAPINFO& bmpInfo = *(BITMAPINFO*)new BYTE[sizeof(bmpInfo) + sizeof(RGBQUAD) * 3];  
  17.     bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);  
  18.     bmpInfo.bmiHeader.biWidth = width;  
  19.     bmpInfo.bmiHeader.biHeight = height;  
  20.     bmpInfo.bmiHeader.biPlanes = 1;  
  21.     bmpInfo.bmiHeader.biBitCount = bitCount;  
  22.     if (bitCount == 16)  
  23.     {  
  24.         bmpInfo.bmiHeader.biCompression = BI_BITFIELDS;  
  25.         *(DWORD *)(&bmpInfo.bmiColors[0]) = 0xF800;  
  26.         *(DWORD *)(&bmpInfo.bmiColors[1]) = 0x07E0;  
  27.         *(DWORD *)(&bmpInfo.bmiColors[2]) = 0x001F;  
  28.     }  
  29.     else  
  30.     {  
  31.         bmpInfo.bmiHeader.biCompression = BI_RGB;  
  32.     }  
  33.     bmpInfo.bmiHeader.biSizeImage = 0;  
  34.     bmpInfo.bmiHeader.biXPelsPerMeter = 1000;  
  35.     bmpInfo.bmiHeader.biYPelsPerMeter = 1000;  
  36.     bmpInfo.bmiHeader.biClrUsed = 0;  
  37.     bmpInfo.bmiHeader.biClrImportant = 0;  
  38.     *pHBitmap = CreateDIBSection(hDC, &bmpInfo, DIB_RGB_COLORS  
  39.         , pData, NULL, 0);  
  40.     delete[] (BYTE*)&bmpInfo;  
  41. }  

 

http://blog.csdn.net/loongee/article/details/6333489

你可能感兴趣的:(WinCE)