This is a DLL with accompanying Ruby script for modifying bitmap colors. It adds two functions for recoloring bitmaps or changing bitmap color levels.
Features
- Recolor a bitmap maintaining the original brightness.
- Recolor a bitmap with a mask to determine brightness and blending.
- Modify the color levels of a bitmap.
Instructions
Spoiler
Let us say our original bitmap is the RPGMaker cloak, blown up for better viewing.


Code:
We'll end up with something like this.bitmap.colorify!( Color.new(200, 100, 0, 255) )Spoiler

Spoiler

Code:
If your mask image is smaller than the target bitmap, you can tell it to repeat the pattern (false by default). Here's what we end up with.bitmap.colorify_masked!( Color.new(200, 50, 50, 255), bitmapmask, false )Spoiler

Next up we have the "set levels" function. With this we can modify specific channels and ranges of values as well as the brightness.
Alright let's put a heavy emphasis on green values, tone down the red, nearly drop the blue, and highlight mid values while making higher values darker. I'll probably see about making color levels less cumbersome to use.
Spoiler
color_levels = Color_Levels.new
color_levels.set_point( :blue, 190, 80 )
color_levels.set_point( :blue, 255, 80 )
color_levels.set_point( :green, 100, 80 )
color_levels.set_point( :green, 150, 135 )
color_levels.set_point( :green, 185, 255 )
color_levels.set_point( :red, 205, 105 )
color_levels.set_point( :red, 253, 140 )
color_levels.set_point( :red, 255, 160 )
color_levels.set_point( :value, 135, 170 )
color_levels.set_point( :value, 255, 140 )
bitmap.set_levels!(color_levels)

color_levels.set_point( :blue, 190, 80 )
color_levels.set_point( :blue, 255, 80 )
color_levels.set_point( :green, 100, 80 )
color_levels.set_point( :green, 150, 135 )
color_levels.set_point( :green, 185, 255 )
color_levels.set_point( :red, 205, 105 )
color_levels.set_point( :red, 253, 140 )
color_levels.set_point( :red, 255, 160 )
color_levels.set_point( :value, 135, 170 )
color_levels.set_point( :value, 255, 140 )
bitmap.set_levels!(color_levels)
Code:
Now we end up with this.
Spoiler
color_levels = Color_Levels.new
color_levels.set_point( :green, 85, 140 )
color_levels.set_point( :green, 165, 140 )
color_levels.set_point( :green, 185, 50 )
color_levels.set_point( :green, 255, 50 )
color_levels.set_point( :value, 0, 170 )
color_levels.set_point( :value, 60, 170 )
color_levels.set_point( :value, 145, 50 )
color_levels.set_point( :value, 200, 130 )
color_levels.set_point( :value, 255, 130 )
bitmap.set_levels!(color_levels)

color_levels.set_point( :green, 85, 140 )
color_levels.set_point( :green, 165, 140 )
color_levels.set_point( :green, 185, 50 )
color_levels.set_point( :green, 255, 50 )
color_levels.set_point( :value, 0, 170 )
color_levels.set_point( :value, 60, 170 )
color_levels.set_point( :value, 145, 50 )
color_levels.set_point( :value, 200, 130 )
color_levels.set_point( :value, 255, 130 )
bitmap.set_levels!(color_levels)
Code:
Prepare yourself, it's not pretty.
This is still work in progress and some things may be subject to change before release. I don't get much time to work on it; however, it is mostly complete. It's mainly a matter of what license I want to use, if any. I do want to allow commercial projects to be able to use it (with permission) though.
So how useful would people find this and any suggestions?