2012-12-27 9 views
5

Dla programu, który piszę, potrzebuję prostego edytora obrazów. Zasadniczo użytkownik przechodzi do tego edytora, wybierając po prostu obraz z galerii. Po wybraniu zostanie utworzona czynność edytora obrazu i powinna pozwolić użytkownikowi na wykonanie prostych czynności edycyjnych, takich jak obrót, regulacja jasności, zoom itp.Obsługa dużych bitmap w edytorze obrazu

W tej chwili udało mi się z względną łatwością wdrożyć wyżej wymienioną funkcjonalność. Mój problem polega na dynamicznym dodawaniu danego obrazu do ImageView. Jak wielu z was może wiedzieć; bufor transakcji Binder ma ograniczony stały rozmiar, obecnie 1 MB, który jest dzielony przez wszystkie transakcje w toku dla tego procesu. W ten sposób mogę załadować skompresowane wersje mapy bitowej do mojego ImageView i stanowi to dla mnie raczej duży problem (mój program jest przeznaczony głównie do użycia na tabletach). Zrobiłem znaczące badania w tej kwestii i odkryłem, że można zasadniczo podzielić bitmapę na kilka mniejszych bitmap i umieścić je w kilku obrazach ImageView, aby stworzyć iluzję jednego ciągłego obrazu przy użyciu BitmapRegionDecoder (jak zasugerowano w tym thread). Chociaż dzięki temu udało mi się wyświetlić duże obrazy, nie mam pojęcia, jak mam wdrożyć funkcję powiększania przy użyciu wielu instancji ImageView. Czy istnieje stosunkowo prosty sposób robienia tego?

Odpowiedz

3

Spójrz na to video from Google I/O, gdzie opracowują zaawansowaną aplikację galerii z edycją obrazu.

Możesz pobrać kod źródłowy aplikacji here. W ten sposób otwiera się proces edycji obrazu:

private OnItemClickListener mPhotoClickListener = new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // User clicked on photo, open our viewer 
     final Intent intent = new Intent(AlbumActivity.this, PhotoActivity.class); 
     final Uri data = ContentUris.withAppendedId(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id); 
     intent.setData(data); 
     startActivity(intent); 
    } 
}; 

Galeria realizuje również funkcję edycji obrazu. Kod może być pomocny.

3

Czy próbowałeś tego? options.inJustDecodeBounds powinno być ustawione na true.

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
BitmapFactory.decodeResource(getResources(), R.id.myimage, options); 
int imageHeight = options.outHeight; 
int imageWidth = options.outWidth; 
String imageType = options.outMimeType; 

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

Powiązane problemy