Changing Colors in Bitmaps and Making Icons from Them
Posted
by Alexander Hritonenkov
on March 14th, 2003
The day has come when I need to have a large number of identical icons with only one difference—some colors will change from icon to icon. I found the solution for making all of my icons from a single bitmap, and changing colors on the fly. So, I wrote my CCloneBitmap class. It is derived from CBitmap and is able to change colors and export 32x32 icons.
It is very simple to use. Just follow these steps:
- Load the bitmap using the LoadBitmap() function.
- Make a clone of this bitmap by calling a Clone() method.
- Change colors of the bitmap by calling a ChangeColor() method.
- You can make a 32x32 icon from this bitmap (if bitmap is 32x32).
Here is a simple example of how to use this class:
HBITMAP hBmp;
CCloneBitmap bmpClone;
HICON hIcon;
hBmp=LoadBitmap(AfxGetResourceHandle(),
MAKEINTRESOURCE(ID_LIGHTCAR));
if(hBmp!=NULL)
{
bmpClone.Clone(hBmp);
DeleteObject(hBmp);
bmpClone.ChangeColor(IRGB(0,0,0), IRGB(255,0,0));
// change BLACK pixels to RED ones.
hIcon=bmpClone.MakeIcon(IRGB(255,255,255));
// make icon, using WHITE color as transparent.
}
Note: Remember to use the IRGB() macro instead of RGB().
If you have a color in the COLORREF variable, use the INVERSECOLOR() macro:
bmpClone.ChangeColor(IRGB(0,0,0), INVERSECOLOR(myColor));

Comments
Help with dynamic bitmap
Posted by Legacy on 02/10/2004 12:00amOriginally posted by: VIjay Shan
Hi,
I found your article to be extremely helpful, though had a couplea questions how do i use this class if i have a modified bitmap (cbitmap*). when i paste this bitmap into the clipboard it works fine but when i get a handle and pass it to the clone function and use makeicon it just gives me a black square back. whereas when i try the samething with a preproduced bitmap it works fine. Any kinda help would be appreciated.
Vijay
ReplyGreat, but if you (or someone) would please....
Posted by Legacy on 05/30/2003 12:00amOriginally posted by: Chris
Hello, I'm a Borland C++ Builder programmer and I'd love to use that code, I have MSVC++ and have dabbled in it... I've managed to convert most of the code, but I'm having problems, I was wondering if you could convert it into standard Windows SDK code(nothing like CDC or CBitmap used) and then post it for all programmers to use.
ReplyThanks and have a nice day. :)