c++ - GDI+:如何用红色像素替换黑色像素?

标签 c++ bitmap gdi+

我有一张黑白图像,想用红色像素替换黑色像素。我试过了

Gdiplus::Graphics* g = Gdiplus::Graphics::FromImage(filename);

Gdiplus::ImageAttributes ia;

Gdiplus::ColorMatrix m = { 
    0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
    1.0f, 0.0f, 0.0f, 0.0f, 1.0f
};

ia.SetColorMatrix(&m);

g->DrawImage(org, r, 0, 0, org->GetWidth(), org->GetHeight(), Gdiplus::UnitPixel, &ia);

但它会使整个位图变红。

最佳答案

不要使用矩阵来执行此转换。您的矩阵将始终输出以下 vector :
[1.0 0.0 0.0 currentAlpha 1.0]
这就是为什么你的图像是红色的。
访问https://msdn.microsoft.com/en-us/library/ms533875%28v=vs.85%29.aspx
改用这个

ImageAttributes ia;

ColorMap blackToRed;

blackToRed.oldColor = Color(255, 0, 0, 0);  // black

blackToRed.newColor = Color(255, 255, 0, 0);// red

ia.SetRemapTable(1, &blackToRed);

关于c++ - GDI+:如何用红色像素替换黑色像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879468/

相关文章:

c++ - C++ 预处理器元编程图灵完备吗?

c++ - 琐碎破坏的意义

C# 使用新数据高效重绘图像

ANDROID - map View

c++ - 自定义文本框 : Highlighting and Selection

c++ - Tensorflow C++ 快速张量深拷贝

c++ - 在 C++ 中按文件填充数组或结构

android - 未定义位图类型的方法 setLayoutParams(LinearLayout.LayoutParams)

c# - 何时处理 GDI 对象,特别是位图

c++ - 如何从函数返回 GDI::Bitmap