天天看點

照相機捕獲照片儲存大小以及儲存位置的問題

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函數就需要修改