Chcem zobraziť obrázok na obrazovke (mám aktivitu, ktorá zobrazuje obrázok):
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
ExifInterface exif = new ExifInterface(imagePath);
int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int rotationInDegrees = exifToDegrees(rotation);
Matrix matrix = new Matrix();
matrix.preRotate(rotationInDegrees);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
Posledný riadok hodí java.lang.OutOfMemoryError
Nechápem, ako to urobiť ... Najprv musím vytvoriť bitmapu (BitmapFactory.decodeFile), ale keď ju chcem otáčať, musím už poskytnúť zdrojovú bitovú mapu - ako ju môžem vyhnúť?
Vďaka
odpovede:
1 pre odpoveď č. 1Skôr ako ju dekódujete, môžete skopírovať snímku pridaním inSampleSize v bitmapových možnostiach. ako je uvedené v dokumente: http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize
Ak je hodnota nastavená na hodnotu> 1, požaduje dekodér, aby podpredsmeroval pôvodný obrázok a vrátil menší obrázok na uloženie pamäte.
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 5;
Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);
Dúfam, že to pomôže.
0 pre odpoveď č. 2
Ak neudeláte nejaké bláznivé veci inde, potom je váš obrázok pravdepodobne príliš veľký.
Stačí len zvýšiť hromadu. Pridajte toto do súboru manifestu:
android:largeHeap="true"
0 pre odpoveď č. 3
Nemôžete otočiť bitmapu na mieste, pretože rozmery sa môžu líšiť. Neviem, prečo nie je možné načítať už otočené bitmapy.
Bitovú mapu môžete otáčať v mieste použitia. Pri kreslení bitovej mapy použite rotačnú maticu, aby ste ju nakreslili natočením.
Ďalšou vecou je, že by ste pravdepodobne mali skontrolovať vašu aplikáciu a pokúsiť sa minimalizovať využitie pamäte. Možno, že bitové mapy, ktoré používate, sú príliš veľké a mali by ste použiť možnosti s inSampleSize nastaveným na 2 alebo viac.