有没有什么方法,使GetBitmapBits得到的数据是RGB排列?谢谢先!

seaiam 2005-09-02 02:45:22
我用如下方法得到内存DC的BITMAP数据:
HDC hScreenDC = NULL;
hScreenDC = GetDC(NULL);//屏幕DC
hMemDC = ::CreateCompatibleDC(hScreenDC);
if(hMemDC=NULL)
{return false;}
hBmp = ::CreateCompatibleBitmap(hScreenDC,nWidth,nHeight);
hOldBitmap = (HBITMAP)::SelectObject(hMemDC, hBmp);
::GetObject(hBmp,sizeof(bmRet),(LPSTR)&bmRet);
long lBufferSize = bmRet.bmWidthBytes*bmRet.bmHeight;
BYTE *pTempBuffer=NULL;
pTempBuffer = (BYTE *)VirtualAlloc(NULL, lBufferSize, MEM_COMMIT,PAGE_READWRITE);
if(pTempBuffer == NULL)
{
return false;
}
if(GetBitmapBits(hBmp, lBufferSize ,pTempBuffer)==0)//得到数据
{
VirtualFree(pTempBuffer, 0, MEM_RELEASE);
pTempBuffer = NULL;
return false;
}
if(hMemDC!=NULL)
{
if(hOldBitmap)
{
HBITMAP hbmp = NULL;
hbmp = (HBITMAP)::SelectObject(hMemDC, hOldBitmap);
if(hbmp)
{
::DeleteObject(hbmp);
hbmp = NULL;
}
::DeleteDC(hMemDC);
hMemDC=NULL;
}
}

ReleaseDC(NULL,hScreenDC);
....
bmRet.bmBitsPixel=24,GetBitmapBits得到的数据是BGR排列的,有什么办法能够使得到的数据是RGB排列?

是不是怎么排列与显卡有关?
要是没有办法设定,有什么办法判断当前是BGR排列还是RGB排列

欢迎讨论,如果我没说清楚,请提出来
分不是问题,不够再加,up有分!!
...全文
394 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
seaiam 2005-09-05
  • 打赏
  • 举报
回复
再问!
lixiaosan 2005-09-05
  • 打赏
  • 举报
回复
还是用GetPixel吧。。。

GetRValue
GetGValue
GetBValue
seaiam 2005-09-02
  • 打赏
  • 举报
回复
之前我也以为是标准bmp的排列就是BGR的,转换函数我也写了,可是我最近碰到一个RGB排列的,
thisisll(速度八十迈) 的方法应该是可行的,只要setpixel,getpixel就行了,没简单的方法吗?
saliors 2005-09-02
  • 打赏
  • 举报
回复
标准bmp的排列就是BGR的,GetBitmapBits得到的数据不可能变成RGB,楼主还是写个转换函数吧,很简单,就是把得到的数据1、3,5、7这样调换就可以了,费不了你什么时间。
thisisll 2005-09-02
  • 打赏
  • 举报
回复
你可以先华一个点,这个点RGB是1,2,3
然后你用GetBitmapBits来得到数据
然后就可以判断了~
可能麻烦了点
seaiam 2005-09-02
  • 打赏
  • 举报
回复
我得到数据后还要另存为Tiff文件,如果是BGR的话,我在存之前还要转一下,觉得如果得到的就是RGB的话,就可以省一个步骤,省时省空间

而且我碰到过,如果得到打印机dc,得到的有可能是RGB排列的,如果不能设定,有个方法判断也行啊
thisisll 2005-09-02
  • 打赏
  • 举报
回复
文件里存的是BGR
用GetBitmapBits也应该是吧
DentistryDoctor 2005-09-02
  • 打赏
  • 举报
回复
BGR就BGR嘛。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