Android:在图像视图上设置时如何检测从图库中选取的图像方向(纵向或横向)?

2023-11-27

我正在从图库(相机相册)中选取的图像视图上设置图像。如果选取的图像具有横向方向,则它会完美显示,但如果图像处于纵向模式(即在纵向模式下单击图像),则会显示旋转 90 度的图像。现在我试图找出在图像视图上设置之前的方向,但所有图像都给出相同的方向和相同的宽度高度。这是我的代码:

Uri selectedImage = intent.getData();
if (selectedImage != null) {
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);

    int str = new ExifInterface(selectedImage.getPath()).getAttributeInt("Orientation", 1000);
    Toast.makeText(this, "value:" + str, Toast.LENGTH_LONG).show();
    Toast.makeText(this, "width:" + bitmap.getWidth() + "height:" + bitmap.getHeight(), Toast.LENGTH_LONG).show();

portrait mode landscape mode


Use ExifInterface用于旋转图像。使用此方法可以获得正确的值以旋转从相机捕获的图像。

public int getCameraPhotoOrientation(Context context, Uri imageUri, String imagePath){
    int rotate = 0;
    try {
        context.getContentResolver().notifyChange(imageUri, null);
        File imageFile = new File(imagePath);

        ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath());
        int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

        switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_270:
            rotate = 270;
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            rotate = 180;
            break;
        case ExifInterface.ORIENTATION_ROTATE_90:
            rotate = 90;
            break;
        }

        Log.i("RotateImage", "Exif orientation: " + orientation);
        Log.i("RotateImage", "Rotate value: " + rotate);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return rotate;
}

并将此代码放入 Activity 结果方法中并获取旋转图像的值...

String selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};

Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
cursor.close();

int rotateImage = getCameraPhotoOrientation(MyActivity.this, selectedImage, filePath);

希望这可以帮助..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:在图像视图上设置时如何检测从图库中选取的图像方向(纵向或横向)? 的相关文章

