ImageEn, unit iexBitmaps

TIEBitmap.AlphaChannel

TIEBitmap.AlphaChannel


Declaration

property AlphaChannel: TIEBitmap;


Description

Returns the associated Alpha Channel of the image
TIEBitmap handles the alpha channel as an encapsulated TIEBitmap object with PixelFormat of ie8g. Pixels that are 0 (black) will be fully transparent, pixels of 255 are fully opaque, and values from 1 - 254 are partially transparent.
If an image doesn't have an alpha channel, accessing the AlphaChannel property will create it.
To determine whether an image has an alpha channel and/or contains transparent regions, check HasAlphaChannel.



Note:
 AlphaChannel is a standard TIEBitmap, so you can use all TIEBitmap methods, such as Negative to invert the transparency
 If you make changes to the AlphaChannel of a bitmap displayed by TImageEnView, you must call Update to refresh the display
 Remember that in the alpha channel, black is transparency, white is opacity (Imagine a night sky where the things in darkness/black are hidden, whereas those things in white/illumination are visible)


File Formats and Alpha

In order to maintain the alpha channel when saving, you will need to choose a format that supports it. The most widely used image format with true alpha support is PNG.

Alpha Channel is supported by:
 BMP, if BMP_HandleTransparency is enabled
 CUR
 ICO
 IEN
 JPEG 2000 with certain formats such as ioJ2000_RGB
 GIF, if GIF_FlagTranspColor is enabled
 PNG
 PSD
 SVG
 TGA
 TIFF (supported by some formats)
 WIC formats, such as HDP, WDP, HEIF, etc.
 WMF/EMF Metafiles (if EMFBackgroundColor = clNone)

It is not supported by: AVI, Camera RAW, DCX, DICOM, JPEG, PCX


Demos

Demo  Demos\ImageEditing\RGBChannels\RGBChannels.dpr
Demo  Demos\ImageEditing\CompleteEditor\PhotoEn.dpr
Demo  Demos\ImageEditing\EveryMethod\EveryMethod.dpr


Example

// Assign an alpha channel to an image using a source file
// For simple transparency, use a monochrome bitmap where the black pixels will become transparent
// Otherwise, a 256 color gray-scale image can provide a range of tranparency values (from white/fully opaque to black/fully transparent)
aBMP := TIEBitmap.create( 'D:\alpha.bmp' );

// Use our bitmap as the alpha channel
ImageEnView1.IEBitmap.AlphaChannel.Assign( aBMP );

// Ensure size of alpha channel matches size of image (and is ie8g)
ImageEnView1.IEBitmap.SyncAlphaChannel();

// Update the container
ImageEnView1.Update();

aBMP.free;

Source Image




Alpha Image (Black will become transparent, gray will be 50% transparent and white will be fully opaque)




Result (on a white TImageEnView)




Example 2

// Feather the border of a JPEG image
iebmp.Read( 'D:\image.jpg' );
iebmp.AlphaChannel; // Add alpha channel to image
iebmp.Resize(1, 1, 1, 1, clWhite, 0); // Add an alpha border
iebmp.FeatherAlphaEdges(10);


Example 3

// Show the percentage of pixels that are partially or fully transparent
// Same as TImageEnProc.CalcImageNumColors()
var
  px: pbyte;
  y, x, l: integer;
  alphaCount, denom: Integer;
  bmp: TIEBitmap;
begin
  bmp := ImageEnView1.IEBitmap;

  alphaCount := 0;
  if bmp.HasAlphaChannel() then
  begin
    l := IEBitmapRowLen( bmp.AlphaChannel.Width, bmp.AlphaChannel.BitCount, 8);
    for y := 0 to bmp.AlphaChannel.Height - 1 do
    begin
      px := bmp.AlphaChannel.Scanline[y];
      for x := 0 to l - 1 do
      begin
        if px^ < 255 then
          Inc( alphaCount );
        inc(px);
      end;
    end;
  end;

  denom := bmp.Width * bmp.Height;
  ShowMessage( format( 'Image has %d%% transparent pixels', [ Round( alphaCount / denom * 100 )]));
end;


See Also

 Alpha
 SyncAlphaChannel
 DetachAlphaChannel
 ReplaceAlphaChannel