我用如下方法得到内存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有分!!
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有分!!
用GetBitmapBits也应该是吧
然后你用GetBitmapBits来得到数据
然后就可以判断了~
可能麻烦了点
thisisll(速度八十迈) 的方法应该是可行的,只要setpixel,getpixel就行了,没简单的方法吗?
GetGValue
GetBValue