相关疑难解决方法(0)

如何在不需要先绘制的情况下获得位图透明度?

默认情况下,新创建的位图似乎具有(白色)背景.至少,对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;
Run Code Online (Sandbox Code Playgroud)

出于某种原因,整个位图表面必须先涂上它才能显得透明,这听起来很奇怪.

尝试以下变体来消除对FillRect所有具有相同结果(没有透明度)的调用:

  • 只有设定Brush.Color,
  • Brush.Handle := CreateSolidBrush(clWhite),
  • PixelFormat := pf32Bit,
  • IgnorePalette := True,
  • TransparantColor := clWhite,
  • TransparantMode …

delphi transparency bitmap

10
推荐指数
1
解决办法
8701
查看次数

标签 统计

bitmap ×1

delphi ×1

transparency ×1