如何直接在FMX2中访问TBitmap像素(TBitmap.ScanLine替换)?

Rom*_*sky 4 delphi firemonkey firemonkey-fm2

FMX.Types.TBitmap班有ScanLine在FMX(FireMonkey)财产,但似乎除去此属性,并在FMX2(FireMonkey FM2)丢失.

有没有解决方法?我们如何TBitmap直接在FMX2中访问内容?

Dav*_*nan 7

对于直接访问,您应该使用该Map方法.该文档包含许多示例,例如FMX.AlphaColorToScanline:

function TForm1.TestAlphaColorToScanline(ABitmap: TBitmap;
  start, count: integer): TBitmap;
var
  bitdata1, bitdata2: TBitmapData;
begin
  Result := TBitmap.Create(Round(ABitmap.Width), Round(count));
  if (ABitmap.Map(TMapAccess.maRead, bitdata1) and
    Result.Map(TMapAccess.maWrite, bitdata2)) then
  begin
    try
      AlphaColorToScanline(@PAlphaColorArray(bitdata1.Data)
        [start * (bitdata1.Pitch div GetPixelFormatBytes(ABitmap.PixelFormat))],
        bitdata2.Data, Round(Result.Height * Result.Width),
        ABitmap.PixelFormat);
    finally
      ABitmap.Unmap(bitdata1);
      Result.Unmap(bitdata2);
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)