Использование TBitmap в Firemonkey для Kindle Fire: решение проблемы с EJNIException в Delphi XE7
Разработчики, работающие с Firemonkey в Delphi XE7 для создания приложений под Android, иногда сталкиваются с ошибкой EJNIException, которая возникает при работе с объектами TBitmap. В частности, проблема может проявляться при попытке создать TBitmap из файла, хранящегося на устройстве, в контексте Android-приложения. При этом в режиме Win32 приложение работает корректно.
Описание проблемы
Пользователь сообщества столкнулся с проблемой, когда пытался работать с TBitmap в приложении Firemonkey для Kindle Fire. При выполнении кода, предназначенного для создания TBitmap из файла на устройстве, в режиме Android-приложения возникала исключение EJNIException с сообщением о java.lang.OutOfMemoryError. Пример кода, вызывающего ошибку:
procedure TForm1.Button1Click(Sender: TObject);
var
MyImage: TBitmap;
Path: String;
begin
Path := TPath.GetDocumentsPath + TPath.DirectorySeparatorChar + 'test.png';
if TFile.Exists(Path, true) then
begin
MyImage := TBitmap.CreateFromFile(Path); // Здесь возникает ошибка
end;
end;
Подтвержденное решение
После исследования проблемы было найдено несколько потенциальных решений:
Убедитесь, что размер изображения не превышает лимиты памяти приложения. Для небольших изображений это маловероятно, но стоит проверить.
Попробуйте сначала создать TBitmap с известными размерами, а затем загрузить в него изображение:
Измените опцию "largeHeap" в разделе "Version Info" на "True". Это может помочь избежать OutOfMemoryError.
Если вы пытаетесь создать и загрузить TBitmap в многопоточной среде, убедитесь, что операции с TBitmap выполняются в безопасной для потоков манере. Например, используйте TThread.Queue для выполнения операций в отдельном потоке.
После тестирования и дополнительного исследования было выявлено, что создание TBitmap с помощью CreateFromFile и выполнение этой операции в отдельном потоке решило проблему для некоторых пользователей.
Альтернативные ответы и дополнительные рекомендации
Попробуйте опубликовать полный пример проекта, включая проблемное изображение, на Google+ группе Delphi iOS и Android developers, чтобы получить дополнительную помощь.
Помните, что TBitmap в Firemonkey для Android поддерживается, и решение проблемы может быть связано с конкретными деталями вашего проекта.
Заключение
Работа с TBitmap в Firemonkey для Android может быть непростой задачей, но, следуя вышеуказанным рекомендациям, вы сможете избежать распространенных проблем и успешно интегрировать функционал работы с изображениями в свое приложение.
Разработчики столкнулись с ошибкой `EJNIException` при работе с `TBitmap` в Firemonkey для Kindle Fire под Delphi XE7, что связано с некорректной обработкой изображений в Android-приложении.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.