Delphi:ImageList中的PNG,在保持alpha的同时改变颜色

问题描述 投票:1回答:1

德尔福。

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

我尝试了很多方法,没有成功。我试图更改列表的属性,并导出RGB和alpha separeted。

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;

如何在图像列表PNG图像中保留Alpha通道时更改前景色?

delphi png alpha imagelist
1个回答
2
投票

Ehhhh。

我必须手动设置BMPmask的大小,然后掩码正确。

...
BMPmask.Width := il1.Width;
BMPmask.Height := il1.Height;
TImageListHack(il1).GetImages(0, BMPimg, BMPmask);
...
© www.soinside.com 2019 - 2024. All rights reserved.