안드로이드2013. 2. 28. 11:49

글을 올린 블로거를 생각해서 광고 한번만 클릭해주시면 감사하겠습니다

preview에서는 바로 data를 가져올수 없어 YuvImage로 bitmap을 만든뒤에 저장 해야 된다

이전 글에 카메라 소스가 있어 거기에 적용하면 쉽게 할 수 있다.


PreviewCallback mPreview = new PreviewCallback() {

@Override

public void onPreviewFrame(byte[] data, Camera camera) {

// TODO Auto-generated method stub

Camera.Parameters params = camera.getParameters();

int w = params.getPreviewSize().width;

int h = params.getPreviewSize().height;


int format = params.getPreviewFormat();

YuvImage image = new YuvImage(data, format, w, h, null);


ByteArrayOutputStream out = new ByteArrayOutputStream();

Rect area = new Rect(0, 0, w, h);

image.compressToJpeg(area, 50, out);

Bitmap bm = BitmapFactory.decodeByteArray(out.toByteArray(), 0, out.size());

 

 

Calendar calendar = Calendar.getInstance();

  String FileName = String.format("SH%02d%02d%02d-%02d%02d%02d.jpg"

  calendar.get(Calendar.YEAR) % 100, calendar.get(Calendar.MONTH)+1, 

  calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), 

  calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));

  String path = mRootPath + "/" + FileName;

 

  SaveBitmapToFileCache(bm, path);

 

  Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

  Uri uri = Uri.parse("file://" + path);

  intent.setData(uri);

  sendBroadcast(intent);


  Toast.makeText(getApplicationContext(), "사진이 저장 되었습니다", 0).show();

  camera.startPreview();

}

};

private void SaveBitmapToFileCache(Bitmap bitmap, String strFilePath) {

File fileCacheItem = new File(strFilePath);

OutputStream out = null;

try {

fileCacheItem.createNewFile();

out = new FileOutputStream(fileCacheItem);

 

bitmap.compress(CompressFormat.JPEG, 100, out);

catch (Exception e) {

e.printStackTrace();

} finally {

try {

out.close();

}

catch (IOException e)

{

e.printStackTrace();

}

}

}


출처 : http://stackoverflow.com/questions/7794307/getting-image-from-surfaceview-to-imageview


Posted by 퍼플카우D