IG_image_blend_with_alpha
This function blends two images together using their alpha channels.
Declaration:

Copy Code

AT_ERRCOUNT ACCUAPI IG_image_blend_with_alpha(
HIGEAR hSource,
HIGEAR hAlpha,
LPAT_RECT blendingArea
);

Arguments:
Name 
Type 
Description 
hSource 
HIGEAR 
First image for blending. It may or may not contain an alpha channel. 
hAlpha 
HIGEAR 
Second image for blending. It must contain an alpha channel. 
blendingArea 
LPAT_RECT 
Rectange area of the first image for blending. NULL means the entire image. 
Return Value:
Returns 0 if successful. Otherwise, returns the number of ImageGear errors that occurred during this function call.
Supported Raster Image Formats:
hSource:
 Grayscale  2..16 bpp;
 RGB  6..48 bpp;
 GyA  4..32 bpp;
 GyPA  4..32 bpp;
 RGBA  8..64 bpp;
 RGBPA  8..64 bpc.
hAlpha:
 GyA  4..32 bpp;
 GyPA  4..32 bpp;
 RGBA  8..64 bpp;
 RGBPA  8..64 bpc.
Remarks:
hAlpha is blended over hSource, and the result is stored in hSource. hAlpha should contain an Alpha channel, otherwise, an error is returned. Color channels (all channels except Extra and Alpha/Premultiplied Alpha) of both images must have the same color space and the same bit depths.
If hSource does not contain an Alpha channel, hAlpha is composited over it using hSource as the background. The resulting image does not contain an Alpha channel. The following formulas are used:
 If Page2 is not premultiplied,
 I1 = I2 * A2 + I1 (1A2)
 If Page2 is premultiplied,
 I1 = I2 + I1 (1A2)
If hSource contains an Alpha channel, hSource and hAlpha are blended together. The resulting image contains an alpha channel. Blending two images, both of which contain an Alpha channel, can be interpreted as placing one semitransparent film over another semitransparent film. The result of applying such combined images to some background is the same as applying one image over background and then applying another image to the result. The code
 IG_image_blend_with_alpha(hImage1, hImage2, NULL);
 IG_image_blend_with_alpha(hBackground, hImage1, NULL);
will produce the same result as
 IG_image_blend_with_alpha(hBackground, hImage1, NULL);
 IG_image_blend_with_alpha(hBackground, hImage2, NULL);
The following pseudocode demonstrates the formulas used by the function:
 if (A1=A2=0)
 I1 = 0; A1 = 0;
 else
 If both Page1 and Page2 are not premultiplied,
 I1 = (I2*A2 + I1*A1*(1A2)) / (A1 + A2  A1*A2)
 A1 = A1 + A2  A1*A2
 //Result is not premultiplied
 If Page1 is not premultiplied, and Page2 is premultiplied:
 I1 = (I2 + I1*A1*(1A2)) / (A1 + A2  A1*A2)
 A1 = A1 + A2  A1*A2
 //Result is not premultiplied
 If Page1 is premultiplied, and Page2 is not:
 I1 = I2*A2 + I1*(1A2)
 A1 = A1 + A2  A1*A2
 //Result is premultiplied
 If both Page1 and Page2 are premultiplied:
 I1 = I2 + I1*(1A2)
 A1 = A1 + A2  A1*A2
 //Result is premultiplied
Alpha values are mapped to a float value between 0.0 and 1.0, where 0.0 means full transparency and 1.0 means full opaquity. Alpha value of 0 corresponds to float value of 0.0 and alpha value of 2^n1 (where n is alpha channel's bit depth) corresponds to float value of 1.0.
This function does not process Extra Channels.