iOS:使用UIGraphicsGetImageFromCurrentImageContext进行屏幕捕获时保持真实的照片分辨率

时间:2014-11-06 11:25:57

标签: ios

我想在我的应用程序中进行基本的照片编辑,现在我需要能够在照片上添加文本。原始照片的宽度和高度均为> 2000像素,因此可以缩放以适应屏幕,而无需修改其比例。

因此,我将图像放在UIImageView中,在其上面拖动一个Label,然后使用UIGraphicsGetImageFromCurrentImageContext将图像保存在屏幕上。问题是我会得到一个小图像(320 X高度)。

完成此任务但不缩小分辨率的最佳方法是什么?

非常感谢!

1 个答案:

答案 0 :(得分:1)

我在应用中遇到了同样的问题。

我意识到的是你不能通过屏幕捕获来做到这一点。反过来,这意味着将标签和文字拖到图像上并不能真正完成(它可以承受我)与UILabels等......

您需要做的是跟踪正在发生的所有事情数据明智

目前您拥有frame的{​​{1}}。实际上这是无关紧要的。纯粹是向用户显示正在发生的事情。

UIImageView的情况相同。它也有一个UILabel。同样,这与最终图像无关。

您需要的是以非绝对的方式存储数据,然后将这些值转换为帧以便在设备上显示。

所以,如果你有一个frame像素的图像(只是让我很容易),这会在设备上显示并“缩小”到3200x4800。现在,用户放置一个标签,其框架为320x480,文本“Hello,world”为特定字体大小。

存储框架10, 10, 100, 21是没用的,因为输出图像时需要的是...... 10, 10, 100, 21(即大小的十倍)。

所以,你真的应该在后台存储信息,如......

100, 100, 1000, 210

现在,您有标签所在位置的百分比值以及根据图像大小应该有多大的值。

因此,对于缩小的图像尺寸,它将返回frame = 0.031, 0.021, 0.312, 0.044 // these are all percentages ,对于完整图像尺寸,它将为10, 10, 100, 21,因此在打印时看起来大小相同。

您可以通过UIView与UIImageView和UILabel创建复合100, 100, 1000, 210,然后您只需在渲染之前将其调整为完整图像大小。这将是最初接近它的简单但天真的方式。

或者您可以创建一个UIView,CALayers支持它显示图像和文本。

或者您可以使用某种绘制方法渲染图像和文本。

无论哪种方式,你都不能只使用屏幕截图。

是的,这比它最初出现的要复杂得多。