2012-10-26 11 views
9

Właśnie encontered trudny problem ...Zapisywanie duży obraz do PNG

Oto moja historia:

Moje urządzenie Samsung Galaxy Note, normalnie, to wykonuje zdjęcia w rozdzielczości 3264 * pikseli. Uwielbiam dobre zdjęcia, kiedy szukam szczegółowych informacji, ale tutaj go nienawidzę, ponieważ jest on ogromny w obsłudze w systemie Android. Mogę odczytać i wyświetlić obraz o tej dużej rozdzielczości, muszę narysować linie na nim, a następnie zapisać obraz i linie do png. Mój ból głowy jest to, że moja Android zawsze daje mi schodzi z memery wyjątkiem, gdy próbuję utworzyć zmienny bitmapy tak:

Bitmap bmp = Bitmap.createBitmap(3264, 2448, Config.RGB_565); 
    Canvas cv = new Canvas(bmp); 
    //draw a line and save and restore canvas 
    // I found an alternative solution yet proven to be uncorrect: 
    myImageView.setDrawingCacheEnabled(true); 
    myImageView.buildDrawingCache(true); 
    Bitmap bmp = myImageView.getDrawingCache(); 
    //save bmp to png 

Kiedy wyjątek

bmp.width * bmp.height * 4 > getScaledMaximumDrawingCacheSize() 

wyskakuje. Przetestowałem myImageView.measure(...) i myImageView.layout(...), nie działa dla mnie. (Wszystko jest w porządku, kiedy testuję ten sam kod przy użyciu mniejszych obrazów)

Czy każdy ekspert wie, jak rozwiązać ten problem lub zaproponować mi rozwiązanie? Dzięki!

+0

Czy obliczył pamięć wymagana do bitmapy tej wielkości i jakości. Jest ogromna niezależnie od platformy, na której się tworzy, ale w przypadku ograniczonych możliwości zarządzania obiektami bitmapowymi okazało się, że są one bardziej kłopotliwe w przypadku urządzeń z ograniczoną pamięcią. – paulkayuk

+1

możesz rzucić okiem na http://stackoverflow.com/questions/10993568/android-image-file-size-limit-and-how-to-handle-large-images – erbsman

+0

Możesz spróbować pierwszej porcji dużą bitmapę na kilka kawałków, a następnie ostrożnie narysuj i wyrównaj linie na nich. Następnie musisz złożyć małe kawałki z powrotem do całej dużej bitmapy. – dumbfingers

Odpowiedz

1

Może nie jest to ostateczne rozwiązanie, ale czy próbowałeś zwiększyć rozmiar sterty?

dla Androida 2.2 lub niższych wersjach:

dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(sizeInBytes); 

Dla Androida 2.3 or or higher versions:

android:largeHeap="true" 
Powiązane problemy