我需要复制HDC
内容,但我的代码无效 - 任何想法为什么?一切顺利,直到我尝试在HDC
个对象之间进行复制。似乎无处可去。我是GDI编程的新手。
我不确定SelectObject
应该如何在这里工作。
PAINTSTRUCT ps;
HDC paintDC = BeginPaint(hWnd, &ps);
HDC imageDC = ::CreateCompatibleDC(paintDC);
HDC bufferDC = ::CreateCompatibleDC(paintDC);
BITMAPINFO bitmapInfo;
memset ( &bitmapInfo, 0, sizeof(BITMAPINFOHEADER) );
bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
int scanLines = GetDIBits(imageDC, // handle to DC
m_bitmap, // handle to bitmap
0, // first scan line to set
0, // number of scan lines to copy
NULL, // array for bitmap bits
&bitmapInfo, // bitmap data buffer
DIB_RGB_COLORS ); // RGB or palette index
// Paint the bitmap image.
HBITMAP pOldBitmap = (HBITMAP)SelectObject( imageDC, m_bitmap );
int width = bitmapInfo.bmiHeader.biWidth;
int height = bitmapInfo.bmiHeader.biHeight;
// Copy imageDC to bufferDC
BitBlt(bufferDC, 0, 0,
width, height,
imageDC, 0, 0, SRCCOPY) ;
BitBlt(paintDC, 0, 0,
width, height,
imageDC, 0, 0, SRCCOPY);
SelectObject(imageDC, pOldBitmap);
答案 0 :(得分:0)
当你调用CreateCompatibleDC
函数时,它会创建所谓的“内存DC”对象。内存DC默认没有附加任何图像数据(实际上是id,1x1单色位图,这不是你想要的)。
您确实为imageDC
选择了一个位图对象,但是您没有为bufferDC
选择任何位图对象,这就是为什么“位无处可去”。
为HBITMAP
创建一个bufferDC
对象(您可以使用CreateCompatibleBitmap
),然后在执行任何blits之前为bufferDC
选择它。
记住一件事:DC
对象是可以绘制的东西的接口,它本身不包含任何位图数据。