首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CImage::Draw()绘制一张黑色图片

CImage::Draw()绘制一张黑色图片
EN

Stack Overflow用户
提问于 2017-07-25 00:39:45
回答 1查看 609关注 0票数 2

请看下面的代码:

代码语言:javascript
复制
// 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就足够了。

我的代码出了什么问题?

EN

回答 1

Stack Overflow用户

发布于 2017-07-25 22:20:31

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

代码语言:javascript
复制
resImage.Create(resWidth, resHeight, 32, CImage::createAlphaChannel);
SelectObject(hRes, resImage);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45285823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档