【问题标题】:Delphi: PNG in ImageList, change color while keep alphaDelphi:ImageList中的PNG,在保持alpha的同时改变颜色
【发布时间】:2019-08-11 23:32:01
【问题描述】:

德尔福。

我有一个包含使用 alpha 通道的 PNG 图片的 ImageList(TImageList 或 DevExpress 的 TcxImageList)。图片的RGB部分是一个黑色方块。 Alpha 通道包含真实图片的形状。我想改变黑色方块的颜色,同时保持 alpha 通道中的形状。 (所以最终我改变了图片形状图标的颜色。)

我尝试了很多方法,但都没有成功。我尝试更改列表的属性,并将 RGB 和 alpha 分开导出。

TImageList:掩码未导出。如果我执行 SaveToFile,它会保存一个 0 字节的文件,并且 Replace 还说掩码的大小不正确(0*0 px)

BMPimg := TBitmap.Create;
BMPmask := TBitmap.Create;
Try
  TImageListHack(il1).GetImages(0, BMPimg, BMPmask);
  BMPimg.Canvas.Brush.Color := clRed;
  BMPimg.Canvas.FillRect(TRect.Create(0, 0, BMPimg.Width, BMPimg.Height));
  il1.Replace(i, BMPimg, BMPmask);
  End;
Finally
  BMPimg.Free;
  BMPmask.Free;
End;

TcxImageList:将图片+蒙版加载到BMPimg中,蒙版是黑色方块而不是BMPmask中的形状。

BMPimg := TBitmap.Create;
BMPmask := TBitmap.Create;
Try
  il1.GetBitmap(i, BMPimg);
  il1.GetMask(i, BMPmask);
  BMPimg.Canvas.Brush.Color := clRed;
  BMPimg.Canvas.FillRect(TRect.Create(0, 0, BMPimg.Width, BMPimg.Height));
  il1.Replace(i, BMPimg, BMPmask);
Finally
  BMPimg.Free;
  BMPmask.Free;
End;

如何在 imagelist 的 PNG 图像中保留 alpha 通道的同时更改前景色?

【问题讨论】:

    标签: delphi png alpha imagelist


    【解决方案1】:

    嗯嗯。

    我必须手动设置 BMPmask 的大小,然后掩码就来了。

    ...
    BMPmask.Width := il1.Width;
    BMPmask.Height := il1.Height;
    TImageListHack(il1).GetImages(0, BMPimg, BMPmask);
    ...
    

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多