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?


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!


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.