Получение эскизов из файлов изображений - PullRequest
0 голосов
/ 19 октября 2018

Я работаю над приложением, в котором я хотел бы отобразить большое количество изображений, из которых пользователь может выбирать для просмотра в полном разрешении.Подмножество изображений будет видно пользователю в любой момент времени, количество которых контролируется пользователем с помощью элемента управления, который будет увеличивать или уменьшать размеры миниатюр.

В настоящее время, если загружено слишком много изображенийприложение естественно исчерпает память GPU.

Я думаю о нескольких возможных подходах, но я не уверен, какой из них лучше:

  1. Загрузка полного изображения в память, изменение размера изображения в миниатюру с использованием процессоразатем отправьте его в графический процессор
  2. Загрузите полное изображение в память, отправьте его в графический процессор и измените его размер на графическом процессоре до размера миниатюр, используя vkCmdBlitImage
  3. Загрузите миниатюру (?) из файла, которыйдолжен быть встроен в JPEG?(не уверен, как получить миниатюры)

Как лучше всего подойти к этому?

1 Ответ

0 голосов
/ 19 октября 2018

Метод изменения размера не зависит от нехватки памяти.Почти на любом устройстве у вас должно быть достаточно памяти для хранения кадрового буфера и нескольких изображений на экране.Таким образом, вам не хватит памяти, только если вы попытаетесь сохранить в памяти множество растровых изображений (в полном разрешении или в виде миниатюр).Если вы хотите поддерживать произвольное количество изображений, вам потребуется схема, в которой вы сохраняете только растровые изображения в памяти для текущих видимых миниатюр, а также некоторые дополнительные «предыдущие» и «следующие» для плавной прокрутки.Вам нужно будет извлекать новые из хранилища по мере их прокрутки пользователем, заменяя те, которые находятся в противоположном направлении прокрутки.

Если у вас есть возможность хранить миниатюры в хранилище вместе с изображениями в полном разрешении, тогда вы должны просто загрузить их, пока вам не понадобится версия с полным разрешением.Это значительно упростит отслеживание прокрутки (и использование меньшей полосы пропускания, если «хранилище» == «облако», или питания, если устройство работает от батареи и т. Д.).

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

...