Загрузчик не загружает большие изображения

#flash #apache-flex #actionscript-3

#flash #apache-flex #actionscript-3

Вопрос:

У меня есть несколько довольно больших изображений в формате PNG, хранящихся в базе данных (например, 1000×15000 пикселей, 4,5 МБ). Я пытаюсь загрузить это с помощью класса Loader…проблема, с которой я сталкиваюсь, заключается в том, что когда я вызываю load (), ничего не происходит. Никаких событий, никаких ошибок.

Я могу взять то же изображение и внедрить его. Пока я устанавливаю высоту менее 8000 пикселей, она работает нормально. Если я конвертирую встроенное изображение в ByteArray и попытаюсь загрузить его, ничего не произойдет.

Есть предложения?

Комментарии:

1. Почему вы храните изображения в базе данных? Не говоря уже о больших изображениях. И, отвечая на ваш вопрос, изображение на большой флэш-памяти приведет к сбою.

Ответ №1:

В AIR 1.5 и Flash Player 10 максимальный размер объекта BitmapData составляет 8191 пиксель в ширину или высоту, а общее количество пикселей не может превышать 16 777 215 пикселей. (Таким образом, если объект BitmapData имеет ширину 8191 пиксель, его высота может составлять только 2048 пикселей.) В Flash Player 9 и более ранних версиях и AIR 1.1 и более ранних версиях ограничение составляет 2880 пикселей в высоту и 2880 в ширину.

источник: flash.display.BitmapData

Комментарии:

1. Правильно, так есть ли какой-нибудь способ загрузить все это во flash? Мне не нужен он в полном размере, даже если бы я мог показать его в половинном размере, это было бы здорово, но проблема в том, что я вообще не могу загрузить его, чтобы уменьшить масштаб.

2. ресурс изображения шириной 15 000 пикселей немного нелеп. я предполагаю, что вы пытаетесь обрабатывать фотографии с высоким разрешением печати, возможно, чтобы показать предварительный просмотр? если автоматизация не требуется, то лучше всего использовать photoshop и создавать свои собственные эскизы вручную, в противном случае единственное, что я могу придумать, это загрузить содержимое вашего ресурса изображения в ByteArray, а затем создать меньший растровый объект, представляющий большой ресурс изображения, используя некоторый алгоритм создания эскизов.

Ответ №2:

Что ж, похоже, что не было никакого способа обойти ограничение Flash. В итоге я закодировал очень простой сервлет, который обслуживает изображение, а затем отобразил изображение в HTML-компоненте.