随机推荐

  • 如何将 ko.validation 错误与相关视图模型字段名称联系在一起

    我正在使用 Knockout Validation 我希望能够显示错误摘要 其中每行显示错误消息 显然 以及与其相关的视图模型上的字段名称 例如 年龄 请输入数字 出生日期 请输入正确的日期 到目前为止 我已经有了一个 validObser
  • Java中的前后自增

    我只是想创建一个小小的 Java Puzzle 但我自己也感到困惑 谜题的一部分是 下面这段代码的作用是什么 public class test public static void main String args int i 1 i i
  • try、catch 和finally 的确切执行顺序是什么?

    在这段java代码中 import java io IOException public class Copy public static void main String args if args length 2 System err
  • 无法使用 SQL Server 管理控制台连接到远程 SQL 数据库(错误 53)

    我已在防火墙上打开端口 1433 但每次尝试使用 SQL Server 管理控制台连接到远程 SQL 数据库时 我都会收到 Microsoft SQL Server 错误 53 https social technet microsoft
  • 如何在应用程序开始运行代码之前运行迁移?

    我在 swift 应用程序中使用realm io 自从我有一个正在生产的应用程序以来 这是我第一次必须运行迁移 我更改了其中一个模型并为其添加了几个额外的字段 我按照文档中的示例进行操作 然后在不起作用时引用了 github 存储库的示例
  • 为什么gcc不能内联可以确定的函数指针?

    以下程序在 centos 上的 gcc 4 6 2 下使用 O3 编译 include
  • 向多个接口注册相同类型

    可以将一种类型注册到多个接口吗 我有实现两个接口的类 MyService IService1 IServier2 我想为两个接口注册这个类型 container RegisterType
  • 插件产品 VS 功能产品

    在 RCP 应用程序的上下文中 我想知道我的产品是否应该基于插件或功能 我现在看到的主要区别在于导出的应用程序的内容 使用插件作为产品基础会导致导出 使用 GUI 或无头构建 这是相同的 所有必需的插件 我猜是通过插件清单计算的 相反 当使
  • 我可以使用在初始值设定项列表中初始化的 C++ 类成员(稍后在列表中)吗?

    我正在重写一些代码以消除全局变量 并使类构造函数 析构函数处理一些第三方库资源的清理 但我担心一些从类初始值设定项列表中的另一个成员初始化一个成员的代码 class MyPodofoDocument public generates pdf
  • 在 JavaScript 回调函数中设置局部变量

    我对 JavaScript 比较陌生 我以为我知道回调函数是如何工作的 但在网上搜索了几个小时后 我仍然不明白为什么我的代码不起作用 我正在发出一个返回字符串数组的 AJAX 请求 我试图将此数组设置为局部变量 但一旦执行回调函数 它似乎就
  • 确定 Firebird SQL 版本的方法?

    有什么方法可以确定 Firebird SQL 正在运行的版本吗 使用 SQL 或代码 delphi C Bye 如果你想通过 SQL 找到它 你可以使用获取上下文要查找引擎版本 请使用以下命令 SELECT rdb get context
  • C++ 抽象类析构函数[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 在父类中仅使用纯虚拟析构函数创建抽象类是否是一种好的做法 是否可能 这是一个示例 class AbstractBase public AbstractBase virtual Abst
  • 列出带全键的 Rails I18n 字符串

    我希望能够生成区域设置的所有 I18n 键和值的完整列表 包括完整的键 换句话说 如果我有这些文件 config locales en yml en greeting polite Good evening informal What s
  • Prettier 代码格式不会在 JSX 或 HTML 中拆分 classNames

    我启用了 Prettier VSCode 扩展 并且我的本地 prettierrc 文件已 printWidth 70然而 作为选项之一 当我的 JSX 或纯 HTML 文件中有一长串类名时 Prettier 不遵循printWidth设置
  • 如何在 Yup 异步验证中设置动态错误消息?

    我正在使用 Yup 在 Formik 中尝试异步验证 test 方法并需要设置我从 API 获得的错误消息 根据后端的某些情况 错误消息会有所不同 尝试了这里提到的一些解决方案 https github com jquense yup is
  • 新 Android Studio 中的 APK 位置

    我开始使用新的 Android Studio 但在 IDE 中找不到应用程序的 APK 它实际位于哪里 为了帮助可能寻找同一问题答案的人 了解您在 Studio 中使用的项目类型非常重要 Gradle 新建项目时默认的项目类型 一般推荐使用
  • 使用 AngularJS 路由持久化查询字符串

    我已经在一个大型 Angular 应用程序上工作了近一年了 但我一直在尝试做我期望的微不足道的事情 这是我使用参数的两条路线 为了简洁而缩短 a id a id b 假设用户位于 a 1并修改查询字符串 例如 a 1 foo 123 bar
  • 如何使用 Java 8 流迭代引用父元素的嵌套 for 循环?

    我想使用 java8 迭代嵌套列表streams 并提取第一个匹配的列表的一些结果 不幸的是 如果子元素与过滤器匹配 我还必须从父内容中获取值 我怎么能这样做呢 java7 Result result new Result find fir
  • 在不存在的地方插入-无主键

    我有 3 个表 dentists groups 和 groupdentlink 许多牙医通过 groupdentlink 表链接到许多组 因此 我尝试进行一个查询 将行插入到 groupdentlink 将该州的所有牙医与该州的所有组链接起
  • Android:在图像视图上设置时如何检测从图库中选取的图像方向(纵向或横向)?

    我正在从图库 相机相册 中选取的图像视图上设置图像 如果选取的图像具有横向方向 则它会完美显示 但如果图像处于纵向模式 即在纵向模式下单击图像 则会显示旋转 90 度的图像 现在我试图找出在图像视图上设置之前的方向 但所有图像都给出相同的方