CImage::Draw() 绘制黑色图片

Posted

技术标签:

【中文标题】CImage::Draw() 绘制黑色图片【英文标题】:CImage::Draw() draws a black picture 【发布时间】:2017-12-30 08:21:45 【问题描述】:

请看下面的代码:

// 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 默认创建单色位图,但我认为使用 Create() 方法传递 32-bpp 就足够了。

我的代码有什么问题?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于CImage::Draw() 绘制黑色图片的主要内容,如果未能解决你的问题,请参考以下文章

Android opengl 画文字,怎么把文字后面的黑色背景去掉

Opencv在图像上绘制黑色像素

图片类处理

mfc中让编辑框透明为啥总显示黑色背景的编辑框啊?

从 linux 命令行捕获图片(uvccapture 捕获黑色图片)

怎么通过代码把图片的黑色背景变成透明的?