pixelformat を pf1Bit に変更します。2 つのエントリを持つパレットを作成し、TPaletteEntry の値を目的の色の値に変更します (この例では赤に変更します)。TPNGImage を作成し、ビットマップを割り当て、PNG の透明度を設定します。
implementation
uses pngimage;
{$R *.dfm}
Type
TMyPalette = Packed Record
palVersion : Word;
palNumEntries : Word;
palPalEntry : Array [0..1] of TPaletteEntry;
End;
Procedure ChangeBlackColor(bmp:TBitMap);
var
pal:TMyPalette;
begin
bmp.PixelFormat := pf1Bit;
bmp.HandleType := bmDIB;
With pal Do
Begin
palVersion:=$0300;
palNumEntries:=2;
palPalEntry[0].peRed:= $FF;
palPalEntry[0].peGreen:=$00;
palPalEntry[0].peBlue:= $00;
palPalEntry[0].peFlags:=PC_RESERVED;
palPalEntry[1].peRed:= $FF;
palPalEntry[1].peGreen:=$FF;
palPalEntry[1].peBlue:= $FF;
palPalEntry[1].peFlags:=PC_RESERVED;
End;
bmp.Palette := CreatePalette(pLogPalette(@pal)^)
end;
procedure TForm3.Button1Click(Sender: TObject);
var
png:TPngimage;
bmp:TBitmap;
begin
// sample image
Image1.Canvas.Rectangle(0,0,Image1.Width-1,Image1.Height-1);
Image1.Canvas.Ellipse(1,1,Image1.Width,Image1.Height);
bmp := Image1.Picture.Bitmap;
ChangeBlackColor(bmp);
png:=TPngimage.Create;
try
png.Assign(bmp);
png.TransparentColor := clWhite;
png.Transparent := true;
Image2.Picture.Assign(png);
finally
png.Free;
end;
end;