默认情况下,新创建的位图似乎具有(白色)背景。至少,对 Pixels 属性的查询证实了这一点。但是为什么当 Transparent
设置为 true 时,背景颜色不用作透明颜色?
考虑这个简单的测试代码:
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;
出于某种原因,必须先绘制整个位图表面,然后才能显示为透明,这听起来有点奇怪。
以下变体尝试消除对 FillRect
的调用,所有变体都具有相同的结果(无透明度):
- 仅设置
Brush.Color
, Brush.Handle := CreateSolidBrush(clWhite)
,PixelFormat := pf32Bit
,IgnorePalette := True
,透明颜色 := clWhite
,TransparantMode := tmFixed
,Canvas.Pixels[0, 99] := clWhite
仅使该像素透明,修改:= True
。
因此,我们的愿望是仅绘制新创建的位图的一部分,并使其余表面透明。
使用:Delphi 7、Win 7/64。
最佳答案
在设置位图尺寸之前,只需设置TransparentColor 和 Canvas.Brush.Color。
关于delphi - 如何在无需先绘制的情况下获得位图透明度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732435/