Вопрос обрезки изображений в приложениях на Delphi, использующих FMX, является актуальным, особенно если проект планируется портировать на платформу Android. В данном случае, пользователь столкнулся с необходимостью обрезки изображения, полученного через событие TCameraComponent.SampleBufferReady. Для этого были вычислены параметры обрезки, но использовался метод, требующий VCL API handle и Windows GDI функций, что может вызвать проблемы при портировании на Android.
Решение проблемы обрезки изображений
Для решения этой задачи можно использовать метод CopyFromBitmap, который доступен в FMX и не зависит от Windows GDI. Вот пример кода, который демонстрирует, как можно обрезать изображение без использования VCL API handle и Windows GDI функций:
procedure CropBitmap(InBitmap, OutBitmap: TBitmap; X, Y, W, H: Word);
var
iRect: TRect;
begin
OutBitmap.PixelFormat := InBitmap.PixelFormat; // Убедитесь, что это не только чтение
OutBitmap.Width := W;
OutBitmap.Height := H;
iRect.Left := X;
iRect.Top := Y;
iRect.Width := W;
iRect.Height := H;
OutBitmap.CopyFromBitmap(InBitmap, iRect, 0, 0);
end;
Важные замечания
Убедитесь, что объекты InBitmap и OutBitmap существуют перед вызовом CropBitmap, так как в примере не выполняется проверка на их наличие.
Свойство PixelFormat является только для чтения, поэтому его присваивание OutBitmap.PixelFormat := InBitmap.PixelFormat; может быть неэффективным и его следует использовать только для демонстрации, что это свойство должно быть скопировано (но фактически его состояние может быть не важно для копирования битов).
Метод CopyFromBitmap имеет несколько перегрузок, убедитесь, что вы используете правильную.
Заключение
Используя метод CopyFromBitmap из FMX, вы можете обрезать изображения без необходимости использования VCL API handle и Windows GDI функций, что делает ваш код более кросс-платформенным и удобным для будущего портирования под Android.
Этот подход обеспечивает совместимость с FireMonkey, что является ключевым фактором для разработчиков, планирующих расширение своей аудитории на мобильные платформы, включая Android.
Обрезка изображений в приложениях на Delphi с использованием FMX для портирования на Android требует применения методов, не зависящих от VCL и Windows GDI, для обеспечения кросс-платформенности.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.