【发布时间】:2016-05-07 19:51:19
【问题描述】:
假设我从一个 1000px x 1000px 的位图开始
我将其加载到SurfaceView 常驻Canvas 中,该Canvas 以任意尺寸(并且取决于设备不同)显示。
我可以在运行时获取这些尺寸并测量它们与原始尺寸之间的比例(如果我最后需要该信息)。
然后我允许用户在显示的画布周围捏合/缩放/翻译图像。一直以来,我都有一个 Matrix 来跟踪并用于在其显示的屏幕区域中重新绘制图像。
随后,此Matrix 的值都适用于缩放后的空间(而不是原始的 1000x1000 图形)。
到目前为止一切顺利 - 我已经完成了所有这些工作。
但是,当一切都说完了,我想将此矩阵应用于原始位图并将其保存出来。但是,我不知道如何修改其所有内部值以将其应用回未缩放的原始 (1000x1000) 大小。
很好奇是否有某种自动神奇的方式来翻译这些,或者我是否必须以某种方式根据两种尺寸之间的比例将每个值应用回一个新的矩阵。
【问题讨论】:
-
与您的问题正交,但可能有用:android-developers.blogspot.com/2013/09/…
-
我假设你正在使用
Canvas#drawBitmap(Bitmap, Matrix, Paint)在你的SurfaceView上绘图,然后在临时Bitmap上绘图时使用相同的方法,然后将其保存 -
@pskink,我是,但你看 - 这将导致所有值都是错误的!假设用户将图像向右移动了 50 像素(在屏幕上)——这在最终的艺术作品中转化为 X 轴上一些不同数量的正向运动,因为 50 个屏幕像素是一定比例的(更大或更小) 比实际的位图。因此我需要将整个矩阵重新翻译回原始尺寸(保留缩放的用户产生的更改)
-
我不知道你的意思,你想获取屏幕图像并将其转换回原始图像(在这种情况下你应用逆矩阵)还是你想获取原始图像并应用转换,使其看起来像屏幕图像但在不同的目的地?然后只需使用相同的矩阵
-
尝试
Matrix#mapRect看看你的 1000x1000 矩形将被映射到哪里,然后你可以使用left和top字段重新翻译
标签: android matrix bitmap android-canvas