Dat*_*shi 7 android crop android-intent
我很难弄清楚如何让用户裁剪图片.我想给位图变量加载位图以在将其设置为壁纸之前裁剪图片.但我没有这样做......这就是我尝试过的.
第一版.=按预期工作但返回的图像分辨率较差.将输出更改为更高的值无济于事.正如我在一些帖子中看到的那样,不建议使用相机,因为并非所有设备都支持此功能.
Intent intent = new Intent("com.android.camera.action.CROP");
String path = Images.Media.insertImage(context.getContentResolver(), loaded,null, null);
Uri uri = Uri.parse(path);
intent.setData(uri);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 300);
intent.putExtra("outputY", 300);
intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, 2);
Run Code Online (Sandbox Code Playgroud)
第二.加载图像选择器,然后裁剪.如何将其配置为直接在我的图像上加载裁剪?就像在版本1中一样
Intent photoPickerIntent = new Intent(MediaStore.ACTION_PICK);
photoPickerIntent.setData(uri);
photoPickerIntent.putExtra("crop", "true");
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(photoPickerIntent, 2);
Run Code Online (Sandbox Code Playgroud)
并且onActivity结果
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) { return; }
if(requestCode == 2) {
Bundle extras = data.getExtras();
if(extras != null ) {
Bitmap photo = extras.getParcelable("data");
loaded = photo;
}
WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext());
try {
myWallpaperManager.setBitmap(loaded);
} catch (IOException e) {}
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道这些是完成这项工作的正确方法,但我希望有人能指出我正确的方向.哪个,为什么以及如何使用.
更新:我还在等待有人指出如何正确地做到这一点,下面的答案正在工作,但返回的图像分辨率很低,因此它们不是一个可供选择的选项
Thr*_*bad -2
我在使用相机时也遇到了问题,ACTION_PICK尽管传递的分辨率要大得多,但返回的图像非常小。我解决了这个问题,将生成的裁剪图像存储在临时文件中
// temporary storage location, preferably in your cache directory
private final String tempFilePath = "somePath";
// URI instantiated with your temporary storage location
private Uri tempuri = Uri.fromFile(new File(tempFilePath));
// code for startActivityForResult
private final static int ACTIVITY_CROP_IMAGE = 1;
Run Code Online (Sandbox Code Playgroud)
并像这样调用意图
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
photoPickerIntent.putExtra("crop", "true");
photoPickerIntent.putExtra("aspectX", wallpaperWidth);
photoPickerIntent.putExtra("aspectY", wallpaperHeight);
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempuri);
photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(photoPickerIntent, ACTIVITY_CROP_IMAGE);
Run Code Online (Sandbox Code Playgroud)
然后在onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode != RESULT_OK)
return;
if(requestCode == ACTIVITY_CROP_IMAGE)
{
try
{
Bitmap bmp = BitmapFactory.decodeFile(tempFilePath);
if(bmp != null)
{
WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext());
myWallpaperManager.setBitmap(bmp);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if(tempFilePath != null)
{
File tempFile = new File(tempFilePath);
if(tempFile.exists())
{
tempFile.delete();
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我从头开始构建了上面的代码,但实际上并没有编译任何代码。但基础知识是正确的,你应该掌握窍门;-)
| 归档时间: |
|
| 查看次数: |
10942 次 |
| 最近记录: |