将超大图像区域裁剪为屏幕上当前显示的内容

Posted

技术标签:

【中文标题】将超大图像区域裁剪为屏幕上当前显示的内容【英文标题】:Crop an area of oversized image to what is currently showing onscreen 【发布时间】:2013-06-28 04:51:47 【问题描述】:

我在图像视图中加载了一个超大的图像,该图像在垂直和水平方向上都超出了界限。

最终用户可以滚动图像(超大的图像视图位于滚动视图中),当他们找到他们喜欢的区域时,我想裁剪屏幕上显示的图像区域。 (很像一个截图,但只是 imageview.image 我将把它放到不同的 Imageview 中。

我似乎不知道如何完成当前显示在屏幕上的图像视图图像区域的“屏幕截图”。

【问题讨论】:

【参考方案1】:

您可以使用CGImageCreateWithImageInRect 来创建显示图像的子图像。使用 contentOffset 和滚动视图 bounds 创建要从中创建图像的矩形。

CGRect rect = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, CGRectGetWidth(scrollView.bounds), CGRectGetHeight(scrollView.bounds));
CGImageRef subImageRef = CGImageCreateWithImageInRect([originalImage CGImage], rect);

如果您缩放 scrollView,您也需要考虑 zoomLevel。

【讨论】:

我最终选择了一条不同的路线,在我放大/缩小时需要更少的计算。谢谢你,不管你的努力。我实际上要研究 CGImageCreateWithImageInRect 以了解它是如何工作的,可能会遇到我可以使用它的东西。再次感谢您。【参考方案2】:

我最终使用以下代码来实现我想要抓取图像的内容。感谢 Karl 的意见,并感谢 iNoob 回答了上一个问题 [Located here on ***][1] 我用于我的问题。

只需使用下面的代码进行“截图”,只需将图像中不需要的任何内容设置为.hidden = True;在代码之前将其从屏幕截图中隐藏并将它们设置为 .Hidden = FALSE;在代码之后将它们带回来。

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

【讨论】:

以上是关于将超大图像区域裁剪为屏幕上当前显示的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在黑莓中裁剪具有特定形状的图像?

PHP在上传前显示选择的图像

在画布中裁剪图像

php缩放图像裁剪

用于裁剪图像的 Clojure GUI

使用 OpenCV Python 以与参考图像相同的方向和尺寸转换和显示裁剪图像