(ActionScript 3) Создание миниатюр в низком разрешении - PullRequest
0 голосов
/ 13 августа 2011

Я пытаюсь создать галерею изображений, аналогичную Android-галерее «Галерея», где это горизонтальная прокрутка списка изображений.Я делаю это с объектами HBox и Bitmap, обернутыми в UIComponent.Проблема в том, что я пытаюсь сделать это для мобильных устройств, а наличие большого количества изображений, открытых в памяти, вызывает проблемы.Я пытался заставить изображения загружаться правильно, поскольку они прокручиваются в поле зрения и выгружаются, как только они исчезают из вида, но загрузка / выгрузка во время прокрутки требует слишком много процессора и вызывает очень изменчивый и плохой пользовательский интерфейс.

Я хочу загружать в память несколько некачественных версий изображений, поэтому мне не нужно загружать / выгружать их.Я попытался уменьшить высоту / ширину, но это, похоже, не влияет на использование памяти.Кто-нибудь знает библиотеку или класс AS, которые могут мне помочь?

Любая помощь будет принята с благодарностью.Спасибо

Ответы [ 4 ]

3 голосов
/ 13 августа 2011

Вы можете создавать новые растровые изображения нужного вам размера и использовать функцию bitmapdata.draw () для создания уменьшенных миниатюр. Хитрость заключается в том, чтобы использовать матрицу преобразования, когда вы вызываете draw, чтобы уменьшить размер изображения.

Вот ссылка на класс Matrix: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/geom/Matrix.html

и вот ссылка на bitmapData.draw () http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#draw()

Если это не на 100% интуитивно для вас, я рекомендую сделать простой SWF, который просто берет изображение и затем использует BitmapData.draw (myImage, myMatrix); создать уменьшенную копию. Как только вы отработаете правильное масштабирование, вы можете скопировать его в мобильное приложение.

1 голос
/ 13 августа 2011

Я не знаю, что сказал Гриффин, правда или нет, но я бы взял растровые данные и нарисовал их в другом объекте растровых данных с конечной высотой и шириной, равными желаемому, а затем использовал матрицу для масштабирования в оригинале.изображение, пока вы рисуете на новое растровое изображение.После создания нового растрового изображения вы можете удалить и удалить все ссылки на исходное растровое изображение, которые должны позволять его GCed.

Если вы перейдете здесь , вы можете прочитать о том, какмасштабировать матрицу.

0 голосов
/ 23 сентября 2011

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

0 голосов
/ 13 августа 2011

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

Actionscript не может самостоятельно обрабатывать файлы изображений, только экземпляр данных во флэш-памятиприложение.(т. е. вы можете пересчитать объект данных растрового изображения как вам угодно, но у вас все еще есть исходный файл в памяти.)Как PHP с библиотекой GD.

...