与GDI +混色

时间:2015-02-05 08:40:57

标签: colors gdi+ gdi

我正在提到一个较旧的问题,即使用GDI +进行颜色混合

在Windows窗体中使用GDI +,我希望能够使用笔绘制并根据目标像素颜色混合颜色。

例如,如果我画一条线并且它经过黑色像素,我希望它是一种较浅的颜色(例如白色),以便它可见。当同一条线经过白色像素时,它应该是较暗的颜色(例如黑色),以便它仍然清晰可见。

答案说使用颜色矩阵进行转换 所以我开始实施它.. 我的图像以原始数据格式存在于rgb48

    Gdiplus::Bitmap image(input.width,input.height,input.width*6,PixelFormat48bppRGB,(unsigned char*)rgb48);

            Gdiplus::Image *images= image.GetThumbnailImage(input.width,input.height);

            Gdiplus::TextureBrush brush(images);
            Gdiplus::Pen pen(&brush);

            Gdiplus::ColorMatrix matrix={
            -1.0f,0.0f,0.0f,0.0f,0.0f,
            0.0f,-1.0f,0.0f,0.0f,0.0f,
            0.0f,0.0f,-1.0f,0.0f,0.0f,
            0.0f,0.0f,0.0f,1.0f,0.0f,
            1.0f,1.0f,1.0f,0.0f,1.0f,

            };
Gdiplus::Graphics gfx(&image1);
            Gdiplus::ImageAttributes imageAttr;
            imageAttr.SetColorMatrix(&matrix);
            gfx.DrawImage(images,Gdiplus::Rect(0,0,input.width,input.height),0,0,1024,1024,Gdiplus::UnitPixel,&imageAttr);

我没有得到我期望的东西。可以帮助我找到我正在做的错误。

1 个答案:

答案 0 :(得分:0)

您可以使用颜色的alpha分量来指定透明度,以便可以组合颜色。但是,如果您希望组合不是Alpha混合,则必须自己绘制像素。您可以先绘制透明位图,然后逐像素地将其渲染到目标位置。