개발/Mobile

[Android] 안드로이드 카메라 촬영 후 bitmap 저장

hojak99 2017. 1. 19. 14:01

안드로이드 카메라를 구현하면서 촬영한 사진을 이미지로 저장시키기 위한 코드이다. 나중에 잊어버릴까봐 작성한 글이다.




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();
        }
    }


반응형