ImageGear v26.5 - Updated
ImageGear.Core Assembly / ImageGear.Processing Namespace / ImGearRasterProcessing Class / BlendWithAlpha Method
Page to process.
Left margin of blended image.
Top margin of blended image.
Image to blend with page1.
Example




In This Topic
    BlendWithAlpha Method
    In This Topic
    Blends two images with alpha channel.
    Syntax
    'Declaration
     
    Public Shared Sub BlendWithAlpha( _
       ByVal page1 As ImGearRasterPage, _
       ByVal left As Integer, _
       ByVal top As Integer, _
       ByVal page2 As ImGearRasterPage _
    ) 
    'Usage
     
    Dim page1 As ImGearRasterPage
    Dim left As Integer
    Dim top As Integer
    Dim page2 As ImGearRasterPage
     
    ImGearRasterProcessing.BlendWithAlpha(page1, left, top, page2)
    public static void BlendWithAlpha( 
       ImGearRasterPage page1,
       int left,
       int top,
       ImGearRasterPage page2
    )
    public: static void BlendWithAlpha( 
       ImGearRasterPage* page1,
       int left,
       int top,
       ImGearRasterPage* page2
    ) 
    public:
    static void BlendWithAlpha( 
       ImGearRasterPage^ page1,
       int left,
       int top,
       ImGearRasterPage^ page2
    ) 

    Parameters

    page1
    Page to process.
    left
    Left margin of blended image.
    top
    Top margin of blended image.
    page2
    Image to blend with page1.
    Remarks
    This method blends page2 over page1 and stores result in page1.

    The method validates input pages for further processing according to following logics:

    • The page2 should contain an Alpha channel, otherwise, an error is returned.
    • It is not essential whether page1 contains an Alpha channel or not, see about it below.
    • This method is applicable to any colorspace, that can have Alpha channel. Both images must have the same base colorspace (i.e. upon validation of input images will be considered color channels only - Extra channels will be ignored).
    • This method is applicable to any supported by ImageGear color channel depth for given colorspace, but channel depths of both images must be the same.

    If page1 does not contain an Alpha channel, page2 is composited over it using page1 as the background. The resulting image does not contain an Alpha channel. The following formulas are used:

    If page2 is not pre-multiplied,

    I1 = I2 * A2 + I1 (1-A2)

    If page2 is pre-multiplied,

    I1 = I2 + I1 (1-A2)

    If page1 contains an Alpha channel, page1 and page2 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 semi-transparent film over another semi-transparent 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. Using pseudocode,

    BlendWithAlpha(page1, page2) BlendWithAlpha(BackPage, page1)

    produces the same result as

    BlendWithAlpha(BackPage, page1) BlendWithAlpha(BackPage, page2)

    The following formulas are used:

    if (A1=A2=0)

    I1 = 0; A1 = 0;

    else

    If both page1 and page2 are not pre-multiplied,

    I1 = (I2*A2 + I1*A1*(1-A2)) / (A1 + A2 - A1*A2)

    A1 = A1 + A2 - A1*A2

    Result is not pre-multiplied

    If page1 is not pre-multiplied, and page2 is pre-multiplied:

    I1 = (I2 + I1*A1*(1-A2)) / (A1 + A2 - A1*A2)

    A1 = A1 + A2 - A1*A2

    Result is not pre-multiplied

    If page1 is pre-multiplied, and page2 is not:

    I1 = I2*A2 + I1*(1-A2)

    A1 = A1 + A2 - A1*A2

    Result is pre-multiplied

    If both page1 and page2 are pre-multiplied:

    I1 = I2 + I1*(1-A2)

    A1 = A1 + A2 - A1*A2

    Result is pre-multiplied

    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^n-1 (where n is alpha channel's bit depth) corresponds to float value of 1.0.

    This method does not process Extra channels, i.e:

    • If page1 has Extra channels, they will remain intact.
    • If page2 has Extra channels, they will be ignored.

    Example
    //Loads an image with an alpha channel and blends it with an already loaded image.
    using (FileStream file = new FileStream("PNGTEST.png",
               FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        ImGearRasterPage igRasterPageAlpha = (ImGearRasterPage)
            ImGearFileFormats.LoadPage(file, 0);
    
        ImGearRasterProcessing.BlendWithAlpha(
            igRasterPage, 10, 10, igRasterPageAlpha);
    }
    'Loads an image with an alpha channel and blends it with an already loaded image.
    Using file As New FileStream("PNGTEST.png", FileMode.Open, FileAccess.Read, FileShare.Read)
        Dim igRasterPageAlpha As ImGearRasterPage = DirectCast(ImGearFileFormats.LoadPage(file, 0), ImGearRasterPage)
    
        ImGearRasterProcessing.BlendWithAlpha(igRasterPage, 10, 10, igRasterPageAlpha)
    End Using
    See Also