读书人

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

发布时间: 2012-09-23 10:28:10 作者: rapoo

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

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

?

?

读书人网 >移动开发

热点推荐