// 절대경로 표시하기위한 것. private String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
private String mFileimageRoute = Environment.getExternalStorageDirectory().getAbsolutePath();
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1 = (Button) findViewById(R.id.shot_picture);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "사진첩을 엽니다", 0).show();
Intent mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://media/internal/images/media"));
startActivity(mIntent);
}
});
mPreview = (Preview) findViewById(R.id.camera_preview);
mImageData = new byte[6][];
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (mPreview.mCamera != null) {
mPreview.mCamera.takePicture(mShutterCallback, mPictureCallbackRaw,
mPictureCallbackJpeg);
}
}
return false;
}
@Override
protected void onDestroy() {
if (mPreview != null) {
Log.e("onDestroy", "onDestroy...");
if (mPreview.mCamera != null) {
mPreview.mCamera.stopPreview();
mPreview.mCamera.release();
mPreview.mCamera = null;
}
}
super.onDestroy();
}
private int getPreFileName() {
if (sPrefs == null) {
sPrefs = getSharedPreferences(KEY_POPUP_ENV, Context.MODE_PRIVATE);
}
mFileNameYear = sPrefs.getInt(SAVE_FILE_YEAR, 0);
mFileNameMonth = sPrefs.getInt(SAVE_FILE_MONTH, 0);
mFileNameDay = sPrefs.getInt(SAVE_FILE_DATE, 0);
mFileNameCount = sPrefs.getInt(SAVE_FILE_COUNT, 0);
return mFileNameCount;
}
private String getRealFileName() {
MakeFileName_Demo();
return mFilename;
}
private void MakeFileName_Demo() {
DecimalFormat decimalFormat = new DecimalFormat("00");
DecimalFormat NumFormat = new DecimalFormat("0000");
Calendar rightNow = Calendar.getInstance();
int year = rightNow.get(Calendar.YEAR) % 100;
int month = rightNow.get(Calendar.MONTH);
int date = rightNow.get(Calendar.DATE);
int num = getPreFileName();
String result =decimalFormat.format(month) + decimalFormat.format(date);
String FormatNum = NumFormat.format(num);
mFilename = result + "_" + FormatNum;
File[] files = new File("content://media/internal/images/media").listFiles();
if (files.length == 0) {
num++;
} else if (files.length > 0) {
if (CompareDate(year, month, date) == true) {
num++;
} else if (CompareDate(year, month, date) == false) {
num = 0;
}
}
SaveFileName(year, month, date, num);// xml에 저장
}
private boolean CompareDate(int year, int month, int date) {
boolean ret = false;
if (year == getFileNameYear()) {
if (month == getFileNameMonth()) {
if (date == getFileNameDay()) {
ret = true;
}
}
}
return ret;
}
private int getFileNameYear() {
return mFileNameYear;
}
private int getFileNameMonth() {
return mFileNameMonth;
}
private int getFileNameDay() {
return mFileNameDay;
}
private void SaveFileName(int year, int month, int date, int num) {
// XML에 저장 putInt...
SharedPreferences.Editor editor = sPrefs.edit();
// putInt(값을 받을 환경변수 , 값을 얻어오는 인자값)
editor.putInt(SAVE_FILE_YEAR, year);
editor.putInt(SAVE_FILE_MONTH, month);
editor.putInt(SAVE_FILE_DATE, date);
editor.putInt(SAVE_FILE_COUNT, num);
editor.commit();// 저장할땐 반드시 commit()을 시킨다.
}
public int SaveImage() {
int ret = 0;
try {
FileOutputStream fileoutstream = new FileOutputStream(mFileimageRoute+getRealFileName()+".jpg");
fileoutstream.write(mImageData[0]);
fileoutstream.close();
System.gc();
}
catch (FileNotFoundException fne)
{
Log.e("writing and scanning image ", fne.toString());
fne.printStackTrace();
ret = -1;
}
catch (IOException ioe)
{
Log.e("writing and scanning image ", ioe.toString());
ioe.printStackTrace();
ret = -1;
} catch (Exception e)
{
ret = -1;
}
return ret;
}
Camera.PictureCallback mPictureCallbackRaw = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera c) {
Log.e("mPictureCallbackRaw ", "11111");
}
};
Camera.PictureCallback mPictureCallbackJpeg = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera c) {
Log.e("PictureCallback ", "11111");
Log.e("PictureCallback ", "22222");
mImageData[0] = data;
Display defaultDisplay = ((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay();
int width = defaultDisplay.getWidth();
int height = defaultDisplay.getHeight();
Log.e(String.valueOf(width), String.valueOf(height));
Log.e(String.valueOf(width), String.valueOf(height));
Log.e(String.valueOf(width), String.valueOf(height));
ShowSaveDailog();
}
};
Camera.ShutterCallback mShutterCallback = new Camera.ShutterCallback() {
public void onShutter() {
Log.i(getClass().getSimpleName(), "SHUTTER CALLBACK");
}
};
Camera.AutoFocusCallback cb = new Camera.AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera c) {
Log.e("AutoFocusCallback ", "11111");
if (success) {
ToneGenerator tg = new ToneGenerator(
AudioManager.STREAM_SYSTEM, 100);
if (tg != null)
tg.startTone(ToneGenerator.TONE_PROP_BEEP2);
gFocussed = true;
try {
if (gCameraPressed) {
if (mPreview.mCamera != null) {
mPreview.mCamera.takePicture(mShutterCallback,
mPictureCallbackRaw, mPictureCallbackJpeg);
}
}
} catch (Exception e) {
Log.i("Exc", e.toString());
}
} else {
ToneGenerator tg = new ToneGenerator(
AudioManager.STREAM_SYSTEM, 100);
if (tg != null)
tg.startTone(ToneGenerator.TONE_PROP_BEEP2);
try {
if (gCameraPressed) {
if (mPreview.mCamera != null) {
mPreview.mCamera.takePicture(mShutterCallback,
mPictureCallbackRaw, mPictureCallbackJpeg);
}
}
} catch (Exception e) {
Log.i("Exc", e.toString());
}
}
}
};
private void ShowSaveDailog() {
Toast.makeText(this, "save image", Toast.LENGTH_SHORT).show();
SaveImage();
mImageData[0] = null;
if (mPreview.mCamera != null) {
// mPreview.mCamera.lock();
try{
mPreview.mCamera.startPreview();
}
catch (Exception e) {
}
}
}
}
이런식으로 작성되어있는 기본 카메라 어플 코드입니다.
안드로이드 어플 개발공부를 막 시작한 사람이라서 세세히 설명 부탁드립니다 ㅠㅠ
테스트 기반은 맥용 이클립스 주노, AVD는 4.0.3 젤리빈으로 하고있습니다.
사진은 찍는것까지는 되는데 저장이 안되네요. 절대주소값이 잘못된것인지. 뭔가 코딩주소가 잘못된거같은데
뭐가 문제인지를 잘 모르겠네요 ㅠㅠ
그리고 색상을 반전시켜서 하고싶은데 어떤 코드가 들어가야 되는지 모르겠네요 찾아봐도 잘 안나오고요ㅠ
오토포커스 기능을 켰는데 이게 제대로 작동이되는것인지 아닌지 알수가 없어서 문제입니다.
안드로이드폰이 있어야 테스트 가능한건가요?
두서없이 질문드려 죄송합니다 ㅠㅠ