사진을 찍어 그 위에 오버레이를 추가하려고합니다. 여기에 내 코드 (단지 콜백)입니다 : 내 삼성 갤럭시 S3에 다음과 같은 오류가Android OutOfMemoryException 카메라로 사진 찍기
private PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(final byte[] data, Camera camera) {
if(!dirFile.exists()){
dirFile.mkdirs();
}
try {
String name = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date()) + ".jpg";
picturePath = new File(dirFile, name);
new AsyncTask<Void, Void, Void>(){
FileOutputStream fos = new FileOutputStream(picturePath);
Bitmap photo;
@Override
protected Void doInBackground(Void... params) {
photo = BitmapFactory.decodeByteArray(data, 0, data.length).copy(Config.ARGB_8888, true);
Bitmap cadre = BitmapFactory.decodeResource(getResources(), R.drawable.cadre16001200);
Canvas canvas = new Canvas(photo);
canvas.drawBitmap(cadre, new Matrix(), null);
cadre.recycle();
photo.compress(CompressFormat.JPEG, 100, fos);
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
geotag(picturePath.toString());
return null;
}
protected void onPostExecute(Void result) {
dialog.dismiss();
mCamera.startPreview();
//Affiche la nouvelle photo
picture.setImageBitmap(photo);
};
}.execute();
} catch (FileNotFoundException e) {
Log.d("PhotoActivity", "File not found: " + e.getMessage());
}
}
};
(4.1.2 안드로이드),에서 OutOfMemoryException으로
07-04 10:01:24.076: E/dalvikvm-heap(2980): Out of memory on a 7680016-byte allocation.
이상한 점은 작동한다는 것입니다 1600x1200 해상도의 삼성 Gio (android 2.2.1)에 완벽하게 탑재되었습니다.
내가 많이 봤 거든, 나는 그림을 다운 사이징의 주요 솔루션을 사용할 수 없습니다. 그것은 메모리 문제이지만, 어떻게 메모리 사용량을 줄일 수 있는지 모르겠습니다.
편집 : 나는이 발견, 그것은 진짜 문제라고 보인다는 UI에 proccessing 전에 비트 맵을 디코딩한다 https://stackoverflow.com/a/12377158/1343969
이 실제로 필요한 'copy()'호출입니까? 그건 그냥 메모리 발자국을 두 배로해야합니다 ... – WarrenFaith
어쩌면이 도움이 될 수 있습니다 : http://stackoverflow.com/a/15380872/876603 – dors
@WarrenFaith 네, firstBitmap 불변이므로, 그 위에 그릴 수 없습니다. – Oyashiro