2017-07-24 54 views
1

请看看下面的代码:的CImage ::抽奖()画一个黑色的画面

// Create an empty bitmap BRGA 
CImage segImage; 
HDC hSeg = CreateCompatibleDC(NULL); 
SelectObject(hSeg, segImage); 

int width = 640; 
int height = 480; 
segImage.Create(width, height, 32, CImage::createAlphaChannel); 

// Fill it from a byte array (the size is height * width * 4) 
int lineSize = width * 4; 
for (int y = 0; y < height; y++) 
{ 
    void*  dst = segImage.GetPixelAddress(0, y); 
    const void* src = segmented_image_data.planes[0] + y * segmented_image_data.pitches[0]; 
    memcpy(dst, src, lineSize); 
} 

// inspecting segImage shows the actual image content 

// create the destination image (resized) 
CImage resImage; 
HDC hRes = CreateCompatibleDC(NULL); 
SelectObject(hRes, resImage); 

int resWidth = 320; 
int resHeight = 240; 

resImage.Create(resWidth, resHeight, 32, CImage::createAlphaChannel); 
segImage.Draw(hRes, 0, 0, resWidth, resHeight); 

// inspecting resImage shows only 0x00 

segImage.Destroy(); 
resImage.Destroy(); 

我知道内存DC默认创建monocrome位图,但我认为使用Create()法传球32 bpp就够了。

我的代码有什么问题?

回答

0

您在创建设备上下文之前选择了resImage。因此绘制尝试不会改变它。你应该重新排列像这样的方法:

resImage.Create(resWidth, resHeight, 32, CImage::createAlphaChannel); 
SelectObject(hRes, resImage);