改变PNG图片的透明度 delphi
type TARGBRect = packed record Blue, Green, Red, Alpha: Byte; end; var I, x, y: Integer; bmp: TGpBitmap; bg: TGpGraphics; Data: TBitmapData; P: PInteger; begin DoubleBuffered := True; bmp := TGpBitmap.Create('0.bmp'); try Data := bmp.LockBits(GpRect(0, 0, W, H), [imRead, imWrite], pf32bppARGB); P := Data.Scan0; for y := 1 to Data.Height do for x := 1 to Data.Width do begin // 计算不透明度 with TARGBRect(P^) do Alpha := Max(Red, Max(Green, Blue)); //Alpha := (Red + Green + Blue) div 3; //Alpha := (306 * Red + 601 * Green + 117 * Blue) div 1024; Inc(P); end; bmp.UnlockBits(Data); bg := TGpGraphics.Create(form1.Canvas.Handle); bg.DrawImage(bmp, 0, 0, bmp.wideh, bmp.Height); end; finally bg.Free; bmp.Free; end; end;