- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Swift 中使用 CGImageCreateWithImageInRect 在触摸位置创建部分图像的副本。
我的代码运行良好,除非用户触摸屏幕边缘并且矩形大小落在 View 框架之外。它不是返回一个正方形,而是返回一个矩形(我假设)来切断 View 外的数量。形状的变化会偏离复制图像的位置,因此它不会与下方图像对齐。
如何保持正方形/大小并忽略边界,以便我的图像对齐?
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first!.locationInView(mainImageView?.superview)
UIGraphicsBeginImageContext(self.view.bounds.size)
UIApplication.sharedApplication().keyWindow!.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let crop = CGRectMake(touch.x - CGFloat(brushWidth) / 2, touch.y - CGFloat(brushWidth) / 2, CGFloat(brushWidth), CGFloat(brushWidth))
let imageRef = CGImageCreateWithImageInRect(screenshot.CGImage, crop)
if imageRef != nil {
let newImage: UIImage = UIImage(CGImage: imageRef!, scale: mainImageView.image!.scale, orientation: mainImageView.image!.imageOrientation)
let bgImage = UIImageView(image: processedImage)
bgImage.center = touch
self.view.addSubview(bgImage)
}
}
}
}
这是它工作的一个例子:
这是一个扭曲图像的例子,因为我触摸了边缘:
最佳答案
CGImageCreateWithImageInRect(screenshot.CGImage, crop) 确实返回了裁剪后的版本。以下是文档中的相关评论:
Quartz performs these tasks to create the subimage:
Adjusts the area specified by the rect parameter to integral bounds by calling the function CGRectIntegral.
Intersects the result with a rectangle whose origin is (0,0) and size is equal to the size of the image specified by the image parameter.
References the pixels within the resulting rectangle, treating the first pixel within the rectangle as the origin of the sub image.
解决此问题的一个简单方法是调整生成的 UIImageView 的位置,使其大小正确。下面是相关的计算:
let screenshotBounds = CGRectMake(0.0, 0.0, screenshot.size.width, screenshot.size.height)
let cropIntegral = CGRectIntegral(crop)
let cropIntersection = CGRectIntersection(cropIntegral, screenshotBounds)
bgImage.center = CGPoint(CGRectGetMidX(cropIntersection), CGRectGetMidY(cropIntersection))
cropIntersection 是我们提取图像的边界矩形(遵循文档中给出的前两个步骤)。因此,我们可以使用它来将 imageView 定位到原始图像中的相同位置。
关于ios - CGImageCreateWithImageInRect 切断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36705844/
我正在开发 iPhone 的像素化应用程序。由于用 iPhone 4 相机拍摄的照片太大,因此应用程序在更新像素化图片时运行速度非常慢,因此我尝试先创建图片的图 block ,然后只更新图 block
我在 Swift 中使用 CGImageCreateWithImageInRect 在触摸位置创建部分图像的副本。 我的代码运行良好,除非用户触摸屏幕边缘并且矩形大小落在 View 框架之外。它不是返
我正在尝试将图像裁剪成正方形,但一旦我实际尝试使用 CGImageCreateWithImageInRect() 进行裁剪,此行就会崩溃。我设置了断点并确保传递给该函数的参数不为零。 我对编程和 Sw
我正在使用这个 github 图像裁剪器:https://github.com/iosdeveloper/ImageCropper 在这个图像裁剪器中,在 init 方法中有这些行: CGRect r
我的应用程序中有一个场景,我使用截取视频的屏幕截图 [myMovieController requestThumbnailImagesAtTimes:@[@(myMovieController.cur
我在使用 CGImageCreateWithImageInRect 裁剪照片时遇到了麻烦。我的应用程序让用户移动/放大图像直到它填满 316 x 316 View ,然后我希望它裁剪框外的任何区域并将
我正在尝试使用 CGImageCreateWithImageInRect 从图像中获取子图像,但它无法正常工作。它从图像中的随机位置返回图像,而不是我指定的位置。请看下图; 我的代码是: CGImag
我正在尝试剪切图像并遮盖它....我能够成功完成..但程序在几分钟后退出并显示 101 状态 - (void) maskImage { if(scopeOn==1){ UIGr
我正在尝试拍摄图像快照,对其进行裁剪并将其保存到 UIImageView。 我已经从几十个不同的方向尝试过,但这里是一般设置。 首先,我在 ARC、XCODE 7.2 下运行它,在 6Plus 手机
我的图像无法显示,我也尝试过其他图像,但只是出现空白屏幕。 UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"building-demo
我试图在触摸位置复制背景图像的一部分,然后在与裁剪部分相同的位置添加 subview 。如果我做的正确,两张图片会排成一行,你无法分辨出那里有两个 UIImageView,但它最终看起来像下面的图片。
我正在尝试实现一个 iOS 相机 View ,它可以拍摄方形照片(类似于 Instagram)。我的代码出现在下面。第一部分,框架高度设置为等于框架宽度,按预期工作,并为用户提供了一个正方形的 Vie
我正在使用 CGImageCreateWithImageInRect() 从背景图像运行时生成一个小图像,它将在每次线程调用(0.01 秒)时显示。一旦我开始通过 CGImageCreateWithI
我正在尝试使用 Swift 制作一个简单的裁剪功能。我正在尝试使用 CGImageCreateWithImageInRect 函数 - 它工作完美,但质量较差。我错过了什么吗? func retri
描述我的项目: 我有一个矩形 UIImageView 框架漂浮在白色层上。在 UIImageView 内部,我成功地创造了它在白色层后面显示背景图像的一部分的错觉。您可以四处拖动矩形,它会“重新绘制”
MonoTouch 中 CGImageCreateWithImageInRect iOS 方法的等价物是什么? 我正在尝试在 C# 中转换此 Objective-C 行: CGImageRef sam
我需要在 Swift 3.0 中实现这个 Objective-C 代码(我使用的是 Xcode 8 Beta 3): // Note: this code comes from an Obj-C ca
这是关于 CGImageCreateWithImageInRect 的文档. 它以一个 CGRect 对象作为参数。据我了解,CGRect 以点为单位 但是文档说: "References the p
当我使用 CGImageCreateWithImageInRect() 创建 CGImage 时,它会创建一个比我传入的矩形高 1 像素、宽 1 像素的矩形。为什么会这样? let rect: C
我使用以下代码从 Sprite 中获取图像。除 iPhone 4(高清版)外,它在任何地方都可以正常工作。 - (UIImage *)croppedImage:(CGRect)rect { C
我是一名优秀的程序员,十分优秀!