图像在旋转时会改变大小。我该如何阻止这个?

2023-12-07

我正在为 Android 制作游戏,我需要旋转图像。当我旋转它时,它的尺寸显然会发生变化。例如,当它旋转 45 度时(它是正方形,但我希望它适用于任何矩形,因此它是一个更通用的解决方案),它的宽度和高度变成对角线的长度,比原来的长。经过一些代数之后,您可以算出比例因子是 sqrt(2)。但我知道旋转位图的唯一方法是使用矩阵。前任:

matrix.postRotate(degrees);
rotated = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);

使用此方法,位图的大小保持不变,因此为了适应图像内容中的旋转图像,必须缩小。这导致了我的问题。

我现在所拥有的应该可以工作,但是运行时却不起作用。可能是因为它过于复杂,但仍然是:

     float totalRotated = 0;

public void rotate(float degrees){
    if(mBitmap != null){
        float increment = (float)((mBitmap.getWidth()/45.0)*(Math.sqrt(2)-1));
        totalRotated += degrees;
        totalRotated -= (float)((int)totalRotated/360)*360;
        matrix.reset();
        matrix.setRotate(totalRotated);
        rotated = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
        rotated = Bitmap.createScaledBitmap(rotated, (int)(mBitmap.getWidth()+(((Math.abs(Math.abs(((int)totalRotated%90)-45)-45)))*increment)), (int)(mBitmap.getHeight()+(((Math.abs(Math.abs(((int)totalRotated%90)-45)-45)))*increment)), true);
    }
}

使用Log.d函数我能够确定最后一个语句中设置的尺寸是我期望的尺寸,但图像的尺寸没有改变。由于这甚至不起作用,我需要一种更好的方法来做到这一点或一种方法来修复我的方法。另外我的方法只适用于正方形。那么,我该怎么做呢?

编辑: 我的方法确实有效,只是我没有调用setBounds()但这不是唯一的方法,效率很低。


目前尚不清楚您在寻找什么,因此这里有一个基于您的函数,它尝试计算新位图的正确宽度和高度,并通过仅创建一个位图来进行旋转。

float totalRotated = 0;

