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!
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
możesz rzucić okiem na http://stackoverflow.com/questions/10993568/android-image-file-size-limit-and-how-to-handle-large-images – erbsman
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