You use ImageAttributes, adding a ColorMap that swaps the colors. Here is a code snippet.
Bitmap originalBMP = (Bitmap) Image.FromFile(@'c:\circle.bmp');
//make a copy so original will still be available
Bitmap swappedBMP = new Bitmap(originalBMP);
Graphics g = Graphics.FromImage(swappedBMP);
// Create a color map.
ColorMap[] colorSwapper= new ColorMap[2];
colorSwapper[0] = new ColorMap();
colorSwapper[1] = new ColorMap();
colorSwapper[0].OldColor = Color.Red; //red changes to yellow
colorSwapper[0].NewColor = Color.Yellow;
colorSwapper[1].OldColor = Color.Blue;//blue changes to green
colorSwapper[1].NewColor = Color.Green;
// Create an ImageAttributes object, and call SetRemapTable
ImageAttributes imageAttr = new ImageAttributes();
imageAttr.SetRemapTable(colorSwapper);
//overdraw the bitmap with swapped colors
g.DrawImage(swappedBMP, new Rectangle(0, 0,
swappedBMP.Width, swappedBMP.Height),0, 0, swappedBMP.Width,
swappedBMP.Height, GraphicsUnit.Pixel, imageAttr);
pictureBox1.Image = swappedBMP;
Here is similar code that wraps this technique in a method that swaps a single color.
protected void DrawMyBitmap(Graphics gph, Color oldColor, Color newColor, Bitmap baseImage, Rectangle rect)
{
ImageAttributes imgattr = new ImageAttributes();
ColorMap[] clrmap = new ColorMap[1]{ new ColorMap() };
clrmap[0].OldColor = oldColor;
clrmap[0].NewColor = newColor;
imgattr.SetRemapTable(clrmap);
gph.DrawImage(baseImage,rect,0,0,rect.Width, rect.Height,GraphicsUnit.Pixel,imgattr);
}
Share with