Как обрезать FMX TBitmap

Я получаю растровое изображение через событие TCameraComponent.SampleBufferReady. Затем мне нужно обрезать полученное изображение, чтобы получить, например, прямоугольное изображение.

Я рассчитываю необходимые параметры по следующей методике:

procedure TPersonalF.SampleBufferReady(Sender: TObject;
  const ATime: TMediaTime);
var
  BMP: TBitmap;
  X, Y, W, H: Word;
begin
  Try
    BMP := TBitmap.Create;
    CameraComponent.SampleBufferToBitmap(BMP, true);
    if BMP.Width >= BMP.Height then //landscape
    begin
      W:=BMP.Height;
      H:=W;
      Y:=0;
      X:=trunc((BMP.Width-BMP.Height)/2);
    end
    else //portrait
    begin
      W:=BMP.Width;
      H:=W;
      X:=0;
      Y:=trunc((BMP.Height-BMP.Width)/2);
    end;
    CropBitmap(BMP, Image1.Bitmap, X,Y,W,H);
  Finally
    BMP.Free;
  End;
end; 

Я нашел ответ от @RRUZДельфи-как-делать-я-культур-а-растровый на месте, но он требует дескриптор API VCL и использует функцию Windows GDI:

procedure CropBitmap(InBitmap, OutBitMap: TBitmap; X, Y, W, H: Word);
  begin
    OutBitMap.PixelFormat := InBitmap.PixelFormat;
    OutBitMap.Width := W;
    OutBitMap.Height := H;
    BitBlt(OutBitMap.Canvas.Handle, 0, 0, W, H, InBitmap.Canvas.Handle, X,
      Y, SRCCOPY);
  end;

Мой проект использует FMX, и я планирую перенести его на платформу Android в будущем. Так что я ожидаю проблем с использованием ручек. Как я могу решить эту проблему?

Ответы на вопрос(1)

Ваш ответ на вопрос