Neither one nor Many
Software engineering blog about my projects, geometry, visualization and music.
One of the reasons I was using allegro for my project was that they already had (apparantly) a lot of blending modes available. You have set_blender_alpha(), set_blender_hue(), set_blender_color(), but these are not the same as in photoshop. I got some unexpected behaviour from these, and I will edit this post later and elaborate on that some more.
Most of them ignore the r, g, b parameters as well. So it appears they were a big disappointment. By the way, a quick glance at the Allegro 5 source made me think they aren't implemented there either.
That's why I did a quick search and found someone who already collected macro's for all photoshop blending types. By Nathan Moinvaziri. Today, or I should say yesterday (now at 3:17am), I implemented some wrapper functions around it that make it available to allegro, with an API that looks and feels the same as allegro.
I put it on github with a demo program. From the README:
Put al_blend.h in your project somewhere and include it. Or put it in the allegro include directory, i.e. /usr/local/src/allegro/include or C:\allegro\include. Now instead of using the allegro blenders with getpixel() and putpixel(), you can use put_blended_pixel(). put_blended_pixel(): Writes a pixel into a bitmap with specific blender. Description: void put_blended_pixel(BITMAP *bmp, int x, int y, int color, (*blender_func)(int &basecolor, int &blendcolor)); Example: put_blended_pixel(screen, x, y, somecolor, blender_lighten);
Available blenders are: blender_darken, blender_multiply, blender_average, blender_add, blender_subtract, blender_difference, blender_negation, blender_screen, blender_exclusion, blender_overlay, blender_softlight, blender_hardlight, blender_colordodge, blender_colorburn, blender_lineardodge, blender_linearburn, blender_linearlight, blender_vividlight, blender_pinlight, blender_hardmix, blender_reflect, blender_glow, blender_phoenix, blender_hue, blender_saturation, blender_color, blender_luminosity,