照相机捕获照片保存大小以及保存位置的问题

 
1.有时候拍照的图片比实际的要小
这可能和版本有管
不过在2.0上以上 可以没问题
在1.6一下即使你用hw.camera.maxHorizontalPixels 和 hw.camera.maxVerticalPixels. 
都会得到原大小的1/4
 
Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File out = new File(Environment.getExternalStorageDirectory(), "camera.jpg");
Uri uri = Uri.fromFile(out);
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);
上述没有问题
上面的存入制定目录。存入存放图片的地方
 
SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
           String filename = timeStampFormat.format(new Date());
           ContentValues values = new ContentValues();
       values.put(Media.TITLE, filename);
       values.put(Media.DESCRIPTION, "Image from Android Emulator");
       photoUri = 
getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
       
       Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
       inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
           startActivityForResult(inttPhoto, 0);
2 然后相关处理就是
private void saveFullImage() { 
  Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
  File file = new File(Environment.getExternalStorageDirectory(), "test.jpg"); 
  outputFileUri = Uri.fromFile(file); 
  intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
  startActivityForResult(intent, TAKE_PICTURE); 

 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
  if ((requestCode == TAKE_PICTURE) && (resultCode == Activity.RESULT_OK)) { 
    // Check if the result includes a thumbnail Bitmap 
    if (data == null) {     
      // TODO Do something with the full image stored 
      // in outputFileUri. Perhaps copying it to the app folder 
    } 
  } 


 
3. 一个可以兼容的处理方法:
 
public boolean hasImageCaptureBug() { 
 
    // list of known devices that have the bug 
    ArrayList<String> devices = new ArrayList<String>(); 
    devices.add("android-devphone1/dream_devphone/dream"); 
    devices.add("generic/sdk/generic"); 
    devices.add("vodafone/vfpioneer/sapphire"); 
    devices.add("tmobile/kila/dream"); 
    devices.add("verizon/voles/sholes"); 
    devices.add("google_ion/google_ion/sapphire"); 
 
    return devices.contains(android.os.Build.BRAND + "/" + android.os.Build.PRODUCT + "/" 
            + android.os.Build.DEVICE); 
 
}
 
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
if (hasImageCaptureBug()) { 
    i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("/sdcard/tmp"))); 
} else { 
    i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

startActivityForResult(i, mRequestCode); 



protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     switch (requestCode) { 
         case GlobalConstants.IMAGE_CAPTURE: 
                 Uri u; 
             if (hasImageCaptureBug()) { 
                 File fi = new File("/sdcard/tmp"); 
                 try { 
                     u = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), fi.getAbsolutePath(), null,null)); 
                     if (!fi.delete()) { 
                         Log.i(t, "Failed to delete " + fi); 
                     } 
                 } catch (FileNotFoundException e) { 
                     e.printStackTrace(); 
                 } 
             } else { = intent.getData(); 
                } 
    } 

                        u
第三种方法虽然可以解决版本问题
对存在bug的版本 得到的大小也只有512宽 版本正常的 可以得到想要大小
还有一个缺点 可能版本的bug被修正 那样你的bug函数就需要修改
posted @ 2010-06-22 16:11  looky  阅读(801)  评论(0编辑  收藏  举报