delphi - 颜色 alpha channel 不是完全透明的

标签 delphi delphi-xe2 graphics32

我刚刚使用以下代码在 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就代表完全透明!

问:我的代码有问题吗?我哪里错了吗?

enter image description here

最佳答案

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

with BL.Bitmap do
begin
  //...
  CombineMode:= cmMerge;
  DrawMode:= dmBlend;
  //...
end

关于delphi - 颜色 alpha channel 不是完全透明的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21350669/

相关文章:

Delphi XE4 "class not found"但编译正常

c++ - MFC 应用程序中 Delphi 7 和 Delphi XE4 之间的 ActiveX 差异

arrays - 将动态数组转换为静态

数据库记录处理

c++ - 需要帮助将 Graphics32 Delphi 示例转换为 C++

delphi - 在 ImgView32 图层上绘制粗虚线

delphi - 如何更改Delphi中的当前文件夹?

delphi - Delphi 中的时间数学

c# - 断言在库初始化期间未被 except block 捕获