2012-06-18 4 views
1

다른 사람들이 이미지를 메모리에로드 할 때 정확한 C# 코드가 이미지를 저장하는 데 더 많은 메모리를 사용한다는 사실을 알고 싶습니다. (자바에서 1.5 배).C#에서 BitmapFactory.DecodeFile을 사용할 때 메모리 풋 프린트가 더 큽니다. (작은 이미지의 경우 거대한 메모리)

105.5 MB의 총 메모리 크기의이 자바 코드 결과 : 148.1 MB에서

Bitmap[] bitmaps = new Bitmap[100]; 

for (int i = 0; i < 100; i++) 
{ 
    String root = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    String imagePath = "/evolution/threesixty/216/Edaphosaurus_001.jpg"; 

    bitmaps[i] = BitmapFactory.decodeFile(root + imagePath); 
} 

이 C# 코드 결과 :

Bitmap[] bitmaps = new Bitmap[100]; 

for (int i = 0; i < 100; i++) 
{ 
    string root = Environment.ExternalStorageDirectory.AbsolutePath; 
    string imagePath = "/evolution/threesixty/216/Edaphosaurus_001.jpg"; 

    bitmaps[i] = BitmapFactory.DecodeFile(root + imagePath); 
} 

사람이에 관해서는 어떤 아이디어가 있습니까 왜? .NET 래퍼가 여분의 바인딩 데이터 나 물건을 보관하기 위해 조금 더 사용할 수는 있지만 그 정도는 아닙니다. 측면 질문으로

또한

: 각각의 이미지는 60킬로바이트 디스크에에게있다, 왜 인 메모리 버전 1메가바이트? 내 로딩 방법은 샘플링/밀도 검사를 수행하지 않는다는 것을 알고 있지만 목표가 아닙니다. 확실히 012KB100KB 이미지로드시 100KB의 메모리 공간을 초과하지 않아야합니까? 여기

내가 사용하고있는 이미지 (994x748px @ 300DPI) : 안드로이드 메일 링리스트에 대한 모노의 응답을 바탕으로

the image

답변

2

가 :

이미지는 로딩되어 있습니다 JPG 압축. 비트 맵은 비 압축 형식입니다. 작은 인터넷 검색은 일반적인 JPEG 의 압축률이 10 : 1에서 20 : 1로 눈에 띄지 않는 이미지 의 품질을 잃지 않고 나타냈다. 60KB -> 1MB는 ​​해당 범위 내에 있습니다.

그리고 또 다른 : 메모리에 비트 맵을로드

는 디스크에의 압축 된 크기보다 더 많은 메모리를 차지하게됩니다 어떤 비트 맵 설정은 당신이 그것으로로드에 따라 압축을 풉니 다.

압축이 정보보고 후 나는 (내가 그 압축 저장하고 그 다음 메모리에 압축을 해제합니다로드의 메모리 이미지를 작게 만드는 실현으로 내 머리에 무슨 일이 있었는지 전혀 모른다) 이제 어떻게 작동하는지 이해하십시오.) 비트 맵으로 저장하면 이미지가 거의 2MB로 압축이 풀리고 Irfanview에서 이미지 속성을 보면됩니다.

그래서 지금은 표본 크기를 2으로 설정하고 Bitmap.Config.Rgb565을 사용하고 있습니다. 이렇게하면 총 이미지 크기가 약 30MB로 줄어들어 더 나은 방법입니다. 품질은 좋지 않지만, 필요할 때 더 높은 해상도의 이미지를로드 할 수 있고 사용자는 알지 못합니다.

+0

방문 : http://mono-for-android.1047100.n5.nabble.com/ 대형 문자 - 사용 - 비트 맵 팩토리 - 코드 파일 - -image-td5710394.html; cid = 1340028135060-792 (메일 링리스트 스레드 용) – Cheesebaron

+0

두뇌 방귀가 있었음에 틀림 없다 ... – Matthew

4

100 개의 이미지에 대한 148.1MB의 그림은 내가 예상 한 정확한 수치입니다. 994 x 748은 743,512 픽셀을 제공합니다. 픽셀 당 2 바이트 (이미지의 품질이 매우 낮습니다. FWIW - RGB565 형식은 수십 년 전에 금지되었을 것입니다) 형식을 사용한다고 가정하면 이미지 당 1.481MB가 제공됩니다.이것은 이미지 파일이 압축되어 있기 때문에 물론 디스크의 이미지 크기보다 훨씬 큽니다.

이 자바 버전이 105.5MB 만 사용되는 이유는 알 수 없습니다. 픽셀 당 1.333 바이트를 사용하는 비트 맵 형식은 없습니다. 대부분의 경우 메모리 사용법을 잘못 읽은 것 같습니다. 그렇지 않으면 자바 런타임이 일부 이미지를 메모리에 보관하는 대신 디스크에 캐싱합니다.

관련 문제