如何设置输出图像使用com.android.camera.action.CROP [英] how to set the output image use com.android.camera.action.CROP
问题描述
我有code裁剪图像,像这样的:
I have code to crop an image, like this :
public void doCrop(){
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/");
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,0);
int size = list.size();
if (size == 0 ){
Toast.makeText(this, "Cant find crop app").show();
return;
} else{
intent.setData(selectImageUri);
intent.putExtra("outputX", 300);
intent.putExtra("outputY", 300);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
if (size == 1) {
Intent i = new Intent(intent);
ResolveInfo res = list.get(0);
i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
startActivityForResult(i, CROP_RESULT);
}
}
}
public void onActivityResult (int requestCode, int resultCode, Intent dara){
if (resultCode == RESULT_OK){
if (requestCode == CROP_RESULT){
Bundle extras = data.getExtras();
if (extras != null){
bmp = extras.getParcelable("data");
}
File f = new File(selectImageUri.getPath());
if (f.exists()) f.delete();
Intent inten3 = new Intent(this, tabActivity.class);
startActivity(inten3);
}
}
}
这是我看过的code intent.putExtra(outputX,300); intent.putExtra(outputY,300);
是用来设置作物结果的分辨率,但为什么我不能得到结果的图像分辨率海格比300×300?当我设置了 intent.putExtra(outputX,800); intent.putExtra(outputY,800);
作物函数没有结果,或崩溃,任何想法,对于这种情况
from what i have read, the code intent.putExtra("outputX", 300); intent.putExtra("outputY", 300);
is use to set the resolution of crop result, but why i can't get the result image resolution higer than 300x300? when I set the intent.putExtra("outputX", 800); intent.putExtra("outputY", 800);
the crop function has no result or crash, any idea for this situation?
日志猫说!!!失败粘结剂交易!!!
the log cat say "! ! ! FAILED BINDER TRANSACTION ! ! !
推荐答案
这意图是不公开的Android API的一部分,并不能保证在所有的设备上。它被用来在早期版本的Android 1.x和2.x的,但它已不再使用,因此不推荐。这也许就是为什么它的崩溃各地订货量大或工作不正常。
That Intent is not part of the public Android API and is not guaranteed to work on all devices. It was used in earlier versions of android 1.x and 2.x but it's not used anymore and is not recommended. That is probably why it's crashing all over the palce or working improperly.
使用方法,如 Bitmap.createBitmap(..)
或 Bitmap.createScaledBitmap(..)
以创建调整大小或裁剪版本的原始图像。这些都是Android的API的一部分,并保证正常工作。
Use methods such as Bitmap.createBitmap(..)
or Bitmap.createScaledBitmap(..)
to create a resized or cropped version of your original image. These are part of the Android API and are guaranteed to work.
请参阅官方文档<一href="http://developer.android.com/reference/android/graphics/Bitmap.html#createBitmap%28int,%20int,%20android.graphics.Bitmap.Config%29">here和<一href="http://developer.android.com/reference/android/graphics/Bitmap.html#createScaledBitmap%28android.graphics.Bitmap,%20int,%20int,%20boolean%29">here
要裁剪位图,你可以使用 Bitmap.createBitmap(位图,诠释的x,INT Y,INT宽度,高度INT)
。例如,如果你需要从位图的每个边裁剪10像素,然后用这个:
To crop a bitmap, you can use Bitmap.createBitmap(Bitmap, int x, int y, int width, int height)
. For example, if you need to crop 10 pixels from each side of a bitmap then use this:
Bitmap croppedBitmap = Bitmap.createBitmap(originalBitmap, 10, 10, originalBitmap.getWidth() - 20, originalBitmap.getHeight() - 20);
如果您需要显示的选择给用户。然后,你可以做这样的事情:
If you need to show the selector to the user. Then you can do something like this:
private static final String TEMP_PHOTO_FILE = "temporary_holder.jpg";
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
photoPickerIntent.putExtra("crop", "true");
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(photoPickerIntent, REQ_CODE_PICK_IMAGE);
private Uri getTempUri() {
return Uri.fromFile(getTempFile());
}
private File getTempFile() {
if (isSDCARDMounted()) {
File f = new File(Environment.getExternalStorageDirectory(),TEMP_PHOTO_FILE);
try {
f.createNewFile();
} catch (IOException e) {
}
return f;
} else {
return null;
}
}
private boolean isSDCARDMounted(){
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED))
return true;
return false;
}
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch (requestCode) {
case REQ_CODE_PICK_IMAGE:
if (resultCode == RESULT_OK) {
if (imageReturnedIntent!=null){
File tempFile = getTempFile();
String filePath= Environment.getExternalStorageDirectory()
+ "/temporary_holder.jpg";
System.out.println("path "+filePath);
Bitmap selectedImage = BitmapFactory.decodeFile(filePath);
_image = (ImageView) findViewById(R.id.image);
_image.setImageBitmap(selectedImage );
}
}
}
从
code <一个href="http://stackoverflow.com/questions/2085003/how-to-select-and-crop-an-image-in-android">here
这篇关于如何设置输出图像使用com.android.camera.action.CROP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!