Podczas śledzenia poważnych problemów z pamięcią w mojej aplikacji, sprawdziłem kilka zrzutów sterty z mojej aplikacji, a przez większość czasu mam OGROMNĄ bitmapę, którą daję nie wiem.Jak faktycznie wyświetlić bitmapę pobraną ze zrzutu sterty Androida?
Zajmuje 9,4 MB lub 9 830,400 bajtów, a właściwie obraz 1280 x 1920 przy 4 bajtach na piksel.
Sprawdziłem Eclipse MAT, to jest rzeczywiście bajt [9830400], który ma jeden przychodzący numer referencyjny, który jest android.graphics.Bitmap
.
Chciałbym zrzucić to do pliku i spróbować go zobaczyć. Nie mogę zrozumieć, skąd się bierze. Mój największy obraz we wszystkich moich rysunkach to 640x960 png, który zajmuje mniej niż 3 MB.
Próbowałem użyć Eclipse do "kopiowania wartości do pliku", ale myślę, że po prostu drukuje bufor do pliku, i nie znam żadnego oprogramowania obrazującego, które może odczytać strumień bajtów i wyświetlić go jako 4 bajty na piksel obrazu.
Każdy pomysł?
Oto, co starałem: zrzucić tablicę bajtów do pliku, wciśnij go do/sdcard/img i załadować działalność tak:
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
final File inputFile = new File("/sdcard/img");
final FileInputStream isr = new FileInputStream(inputFile);
final Bitmap bmp = BitmapFactory.decodeStream(isr);
ImageView iv = new ImageView(this);
iv.setImageBitmap(bmp);
setContentView(iv);
Log.d("ImageTest", "Image was inflated");
} catch (final FileNotFoundException e) {
Log.d("ImageTest", "Image was not inflated");
}
}
nie widzę nic.
Czy wiesz, jak jest zakodowany obraz? Powiedzmy, że jest przechowywany w byte[] buffer
. buffer[0]
jest czerwony, buffer[1]
jest zielony itp.?
Czy to nie jest po prostu rodzimy cache renderowania? Czy używasz akceleracji sprzętowej? – Peterdk
Tak, mam przyspieszenie HW. Ale to nie wyjaśnia, dlaczego moja bitmapa została zwiększona o 200% i dlaczego ta ogromna bitmapa jest przydzielana w stercie, IMHO. –
Czy miałeś szczęście, aby dowiedzieć się, jaki to był obraz? Ja też mam taki nieuczciwy obraz, który zajmuje 1,1 MB i wydaje się pochodzić z fabrycznie załadowanych zasobów Androida. Kiedy patrzę na podgląd bufora bajtów za pomocą GIMP, widzę niebieski gradient radialny o rozmiarze 1044x270. – c05mic