2012-09-05 2 views
1

다음 코드를 통해 사진을 찍고 SD 카드에 저장하고 있지만 제작 한 사진은 품질이 매우 낮고 품질이 100 % 일지라도 거의 비티입니다.Android 저장된 이미지는 저품질입니다.

public class TakePhoto extends Activity { 

    ImageView iv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_take_photo); 


     iv = (ImageView) findViewById(R.id.imageView1); 

     Button b = (Button) findViewById(R.id.button1); 
     b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent, 0); 

      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 

     Bitmap bm = (Bitmap) data.getExtras().get("data"); 
     Random generator = new Random(); 
     String randFileName = String.valueOf (generator.nextInt(965) + 32); 
     String both = "/mnt/extSdCard/DirectEnquiries/"+ randFileName + ".jpg"; 
     File imageFile = new File(both); 

     writeBitmapToMemory(imageFile, bm); 
     iv.setImageBitmap(bm); 

    } 

    public void writeBitmapToMemory(File file, Bitmap bitmap) { 
     FileOutputStream fos; 

     try { 
      Log.e("Tom", "Starting take stream"); 
      fos = new FileOutputStream(file); 
      Log.e("Tom", "Got stream"); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
      Log.e("Tom", "Saved Image"); 
      fos.close(); 

     } 
     catch (FileNotFoundException e) { 
      e.printStackTrace(); 


     } 
     catch (IOException e) { 
      e.printStackTrace(); 


     } 

    } 

} 
+1

왜 단순한 파일 복사 작업을 사용하고 있습니까? – user370305

+0

자세히 설명해 주시겠습니까? – TMB87

+0

카메라가 이미 고화질로 이미지를 저장하고 있습니다. – user370305

답변

1

카메라에서 이미지를 캡처 아래 함수를 호출하십시오 올바른 갈 방법

Heres는 내 코드 (또는 비트 맵 모든!에서)하지 어쩌면 bitmap.compress.

private final static String FOLDER_NAME = "YourAppName/Image/"; 
private Uri selectedImageUri = null; 

public void startCamera() 
    { 
     File photo = null; 
     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
     { 
      photo = new File(android.os.Environment.getExternalStorageDirectory(), FOLDER_NAME+File.separator+timeStamp+".png"); 
     } 
     else 
     { 
      photo = new File(getCacheDir(), FOLDER_NAME+File.separator+timeStamp+".png"); 
     }  
     if (photo != null) 
     { 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
      selectedImageUri = Uri.fromFile(photo); 
      startActivityForResult(intent, CAPTURE_IMAGE_CALLBACK); 
     } 
    } 

이미지의 Uri를 selectedImageUri 변수로 가져올 수 있습니다. (이미지는 Sdcard에 저장 됨)

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     switch (requestCode) 
     { 
      case CAPTURE_IMAGE_CALLBACK: 

       break; 
      } 
    } 
+0

원래 그랬지만 여전히 같은 이슈가 있습니다 – TMB87

+0

@TomBeech 업데이트 된 답변을 확인하십시오. –

+0

감사합니다. 콜백이 필요하거나 0으로 설정할 수 있습니까? – TMB87

1

의도 된 품질로 설정을 시도 했습니까?

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);     
startActivityForResult(intent, 0); 
+0

MediaStore.EXTRA_VIDEO_QUALITY가 시도한 장치에서 작동하지 않습니다. Kitkat, 4.4.4 –

관련 문제