3

BitmapLayer我刚刚用这段代码在 a 中画了一条抗锯齿线:

procedure TForm4.Button1Click(Sender: TObject);
var
  BL: TBitmapLayer;
begin
  BL:= TBitmapLayer.Create(ImgView.Layers);
  LayerPos:= Point(100, 100);
  CanvasWidth:= 100;
  CanvasHeight:= 100; 

  BL.Location:= FloatRect(
    LayerPos.X,
    LayerPos.Y,
    LayerPos.X + CanvasWidth ,
    LayerPos.Y + CanvasHeight
  );     

  with BL.Bitmap do
  begin
    SetSize(CanvasWidth, CanvasHeight);   
    DrawMode:= dmBlend;
    Clear($0000FF00);  
    LineAS(0, 0, 100, 80, clBlack32);   
  end
end;

正如您在下面的结果中看到的,线条透明度像素具有一些绿色值。那是因为$0000FF00(用于Clear())。但是这种颜色的 alpha 通道为零意味着完全透明!

问:我的代码有问题吗?我在某个地方错了吗?

在此处输入图像描述

4

1 回答 1

0

好的。我找到了。我必须使用CombineMode:= cmMerge;

with BL.Bitmap do
begin
  //...
  CombineMode:= cmMerge;
  DrawMode:= dmBlend;
  //...
end
于 2014-02-08T05:58:51.073 回答