我刚刚使用以下代码在 BitmapLayer
中绘制了一条抗锯齿线:
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 channel 为0就代表完全透明!
问:我的代码有问题吗?我哪里错了吗?
最佳答案
好的。我找到了。我必须使用 CombineMode:= cmMerge;
with BL.Bitmap do
begin
//...
CombineMode:= cmMerge;
DrawMode:= dmBlend;
//...
end
关于delphi - 颜色 alpha channel 不是完全透明的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21350669/