Почему размер изображения и объем памяти, необходимые для его отображения, отличаются?

888
Sweeper

Из сообщения о переполнении стека я узнал, что память, необходимая для отображения изображения и его размера, равна

4 * image dimensions 

У меня есть около 800x800 изображений, и я вижу, что его размер составляет около ста КБ, что, я думаю, довольно мало. Но согласно приведенной выше формуле для его отображения требуется более 2 МБ!

В сообщении SO говорится, что поскольку растровое изображение использует цвета ARGB, каждому пикселю требуется 4 байта дискового пространства. Вот почему формула 4 * размеры изображения. Но я вижу, что для хранения изображения требуется всего 100 КБ!

Использует ли компьютер другой метод для сохранения изображения? 1 пиксель все еще нуждается в 4B, чтобы быть сохраненным? Как это происходит?

-1
И _where_ вы видите, что его размер составляет около ста кБ? Run CMD 8 лет назад 0
В окне его свойств Sweeper 8 лет назад 0
Вы имеете в виду, на диске? Run CMD 8 лет назад 0
Это факт, что ответ, который вы цитируете, дает плохую рекомендацию. RGB888 - ваш первый выбор, если вам не нужна прозрачность, а не ARGB. Особенно на мобильном устройстве. Это экономит 25% памяти по сравнению с ARGB, а также, если вы используете Android View, добавление прозрачности замедлит работу. Run CMD 8 лет назад 0

3 ответа на вопрос

3
Ben

IrfanView can help to quickly view the used memory:
(see the memory calculation)

enter image description here

WIDTH x HEIGHT x (BITS PER PIXEL) = memory needed to load the full image

Cheers!

2
Germar

Ваше изображение сжато (например, с помощью jpegили png). Если вы сохраните изображение в несжатом формате ( tiffбез zipсжатия), вы также получите этот размер на диске.

Вопрос спрашивает, как это происходит. Run CMD 8 лет назад 0
@ ClassStacker я знаю. И мой ответ "со сжатием" Germar 8 лет назад 1
Да ... JPEG / JPG и PNG используют методы сжатия с потерями pun 8 лет назад 0
@ The_IT_Guy_You_Dont_Like PNG использует методы сжатия с потерями? Кто сказал тебе эту глупость? Run CMD 8 лет назад 1
@ The_IT_Guy_You_Dont_Like jpeg использует сжатие с потерями. PNG без потерь Germar 8 лет назад 0
Что ж, не полная чушь, так как PNG ** поддерживает сжатие без потерь **, но оно без потерь ** с позиции, не обязательно с цветом ** pun 8 лет назад 0
@ ClassStacker, вы также можете прочитать [это] (http://www.howtogeek.com/203979/is-the-png-format-lossless-since-it-has-a-compression-parameter/) pun 8 лет назад 0
@ The_IT_Guy_You_Dont_Like Что ты пытаешься сказать? Как ссылка способствует обсуждению? И что такое сжатие, которое является позиционным без потерь, но не цветным? Run CMD 8 лет назад 0
2
David Schwartz

Память, необходимая для хранения изображения, может быть меньше памяти, необходимой для его отображения. Например, если изображение представляет собой зеленый прямоугольник 80x80, его можно сохранить как эквивалент «зеленого прямоугольника 80 на 80». Но для его отображения вам понадобится 1600 зеленых точек, каждая из которых будет занимать определенное место.

Вы хотите сохранить квадрат 80х80, для этого достаточно одного пикселя зеленого и метаданных, говорящих о 80х80? Sweeper 8 лет назад 0
@Sweeper * может * сделать это, чтобы сохранить его. Но он не может сделать это, чтобы отобразить это. David Schwartz 8 лет назад 0

Похожие вопросы