gpt4 book ai didi

delphi - 如何检查加载到 FMX.TBitmap 的 PNG 图像是否具有 alpha channel ?

转载 作者:行者123 更新时间:2023-12-03 18:22:17 32 4
gpt4 key购买 nike

我正在将 PNG 图像加载到 FMX.Type.TBitmap在 Delphi-XE2 Update3 FireMonkey HD 应用程序中。如何检查加载的 PNG 图像是否具有 alpha channel ?

目前,如果我加载带有 alpha channel 的图像,它在 Bitmap.Scanline[Y]^[X] 中具有 alpha 信息。以 $AABBGGRR 的形式。但是,如果我加载没有 alpha 的 PNG 图像,则所述记录只有 $00BBGGRR 条目(AA = 0),就像具有清晰 alpha 的图像一样。因此出现了问题 - 如何确定它是具有 alpha 完全透明的 RGBA 图像还是 RGB 图像(在这种情况下,我将对其进行处理以使 alpha 完全不透明)。注意:检查所有像素不是一种选择。

FMX TBitmap 没有 PixelFormat属性(property),我也找不到HasAlpha旗帜。

最佳答案

你可能不会喜欢这个。

FMX 中的所有位图都是 32 位的,它们是使用来自操作系统的代码加载和保存的,这些代码都是 32 位的。

所以,真正的答案是所有位图都有一个 Alpha channel 。

但是,您真正想知道的是位图是否使用 alpha channel ,唯一的方法是遍历每个像素,看看是否有一个 alpha channel 为 <> 255。

我会推荐以下内容(未经测试):

function TBitmap.IsAlpha(Bitmap: TBitmap): Boolean;
var
I, j: Integer;
Bits: PAlphaColorRecArray;
begin
Bits := PAlphaColorRecArray(StartLine);
for j := 0 to Height - 1 do
for I := 0 to Width - 1 do
begin
if Bits[I + (j * Width)].A <> 255 then
begin
Result := True;
EXIT;
end;
end;
Result := False;
end;

关于delphi - 如何检查加载到 FMX.TBitmap 的 PNG 图像是否具有 alpha channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8653521/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com