【问题标题】:How to keep canvas position of saved image no matter the device resolution in Android?无论Android中的设备分辨率如何,如何保持保存图像的画布位置?
【发布时间】:2016-09-22 01:11:35
【问题描述】:

在用户编辑图像后,我将三个图像视图保存到一个位图中。问题是一旦保存了最终结果,最终保存的图像在不同的屏幕分辨率上看起来并不总是一样的。

在我的手机(华硕 Padfone X)上,保存的图像完美显示。在我的合作伙伴手机 Note 6 上,保存的图像在生成的位图上的定位是关闭的。 (见下例)

我正在使用以下代码将图像视图保存到单个图像:

Bitmap mainBmp = backImage.getDrawingCache();
Bitmap centerBmp = centerImage.getDrawingCache();
Bitmap handleBmp = handleImage.getDrawingCache();

Canvas canvas = new Canvas(mainBmp);
canvas.drawBitmap(centerBmp, 17, 95, null);
canvas.drawBitmap(handleBmp, 17, 85, null);

这可以在我的手机上正确保存,但不是屏幕更大/分辨率更高的手机。无论保存在哪个设备上,如何确保生成的保存图像看起来相同?

差异示例

【问题讨论】:

    标签: android canvas bitmap


    【解决方案1】:

    您需要扩展。例如,假设设备 1 为 500x1000 像素,设备 2 为 600x1200。假设位图为 300x400,并以 x 方向 30 像素和 y 方向 100 像素的偏移量开始。

    位图的大小需要按两个屏幕大小的比例增长。所以它需要 300*(600/500) 像素宽和 400*(1200/1000) 像素大。偏移量也需要缩放到 30*(600/500) 和 100*(1200/1000)。

    请注意,缩放时可能会出现拉伸、像素化和其他图像缺陷。拉伸得越多,情况就会越糟。收缩也会产生缺陷,但这些往往更小。

    这是一个简单的例子——我给出的两个屏幕具有相同的纵横比(宽高比)。在长宽比不同的情况下,需要选择:

    1) 保持图像的纵横比不变。这意味着您将在 1 个方向上有空白区域,但图像不会受到影响。

    2)允许改变图像的纵横比。这不会留下空白,但会使图像倾斜。

    对于#2,使用与上面相同的代码。对于 #1,找出最需要缩放的维度,并使用它来缩放 x 和 y。

    不可能从任何尺寸的手机缩放到任何尺寸的手机,而通用图像上没有任何缺陷。您必须在上述两个选项之间做出选择。

    【讨论】:

    • 谢谢。这不仅仅是信息。感谢您花时间教育我。
    【解决方案2】:

    我还发现,如果我改为使用 imageview.getWidth() 和 imageview.getHeight(),无论屏幕大小如何,我都可以将每个“层”定位在我需要的位置。我在一台小型安卓设备和平板电脑上测试了这种方法,保存的图像在所有设备上都很完美。

    我所做的是使用 Photoshop 确定每个图像(“图层”)的像素大小。然后我使用在线 px 到 dp 计算器/转换器来确定每一层的正确 dp 大小。我为布局中的每一层设置了特定的 dp 宽度和高度。对于我需要保存到主图像的每一层,我通过获取 mainimageview 的高度和宽度并减去从边缘到该层的相应边缘所需的像素来计算 x 和 y 尺寸。通过反复试验,我多次运行该应用程序以获得我想要的每一层的准确定位。保存图像的结果正是它在用户看来的样子。希望这对将来的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 2014-10-03
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      相关资源
      最近更新 更多