Hello,
I have an image with 2 layers.
Layer 1 is a png black and blue, with clBlue as transparent color. The blue pixels are a kind of mask above my background, and the black darken the background (layer semi-transparent).
I want to change some "blue zones" (I have a list of pixels) into black.
But it seems that setting a color on a transparent zone has no effect.
My code :
procedure displayPicture( APictFileName, ALayerFileName : string ) ;
begin
// Load background
ImageEnView1.IO.LoadFromFile( APictFileName ) ;
// Load layer
ImageEnView1.LayersAdd(ImageEnView1.Layers[0].Kind,
ImageEnView1.Layers[0].PosX,
ImageEnView1.Layers[0].PosY,
ImageEnView1.Layers[0].Width,
ImageEnView1.Layers[0].Height) // Append a new layer
ImageEnView1.IO.LoadFromFile( ALayerFileName ) ;
// Set transparency
ImageEnView1.IO.IEBitmap.SetTransparentColors( clBlue, clBlue, 0 ) ;
ImageEnView1.Layers[1].Opacity := 0.7 ;
end ;
procedure UpdateDisplay( XList, YList : TIntegerlist ) ;
// Remove Pixels from "blue" transparent area, set them black, called after some user actions
var
i : integer ;
begin
for i := 0 to XList.Count - 1 do
ImageEnView1.Layers[LayerIdx].Bitmap.Pixels[XList[i], YList[i]] := TColor2TRGB( clBlack ) ;
end ;
The workaround I found is to write this :
// Reset transparency
ImageEnView1.LayersCurrent := 1 ;
ImageEnView1.IO.IEBitmap.SetTransparentColors( clBlue, clBlue, 255 ) ;
for i := 0 to XList.Count - 1 do
ImageEnView1.Layers[LayerIdx].Bitmap.Pixels[XList[i], YList[i]] := TColor2TRGB( clBlack ) ;
ImageEnView1.IO.IEBitmap.SetTransparentColors( clBlue, clBlue, 0 ) ;