Pracuję z obrazami o dużych rozmiarach, a gdy próbuję je obracać, pojawia się wiele sekund (applying matrix on the bitmap)
. Widziałem, że galeria systemu Android może wykonać to zadanie w bardzo szybki sposób. Jak to jest możliwe?Najszybszy sposób obracania wielkoformatowej bitmapy
Myślałem, aby wykonać obrót na asyncTask, stosując tylko obrót ImageView (który nie zajmuje dużo czasu) na głównym wątku, ale jeśli aplikacja zostanie zabita, zanim asyncTask dotrze do końca, aplikacja spada w niespójnym stanie.
To mój bitmapy kod obrót, który trwa długi czas realizacji dużych bitmap:
Matrix mat = new Matrix();
mat.setRotate(90);
bMap = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), mat, true);
To jest dobry pomysł, aby poprawić doświadczenia użytkownika, oczywiście. Ale głównym problemem jest to, że gdy pracuję nad oryginalnym obrazem na końcu, zadanie może wymagać dużo czasu i mam te komplikacje: - jeśli wykonuję operację na głównym wątku, użytkownik musi czekać - jeśli wykonam operację na asyncTask, aplikacja powinna zostać zabita przed jej zakończeniem, a zmiany zostaną utracone –
Może to brzmieć jak odchylenie od pierwotnego wymogu - możesz narysować prostokąt zamiast obracać cały obraz w czasie rzeczywistym . w końcu to, czego potrzebuje użytkownik, wskazuje na to, jak bardzo obraz się obrócił. Będzie to szybsze i łatwiejsze do wykonania w wątku UI bez opóźnień. – Ronnie
Przepraszam za nieporozumienie, moje pytanie brzmi: "Jak wykonać rotację mapy bitowej w szybki sposób, jak to robi galeria systemu". W każdym razie jestem bardzo zdezorientowany twoimi wskazówkami. Na końcu potrzebuję wykonać obrót na dużej bitmapie, nie dać użytkownikowi wskazania o rotacji, tak jak powiedziałeś. Ponadto zezwalam tylko na obrót o 90, 180, 270, 360 stopni, tak jak pozwala na to galeria. Dziękuję za cierpliwość :) –