public void rotate(float degrees){
    if(mBitmap != null){
        // compute the absolute rotation
        totalRotated = (totalRotated + degrees) % 360;
        // precompute some trig functions
        double radians = Math.toRadians(totalRotated);
        double sin = Math.abs(Math.sin(radians));
        double cos = Math.abs(Math.cos(radians));
        // figure out total width and height of new bitmap
        int newWidth = mBitmap.getWidth() * cos + mBitmap.getHeight() * sin;
        int newHeight = mBitmap.getWidth() * sin + mBitmap.getHeight() * cos;
        // set up matrix
        matrix.reset();
        matrix.setRotate(totalRotated);
        // create new bitmap by rotating mBitmap
        rotated = Bitmap.createBitmap(mBitmap, 0, 0,
                                      newWidth, newHeight, matrix, true);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像在旋转时会改变大小。我该如何阻止这个? 的相关文章

  • 如何从我的班级访问活动 UI?

    我有一个活动创建我的类的对象实例 file MyActivity java public class MyActivity extends Activity TextView myView TextView findViewById R i
  • 仅使用 Context 而不是 Activity 实例显示对话框

    如果我使用 Activity 实例 我可以显示对话框 但当我使用上下文或应用程序上下文实例时 对话框不会显示 AlertDialog Builder builder new AlertDialog Builder activity buil
  • 围绕二维坐标系中的特定点缩放

    Below is an image my coordinate system 我想做的是 我想开始围绕画布中的特定点进行缩放 缩放工作正常 但我的问题是我不知道如何计算缩放时移动画布的量 请注意 我我没有使用canvas scale 我只是
  • 使用AndroidKeyStore身份验证的无限循环

    当我使用需要用户身份验证才能使用密钥的 AndroidKeyStore 时 我的应用程序进入无限循环 setUserAuthenticationRequired true setUserAuthenticationValidityDurat
  • Android:创建具有关系的 SQLite 数据库

    我正在尝试创建一个需要具有一对多关系的两个表 SQLite 数据库的应用程序 基本上 第一个表将允许用户创建一名员工 当他们点击该员工时 他们将进入第二个活动 该活动将允许用户为该员工添加多个电话号码 这些电话号码存储在第二个表中 我真的不
  • Android,如何限制TextView的宽度(并在文本末尾添加三个点)?

    我有一个TextView我想限制它的字符 实际上 我可以做到这一点 但我正在寻找的是如何在字符串末尾添加三个点 这表明文本已经继续 这是我的 XML 但没有点 尽管它限制了我的文本
  • 使用 Gradle 进行 Travis-CI Android 测试总是超时

    我正在尝试在 Travis CI 上构建和测试我的项目 它每次都会在我的所有存储库上向我显示相同的重复输出 这是我的 travis ymlhttps github com carts uiet cartsbusboarding blob m
  • 如何在默认浏览器或webview中打开按钮点击url

    我怎样才能打开一个网址webview或者点击按钮后在默认浏览器中 目前 当我单击btn1按钮 它提示我从手机中选择一个浏览器 我想在默认浏览器或其他浏览器中打开此网址webview 这是我的java代码 public class myact
  • 屏幕滚动时 GridView 内的项目会重复

    我使用 GridView 来显示一组用户可以选择的类别 网格的每个项目都由一个 ImageView 和一个 TextView 组成 两者都是从服务器检索的 当触摸一个项目时 另一个活动就会启动 我以为一切都很顺利 直到我注意到当我滚动屏幕时
  • 输入连接-如何删除选定的文本?

    我为 Android 制作了一个自定义键盘 当我按下键盘的退格按钮时 我使用 getCurrentInputConnection deleteSurroundingText 1 0 从输入字段中删除一个字母 但是 当我选择一些文本然后按退格
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • Kotlin Room 数据库单例模式

    我正在尝试创建单人房间数据库 我找到了两种解决方案 但我不知道它们之间有什么区别 根据这个文件 companion object Volatile private var INSTANCE AppDatabase null fun getI
  • Android 中的垂直和水平滚动视图

    我真的很累了寻找垂直和水平滚动视图的解决方案 我读到框架中没有任何视图 布局实现此功能 但我需要这样的东西 我需要在其他布局中定义一个布局 子布局必须实现垂直 水平滚动才能移动 最初实现了一个逐像素移动布局的代码 但我认为这不是正确的方法
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • eclipse - 在android虚拟设备中卡住中文

    当我在 Eclipse 中运行 Android 模拟器时 当我尝试编写文本时 所有键盘字符都会被翻译为中文 为什么是这样 Thanks 点击并按住EditText Select 输入法 Select 安卓键盘
  • 单击输入字段会触发窗口调整大小

    我有一个带有徽标 菜单和搜索的标题 当我在桌面上时 我会按该顺序显示所有元素 但如果我的窗口宽度小于 980 像素 菜单会隐藏 有一个切换按钮 并且徽标会与nav并附在徽标之后 如果宽度更大 则徽标将再次分离并附加到 DOM 中的旧位置 w
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • 如何在NavigationView的菜单项中设置椭圆形?

    我想在 NavigationView 的菜单项中设置 android ellipsize end 在我当前的实现中 当菜单项中的文本太长时 它只是在末尾被剪切 这是我到目前为止所尝试过的
  • 如何检测用户是否禁用 GPS(Android - Play 服务)

    我使用 gms location LocationListener Google Play 服务 来获取用户的位置 它工作正常 但我想检测用户何时禁用或启用他 她的 GPS 就像这张照片一样 当我打开 关闭位置时 不会调用任何方法 当我切换
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An

随机推荐

  • Java 垃圾收集如何与循环引用一起使用?

    根据我的理解 如果没有其他东西 指向 某个对象 Java 中的垃圾收集会清理一些对象 我的问题是 如果我们有这样的事情会发生什么 class Node public object value public Node next public
  • 从 Eclipse RCP 应用程序中删除“文件、编辑等”菜单

    我想从我的 RCP 应用程序中删除 文件 编辑 源 重构 等菜单 我可以用吗hideActionSet 或者我应该做什么 这是正确的 在你的应用程序工作台窗口顾问 覆盖发布窗口打开 棘手的一点通常是找出要删除的操作集的名称 但您可以使用旧的
  • 正则表达式空白字符会导致注入吗?

    如果我想验证a的输入
  • EF 5 AddOrUpdate 重复数据

    这是种子方法中的代码 var city new City Name A var nh new List
  • 选择日期后,显示错误的月份[重复]

    这个问题在这里已经有答案了 我正在使用日期选择器 但每当我选择任何日期时 它都会显示 1 个月 例如 如果我选择 12 12 2016 它将显示在文本框中 12 11 2016 如果我选择 3 1 2017 它将显示 3 0 2017 这是
  • 我无法在任何地方访问我的数组对象,如何快速访问它们?

    如何在另一个函数中访问我的数组对象 即来自 arr 和电子邮件的数组对象 到目前为止 当我调用 auth auth 函数时 我只能访问 else 语句内的数组对象 我想知道如何才能做到这一点 let store CNContactStore
  • HttpListener - 如何将 WebException HTTP 304“未修改”错误发送回浏览器?

    如果我使用 HttpListener 如何将 WebException 304 错误模拟回浏览器 也就是说 我收到了对 HttpListener 的请求 然后获得了 HttpListenerContext 那么从现在开始 我将如何模仿 安排
  • 与 JPA 的数据库独立字符串比较

    我正在使用 JPA Hibernate 作为提供者 和底层 MySQL 数据库 我有一张表 其中包含德国所有街道的名称 每个街道名称都有一个唯一的编号 对于一项任务 我必须找出姓名的编号 为此 我编写了一个 JPQL 查询 如下所示 SEL
  • 使用 R 绘图在 R 中绘制点图

    生成具有这样两个因素的点图的最佳方法是什么 最好使用标准 R 图 而不是 ggplot 并从 2x2 数据框生成 水平线应该是手段 我尝试过克利夫兰点图 但无法弄清楚如何获取两个数据系列并让点抖动 下面的代码应该可以解决这个问题 set s
  • 为 Firebase 云消息传递 PHP 生成 OAUTH 令牌

    我有一个 PHP 页面 我用它来向我开发的移动应用程序的用户发送通知 该页面直到上个月都工作正常 然后它给了我这个错误 multicast id 5174063503598899354 成功 0 失败 1 canonical ids 0 结
  • Kivy:已弃用功能的替代方案

    我正在尝试适应这个code但我仍然是第一步 因为我不理解大多数称为 like like 的功能可选数据项 Adapter 列表适配器 or 可选视图 当我在 kivy 网站上查找它们时 我发现它们被列为已弃用 我在 Kivy 网站上找不到这
  • 如何为每个商店对象提供自己的库存数组列表?

    发现这个很难 基本上我有三个类 Store 类 Stock 类 然后是 GUI 类 创建商店时 我希望它有自己的 arrayList 以便我可以向其中添加多个库存对象 通过 GUI 完成 我尝试只包含所需的基本代码 已删除 getter 方
  • 如何对元组数组进行排序?

    如何实现 或创建 元组列表的数组排序 以下内容是从我的代码中收集到的 本质上我创建了一个元组数组 并通过 for 循环填充它 之后我尝试对其进行排序 var myStringArray String Int nil myStringArra
  • 内置 python 函数的时间/空间复杂度

    split strip open 内置 python 函数 的时间 空间复杂度是多少 有谁知道我可以在哪里查找这些函数的时间 空间复杂度 确切的答案将取决于输入到函数中的属性 最简单的找出方法可能是检查这些函数的源代码 python 源代码
  • 如何使用 ffmpeg 在大型复杂过滤器上 concat 之前应用 1:1 SAR

    我使用 ffmpeg 以类似于以下的方式连接视频 我的输入遇到了一个奇怪的错误 Parsed concat 0 000000002a05bb80 Input link in10 v0 parameters size 1280x720 SAR
  • 如何在 Python 中使用 K-Means 聚类找到最佳聚类数

    我是聚类算法的新手 我有一个电影数据集 包含 200 多部电影和 100 多个用户 所有用户都至少评价了一部电影 值 1 表示好 0 表示坏 如果注释者别无选择 则值为空白 我想根据相似的用户的评论对他们进行聚类 这样的想法是 将相似电影评
  • 如何将客户端属性添加到 FirebaseListObservable 中的项目?

    我正在构建一个由 Firebase 数据库结构支持的简单聊天应用程序 messages KTjL oLrKOboa2su2zk name puf text Look I m smiling KTjNfaNem752ChFBcnC name
  • 如何动态更改log4j日志文件?

    我想要一个 log4j 配置 使得日志文件名应类似于 System name log log 也就是说 如果应用程序在任何系统上启动 则无需更改配置文件或代码 它应该生成如上所述的日志文件名 谢谢 我这样做 1 通过以下方式初始化记录器 S
  • 如何在页面加载时使用 ajax 将 php include 加载到页面中

    我有一个 php include 需要一段时间才能加载 因为 PHP 必须获取大量数据 我不想减慢整个网页加载等待此包含的速度 那么如何使用 ajax 加载此包含 我不希望通过单击按钮来触发ajax 我只是希望它在页面加载时加载包含内容 这
  • 图像在旋转时会改变大小。我该如何阻止这个?

    我正在为 Android 制作游戏 我需要旋转图像 当我旋转它时 它的尺寸显然会发生变化 例如 当它旋转 45 度时 它是正方形 但我希望它适用于任何矩形 因此它是一个更通用的解决方案 它的宽度和高度变成对角线的长度 比原来的长 经过一些代