안드로이드 카메라를 구현하면서 촬영한 사진을 이미지로 저장시키기 위한 코드이다. 나중에 잊어버릴까봐 작성한 글이다.
Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// 파일 저장
String sd = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
String path = sd + "/test/" + (int) System.currentTimeMillis() + ".png";
try {
//byte에서 bitmap으로 변화하는 과정
Bitmap saveImg = BitmapFactory.decodeByteArray(data, 0, data.length);
//이부분은 saveImg 변수에서 일정 부분을 짜르는 부분이다.
//우선 저장을 위한 코드이기 때문에 신경쓰지 않아도 된다.
ImageCutting imageCutting = new ImageCutting();
saveImg = imageCutting.imageCut(saveImg);
if(saveImg == null)
System.out.println("이미지 null");
if(takeCnt != 0) {
//자른 이미지를 합치는 코드인데 신경쓰지 않아도 된다.
finishBitmap = CombineImage(finishBitmap, saveImg, true);
}else{
finishBitmap = saveImg;
}
System.out.println("카운트 : "+takeCnt);
// 이 부분이 bitmap을 저장하는 if 문이다.
if(takeCnt == 19) {
File file = new File(path);
OutputStream out;
file.createNewFile();
out = new FileOutputStream(file);
finishBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.close();
System.out.println("성공");
}
takeCnt +=1;
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(),
"Picture Saved", Toast.LENGTH_LONG).show(); // 파일 저장되었다고 어플리케이션 상에서 출력
refreshCamera();
}
};
} catch (Exception e) {
finish(); // 오류 발생 시에 현재 화면 종료
Toast.makeText(getApplicationContext(), "오류가 발생했습니다!", Toast.LENGTH_SHORT).show();
}
}
반응형