0
votes

I am refering to a older question saying color blending with GDI+

Using GDI+ with Windows Forms, I want to be able to draw with a pen and blend color based on the destination pixel color.

For example, if I draw a line and it passes over black pixels, I want it to be a lighter color (like white for example) so that it's visible. When that same line passes over white pixels, it should be a darker color (black for example) so that it's still clearly visible.

the answers says to use a color matrix for transformation so i started implementing it.. My image is present in raw data format in 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);

I am not getting what i expect..Can some one help me in finding the mistake i m doing.

1

1 Answers

0
votes

You can use the alpha component of a color to specify transparency, so that colors can be combined. However, if you want the combination to be something other than the alpha blend, you must draw the pixels yourself. You could first draw into a transparent bitmap, then render that onto the destination pixel by pixel.