2011-09-01 16 views
9

Mam proste pytanie: czy powinienem zmienić rozmiar większej mapy bitowej przed dodaniem do ImageView lub pozwolić ImageView zmienić rozmiar bitmapy? Co jest właściwym sposobem, jeśli chodzi o wydajność?Czy należy zmienić rozmiar mapy bitowej przed dodaniem do ImageView lub pozwolić obrazowi zmienić rozmiar mapy bitowej?

Dzięki

+0

Czy skalowanie do ustalonej wielkości piksela (tj ,. px) lub gęstości/skali niezależne (tj dp/SP) wielkości? –

+0

Do kąpieli. Zapomniałem powiedzieć, że bitmapa jest tylko trochę większa niż wysokość/szerokość ImageViews, około 10%. – Benjamin

+0

Jeśli jest tylko trochę większy, po prostu użyj 'setScaleType'. Jeśli byłaby większa o rząd wielkości, zaleciłabym skalowanie w dół podczas/po załadowaniu i odrzucenie oryginału. – Dave

Odpowiedz

11

Rozważ użycie skalę dla ImageView i nie martwić o zmianę rozmiaru. można skalować obraz tak, na przykład:

image.setAdjustViewBounds(true); 
image.setMaxHeight(50); 
image.setMaxWidth(50); 
image.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
+0

Jeśli obraz miał 1000 x 1000, a chciałeś go mieć 50x50, czy to naprawdę najlepszy sposób? Wydaje mi się to nieefektywne. – Ricky

+0

oraz jeśli przycinasz obraz lub zmieniasz jego rozmiar, możesz stracić jego jakość, więc skalowanie to najlepszy sposób na zrobienie tego i utrzymanie wysokiej jakości. – Arkde

1

Im większy obraz, tym większy rozmiar, nie będę myśleć wydajność naprawdę wpływa jednak zachować rzeczy skuteczny.

Można również umieszczać różne obrazy wielkości w różnych folderach dla różnych rozdzielczościach:

res/drawable-mdpi/my_icon.png  // bitmap for medium density 
res/drawable-hdpi/my_icon.png  // bitmap for high density 
res/drawable-xhdpi/my_icon.png  // bitmap for extra high density 

Supporting different size screens

1

możemy zmienić rozmiar istniejącego bitmapę do dowolnej wielkości z wykorzystaniem bitmap.createScaledBitmap użyj poniższego kodu.

bmp=Bitmap.createScaledBitmap(bmp,destBitmapWith, destBitmapHeight,true); 
+0

Dokładnie to, czego szukałem, ponieważ BitmapFactory zwraca niezmienne bitmapy. –

1

Można zrobić tak:

ImageView imageView = (ImageView) findViewById(R.id.imageView); 
     imageView.setAdjustViewBounds(true); 
     imageView.setMaxHeight(imageView.getHeight()); 
     imageView.setMaxWidth(imageView.getWidth()); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
Powiązane problemy