【问题标题】:Saving canvas output image at a higher resolution than the device以比设备更高的分辨率保存画布输出图像
【发布时间】:2015-10-21 08:44:29
【问题描述】:

是否可以将画布保存为比设备分辨率更高的图像?有没有办法在不丢失像素密度的情况下放大图像?
我正在开发一个应用程序,让您可以在画布上绘制和添加文本和图像。目前,当我将画布另存为图像时,该图像的分辨率取决于设备。我希望它独立于设备,并且图像应该以非常高分辨率(比如 A3 300dpi)保存。

【问题讨论】:

  • 是的,在您的设备上绘制时使用按比例缩小的 Canvas(例如,canvas.scale(0.5f, 0.5f)),在导出的图像上绘制时使用未更改的 Canvas,因此大小将为两个大几倍
  • 感谢您的建议。在这种情况下会影响图像质量吗?
  • 这一切都取决于您在画布上绘制的内容
  • 可以和你聊天吗?
  • 接受答案。您的所有问题都应该得到解决?

标签: android image canvas high-resolution


【解决方案1】:

您不能独立于设备。因为每个设备的最大允许大小不同。

看看CanvasgetMaximumBitmapWidth()getMaximumBitmapHeight()

但是您可以使用 Canvas 绘制位图。但这已被多次回答。例如这里: https://stackoverflow.com/a/5664047/5038873

您的问题的解决方案可能是将目标分辨率平铺在子图像中,受最大画布大小的限制。然后在这些图像上使用画布进行绘制。

在接下来的步骤中,您可以通过创建具有目标分辨率的位图并将其他图像的像素复制到其中来将这些位图放在一起。

【讨论】:

  • 谢谢你:)。是否可以从 Android 设备以 A3 300 dpi 保存图像?
  • 我认为我在 Nexus 6 和 Galaxy S6 上看到的最大值是 16384x16384px。但我不是 100% 确定。
  • Nexus 6 和 s6 的分辨率均为 2560 x 1440 像素
  • 是显示分辨率,但 getMaximumBitmapWidth() 返回其他值。最大画布尺寸不取决于屏幕尺寸。
  • 我添加了更多信息,可以帮助您实现您想要的。不失任何品质。
【解决方案2】:

无法将画布保存为高分辨率图像。图像分辨率是指形成图像的像素数。在画布情况下,画布大小将是目标图像的分辨率。 实现这一目标的一种可能方法

  • 将所有用户绘制的元素存储为对象
  • 创建具有目标分辨率的空图像
  • 使用 Canvas c= new Canvas(image) 获取目标图像的 Canvas
  • 根据您的设备画布大小和新画布大小计算比例因子
  • 现在使用计算的比例因子缩放所有用户绘制的对象
  • 在更大的画布上重绘所有对象并导出图像

一旦用户从 UI 中单击导出/保存按钮,就可以执行上述逻辑

【讨论】:

  • 感谢您的帮助 :) 请解释一下如何将用户元素保存为单个对象?
  • 对于用户添加的文本,存储具有属性位置 x 和 y、文本大小的自定义对象。使用比例因子转换位置 x 和 y,使用比例因子缩放文本大小,并在更大的画布上使用更新的值绘制文本
猜你喜欢
  • 2013-04-11
  • 2015-10-20
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多