如何在裁剪意图期间旋转图像

Posted

技术标签:

【中文标题】如何在裁剪意图期间旋转图像【英文标题】:How to rotate image during crop intent 【发布时间】:2014-04-18 10:34:00 【问题描述】:

这里有一些关于这个的旧帖子,但事情似乎已经改变了。昨天我得到了a straightforward way to crop an image using an intent 的答复。问题的第二部分是向预览添加旋转功能。有谁知道我可以如何添加此功能?如果它相当复杂,有人知道那里的例子吗?

【问题讨论】:

裁剪意图不公开,在某些设备上可能会丢失。幸运的是,您可以使用实现它的the library。它的代码本质上是从 AOSP 复制的,没有处理旋转的逻辑。因此,您必须在裁剪图像之前或之后自己编排图像。最大的区别是旋转不一定是交互式的,而裁剪肯定是交互式的。 【参考方案1】:

我遇到了同样的问题并使用了这个变通方法。调用裁剪的 Intent 使用 URI,而大多数旋转解决方案使用 Bitmap。所以我所做的是:

    从 URI 中检索位图

    Bitmap bmCameraCapture = BitmapFactory.decodeFile(Uri.fromFile(photo).getPath());

    其中 photo 是你在触发相机 Intent 时定义的新文件。

    旋转位图

    获取旋转位图的URI,我使用了here的代码
public Uri getImageUri(Context inContext, Bitmap inImage) 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title",null);
    return Uri.parse(path);

4 .根据这个新的 URI 触发裁剪意图

我假设您缺少第 1 步和第 3 步,并且知道如何执行其他两个步骤。

【讨论】:

【参考方案2】:

试试这个实现轮换

Bitmap bMap = BitmapFactory.decodeResource(getResources(),R.drawable.test);
Matrix mat = new Matrix();
mat.postRotate(90);
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,
bMap.getWidth(), bMap.getHeight(), mat, true);
BitmapDrawable bmd = new BitmapDrawable(bMapRotate);
image.setImageBitmap(bMapRotate);
image.setImageDrawable(bmd);

希望对你有帮助

【讨论】:

感谢您的回复,但问题不在于如何旋转图像。问题是:如何向预览添加旋转功能,以便用户可以像用户裁剪图像一样旋转图像。如果您查看链接,您将看到裁剪是如何完成的:通过意图。

以上是关于如何在裁剪意图期间旋转图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 相机上使用意图添加功能裁剪图像?

如何使用默认裁剪意图裁剪 android marshmallow 中的图像?

如何裁剪带有旋转矩形的图像?

在opencv中裁剪旋转图像

如何从文件中旋转和裁剪 iOS CGImage

我想裁剪图像并输入在图像中查看。如何使用这种类型的裁剪从相机裁剪图像?