지금 현재 이 소스에서 저장이 안되요 ㅠㅠ 저장경로 설정하는법과 앨범에서 호출되는 것좀 가르쳐주세요
// 사진 촬영
Button.OnClickListener mTakeClick = new Button.OnClickListener() {
public void onClick(View v) {
mSurface.mCamera.autoFocus(mAutoFocus);
}
};
// 포커싱 성공하면 촬영
AutoFocusCallback mAutoFocus = new AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
if (success) {
mTakePicture.postDelayed(new Runnable() {
public void run() {
mSurface.mCamera.takePicture(null, null, mPicture);
}
}, TAKEDELAY);
} else {
Toast.makeText(mMainContext, "초점을 잡을 수 없습니다.", 1).show();
}
}
};
protected File toFile;
// 사진 저장. 날짜와 시간으로 파일명 결정하고 저장후 미디어 스캔 실행
PictureCallback mPicture = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
try{
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
String outUriStr = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "SHcamera Image", "SHcamera Image using Camera.");
if(outUriStr == null) {
Log.d("test23","Image insert failed.");
return;
} else {
Uri outUri = Uri.parse(outUriStr);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE));
}
camera.startPreview();
} catch (Exception e){
Log.e("test23","Failed to insert image.",e);
}
}
};
// 크기 변경
Button.OnClickListener mSizeClick = new Button.OnClickListener() {
public void onClick(View v) {
Parameters params = mSurface.mCamera.getParameters();
final List<Size> arSize = params.getSupportedPictureSizes();
String[] arName = new String[arSize.size()];
for (int i = 0; i < arSize.size(); i++) {
Size s = arSize.get(i);
arName[i] = String.format("%d * %d", s.width, s.height);
if (mPicWidth == s.width && mPicHeight == s.height) {
mSelect = i;
}
}
new AlertDialog.Builder(mMainContext)
.setTitle("사진 해상도 선택")
.setSingleChoiceItems(arName, mSelect, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mSelect = which;
}
})
.setPositiveButton("확인", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Parameters params = mSurface.mCamera.getParameters();
int width = arSize.get(mSelect).width;
int height = arSize.get(mSelect).height;
params.setPictureSize(width, height);
mSurface.mCamera.setParameters(params);
SharedPreferences pref = getSharedPreferences("SHCamera",0);
SharedPreferences.Editor edit = pref.edit();
edit.putInt("PicWidth", width);
edit.putInt("PicHeight", height);
edit.commit();
}
})
.setNegativeButton("취소", null)
.show();
}
};
// 사진 확인
Button.OnClickListener mReviewClick = new Button.OnClickListener() {
public void onClick(View v) {
if (mLastPicture.length() != 0) {
mReview.setVisibility(View.VISIBLE);
mTakePicture.setVisibility(View.GONE);
try {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inSampleSize = 2;
Bitmap bm = BitmapFactory.decodeFile(mLastPicture, opt);
mReview.setImageBitmap(bm);
}
catch (OutOfMemoryError e) {
Toast.makeText(mMainContext,"이미지를 읽을 수 없습니다", 0).show();
}
mReview.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
mReview.setVisibility(View.GONE);
mTakePicture.setVisibility(View.VISIBLE);
return false;
}
});
} else {
Toast.makeText(mMainContext,"아직 찍은 사진이 없습니다.",
Toast.LENGTH_SHORT).show();
}
}
};
// 매크로 모드 토글
CompoundButton.OnCheckedChangeListener toggleMacro = new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) {
if (buttonView.getId() == R.id.btnmacro) {
if (isChecked) {
Parameters params = mSurface.mCamera.getParameters();
params.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
mSurface.mCamera.setParameters(params);
} else {
Parameters params = mSurface.mCamera.getParameters();
params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mSurface.mCamera.setParameters(params);
}
}
}
};
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0,1,0,"소개");
menu.add(0,2,0,"종료");
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
new AlertDialog.Builder(this)
.setTitle("프로그램 소개")
.setMessage("이 프로그램은 필수 기능만 제공하는 카메라입니다. 기존 카메라는 화면의 셔터 버튼을 " +
"놓을 때 장비의 떨림으로 인해 사진의 정확도가 떨어지나 이 프로그램은 터치를 놓은 후 초점을 " +
"맞추고 잠시 대기 후 사진을 찍어 선명도를 극대화합니다. 잘생긴 사람은 누구나 무료로 사용할 수 있습니다.")
.setPositiveButton("닫기", null)
.show();
return true;
case 2:
finish();
System.exit(0);
return true;
}
return false;
}
}