Por que o tamanho da imagem e a memória são necessários para exibi-la de forma diferente?

-1

Eu aprendi de um post overflow de pilha que a memória necessária para exibir uma imagem e o tamanho da imagem é igual a

4 * image dimensions

Eu tenho algumas imagens 800x800 e vejo que seu tamanho é de cerca de cem KB, o que eu acho que é bem pequeno. Mas de acordo com a fórmula acima, é necessário mais de 2MB para exibi-lo!

O post do SO diz que, como o bitmap está usando cores ARGB, cada pixel requer 4 bytes de espaço de armazenamento. Então é por isso que a fórmula é 4 * dimensões da imagem. Mas vejo que apenas 100 KB de espaço é necessário para armazenar a imagem!

O computador usa um método diferente para armazenar a imagem? 1 pixel ainda precisa de 4B para ser armazenado? Como isso está acontecendo?

Sweeper
fonte
E Onde você vê que seu tamanho é de cerca de cem kB?
Run CMD
Em sua janela de propriedades
Sweeper
Você quer dizer, no disco?
Run CMD
É um fato que a resposta que você cita dá uma má recomendação. RGB888 é sua primeira escolha se você não precisa de transparência, não de ARGB. Especialmente em um dispositivo móvel. Ele economiza 25% de memória em relação ao ARGB e também, se você empilhar Android View s, adicionando transparência vai desacelerar as coisas.
Run CMD

Respostas:

3

IrfanView pode ajudar a visualizar rapidamente a memória usada:
(veja o cálculo da memória)

enter image description here

LARGURA x ALTURA x (BITS POR PIXEL) = memória necessária para carregar a imagem completa

Felicidades!

Ben
fonte
2

Sua imagem está compactada (por exemplo, com jpeg ou png ). Se você armazenasse a imagem em um formato descompactado ( tiff sem zip compressão) você também teria esse tamanho no disco.

Germar
fonte
O Q pergunta como isso está acontecendo.
Run CMD
1
@ClassStacker eu sei. E minha resposta é with compression
Germar
Sim ... JPEG / JPG e PNG usam métodos de compactação com perdas
pun
1
@ The_IT_Guy_You_Don't_Like Os PNGs usam métodos de compactação com perdas? Quem te contou essa bobagem?
Run CMD
@ The_IT_Guy_You_Don't_Like jpeg usa uma compactação com perdas. PNG é sem perdas
Germar
2

A memória necessária para armazenar uma imagem pode ser menor que a memória necessária para exibi-la. Por exemplo, se a imagem for um retângulo verde de 80 x 80, você poderá armazená-la como o equivalente a "80 por 80 retângulo verde". Mas para exibi-lo, você precisa de 1600 pontos verdes, cada um dos quais ocupará algum espaço.

David Schwartz
fonte
Você quer armazenar um quadrado de 80x80, ele precisa apenas armazenar um pixel de verde e alguns metadados dizendo que é 80x80?
Sweeper
@Sweeper It posso faça isso para armazená-lo. Mas não pode fazer isso para exibi-lo.
David Schwartz