Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использование `TBitmap` в Firemonkey для Kindle Fire: решение проблемы с `EJNIException` в Delphi XE7

Delphi , Графика и Игры , Bitmap

Использование 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;

Подтвержденное решение

После исследования проблемы было найдено несколько потенциальных решений:

  1. Убедитесь, что размер изображения не превышает лимиты памяти приложения. Для небольших изображений это маловероятно, но стоит проверить.

  2. Попробуйте сначала создать TBitmap с известными размерами, а затем загрузить в него изображение:

bmpscale := 1024;
try
  tb := TBitmap.Create(bmpscale, bmpscale);
  tb.LoadFromFile('img.png');
finally
  FreeAndNil(tb);
end;
  1. Измените опцию "largeHeap" в разделе "Version Info" на "True". Это может помочь избежать OutOfMemoryError.

  2. Если вы пытаетесь создать и загрузить TBitmap в многопоточной среде, убедитесь, что операции с TBitmap выполняются в безопасной для потоков манере. Например, используйте TThread.Queue для выполнения операций в отдельном потоке.

  3. После тестирования и дополнительного исследования было выявлено, что создание 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Bitmap ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 12:41:27/0.0035340785980225/0