Почему в Flash Player 11 на OS X Lion x64 не может быть растровых данных размером 120 000 x 120 000 пикселей?
Док говорит:
Начиная с AIR 3 и Flash player 11, ограничения на размер объекта BitmapData были удалены. Максимальный размер растрового изображения теперь зависит от операционной системы.
Но почему я не могу иметь объект BitmapData размером 120 000 x 120 000 пикселей? Я на OS X Lion с 64-битным ядром.
Теперь 120 000 ^ 2 дало бы мне 14 400 000 000 пикселей, которые мне нужно занять, а для хранения этого целого требуется всего 34 бита. Но, видимо, у меня может быть 64-битное целое число, нет? Я что-то пропустил? И что значит "зависеть от операционной системы"? Как?
3 ответа
С каких это пор пиксель BitmapData эквивалентен одному биту? Помните, что вы имеете дело с информацией о цвете, поэтому каждый пиксель занимает как минимум uint
(=> размер:32 бита или 4 байта).
Что означает, что ваше потребление памяти на самом деле
120000^2 * 4 => 57,600,000,000 Bytes => ap. 53,6 GB
Также обратите внимание, что в то время как Number
это 64-битный тип данных, int
а также uint
не.
Возможно, вы захотите рассмотреть возможность использования других способов организации ваших данных.
Если вы имеете дело с большой картиной, вы должны разделить ее на части разумного размера. Возможно, ограничения были сняты, но я бы порекомендовал вам ограничиться макс. В 4 раза больше размера сцены (это достаточно мало для достаточно плавной прокрутки и достаточно велико, чтобы вам не приходилось постоянно размещать объекты на сцене).
Если это не фактическая информация о пикселях, которую вы хотите сохранить, возможно, ByteArray может быть альтернативой.
На самом деле, есть несколько программных и аппаратных ограничений для размера адресуемого размера. Кроме 32/64 битной архитектуры, есть несколько других:
- общий предел контроллера памяти
- количество слотов оперативной памяти x максимальный размер модуля RAM
- некоторые реализации уровня управления памятью, такие как PAE (зависит от CPU + OS), могут даже увеличить объем общей адресуемой виртуальной памяти, но максимальный объем физической памяти остается прежним.
- ограничения маркетинговой / программной ОС (версии 2.5 той же вики-статьи см. в разделе 2.5);
Единственная информация, которую я нашел в веб-состояниях, - Mac OS X Lion (не Server) имеет ограничение программного обеспечения 64 ГБ. Однако попытка выделить больше памяти за единицу, чем машина физически, вряд ли удастся.
Какие вещи вы хотите сохранить? Что-то генеративное? Я думаю, что вам нужно создать систему, в которой вы используете фиксированное случайное начальное число, и создать что-то для просмотра / создания с низким разрешением. Вы должны быть в состоянии повторить то же самое движение. Вы, вероятно, должны сохранить (пользовательское) движение, чтобы добраться до этой точки также. Если у вас есть это, вы должны применить переменную масштаба и визуализировать плитку на плитку, чтобы обойти холст с большой задницей. Такая система требует времени для сборки и может создать некоторые проблемы, если материал, который нужно нарисовать, масштабируется слишком высоко.
Как уже говорилось, для такого рода отпечатков вам не нужны такие высокие разрешения. Конечно, кроме того, было бы непросто получить эти огромные размеры.