如何更改32位TBitmap中特定颜色的alpha值?

Sal*_*dor 1 delphi bitmap tbitmap

当像素包含32位TBitmap的特定颜色时,我需要更改alpha分量的值,我知道要访问位图数据的ScanLine属性,但我无法弄清楚如何更改每个alpha分量像素.

RRU*_*RUZ 5

这是一个基本的实现

首先,您需要定义一个记录来保存ARGB结构

  TRGB32 = record
    B, G, R, A: byte;
  end;
Run Code Online (Sandbox Code Playgroud)

然后,您必须定义一个TRGB32数组来强制转换Scanline并获取和设置值.

检查此示例方法

procedure SetAlphaBitmap(const Dest: TBitmap;Color : TColor;Alpha:Byte);
type
  TRGB32 = record
    B, G, R, A: byte;
  end;
  PRGBArray32 = ^TRGBArray32;
  TRGBArray32 = array[0..0] of TRGB32;
var
  x, y:    integer;
  Line, Delta: integer;
  ColorRGB : TColor;
begin
  if Dest.PixelFormat<>pf32bit then  exit;

  ColorRGB:=ColorToRGB(Color);
  Line  := integer(Dest.ScanLine[0]);
  Delta := integer(Dest.ScanLine[1]) - Line;
  for y := 0 to Dest.Height - 1 do
  begin
    for x := 0 to Dest.Width - 1 do
      if TColor(RGB(PRGBArray32(Line)[x].R, PRGBArray32(Line)[x].G, PRGBArray32(Line)[x].B))=ColorRGB then
        PRGBArray32(Line)[x].A := Alpha;
    Inc(Line, Delta);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

你也可以看看我写这个操作32位位图的单元

  • 这是值得商榷的.我更喜欢指针和公司.但其他人更喜欢索引.随便挑选. (2认同)