A newly created bitmap seems to have a (white) background by default. At least, a query on the Pixels property confirms. But why is that background color not used as the transparent color when Transparent
is set true?
Consider this simple test code:
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp: TBitmap;
begin
Bmp := TBitmap.Create;
try
Bmp.Width := 100;
Bmp.Height := 100;
Bmp.Transparent := True;
Canvas.Draw(0, 0, Bmp); // A white block is drawn
Bmp.Canvas.Brush.Color := Bmp.Canvas.Pixels[0, 99]; // = 'clWhite'
Bmp.Canvas.FillRect(Rect(0, 0, 100, 100));
Canvas.Draw(0, 100, Bmp); // "Nothing" is drawn
finally
Bmp.Free;
end;
end;
For some reason, the entire bitmap surface has to be painted before it can appear transparent, which sounds kind of odd.
The following variations are tried to eliminate the call to FillRect
, all with the same outcome (no transparancy):
Brush.Color
,Brush.Handle := CreateSolidBrush(clWhite)
,PixelFormat := pf32Bit
,IgnorePalette := True
,TransparantColor := clWhite
,TransparantMode := tmFixed
,Canvas.Pixels[0, 99] := clWhite
which makes only thát pixel transparent,Modified := True
.So, the wish is to paint only a portion of a newly created bitmap and get the remaining surface transparent.
Using: Delphi 7, Win 7/64.
Just set TransparentColor and Canvas.Brush.Color before setting dimensions of the bitmap.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With