마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 카메라 저장,앨범호출

0 추천

지금 현재 이 소스에서 저장이 안되요 ㅠㅠ 저장경로 설정하는법과 앨범에서 호출되는 것좀 가르쳐주세요


 // 사진 촬영
 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;
 }
}



 

조성찬 (120 포인트) 님이 2013년 11월 16일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...