Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在不平滑任何内容的情况下放大UIImage?_Iphone_Cocoa Touch_Uikit_Uiimage_Core Graphics - Fatal编程技术网

Iphone 如何在不平滑任何内容的情况下放大UIImage?

Iphone 如何在不平滑任何内容的情况下放大UIImage?,iphone,cocoa-touch,uikit,uiimage,core-graphics,Iphone,Cocoa Touch,Uikit,Uiimage,Core Graphics,我想以这样的方式放大UIImage,用户可以非常清晰地看到UIImage中的像素。当我把它放到UIImageView中并放大变换矩阵时,UIImage看起来是抗锯齿和平滑的 有没有一种方法可以在更大的位图上下文中通过简单地重复每一行和每一列来获得更大的像素?我该怎么做呢?#导入 view.layer.mabilityFilter=KCAFilterAreSet直接在位图上下文中绘图时,我们可以使用: CGContextSetInterpolationQuality(myBitmapContext

我想以这样的方式放大UIImage,用户可以非常清晰地看到UIImage中的像素。当我把它放到UIImageView中并放大变换矩阵时,UIImage看起来是抗锯齿和平滑的

有没有一种方法可以在更大的位图上下文中通过简单地重复每一行和每一列来获得更大的像素?我该怎么做呢?

#导入


view.layer.mabilityFilter=KCAFilterAreSet

直接在位图上下文中绘图时,我们可以使用:

CGContextSetInterpolationQuality(myBitmapContext, kCGInterpolationNone);
我在

上找到了这个,我也在尝试这个(在一个子层上),但我无法让它工作,它仍然很模糊。这就是我必须做的:

const CGFloat PIXEL_SCALE = 2;
layer.magnificationFilter = kCAFilterNearest; //Nearest neighbor texture filtering
layer.transform = CATransform3DMakeScale(PIXEL_SCALE, PIXEL_SCALE, 1); //Scale layer up
//Rasterize w/ sufficient resolution to show sharp pixels
layer.shouldRasterize = YES;
layer.rasterizationScale = PIXEL_SCALE;

对于从CIImage创建的UIImage,您可以使用:

imageView.image = UIImage(CIImage: ciImage.imageByApplyingTransform(CGAffineTransformMakeScale(kScale, kScale)))

Swift 5

let image = UIImage(named: "Foo")
let scaledImageSize = image.size.applying(CGAffineTransform(scaleX: 2, y: 2))

UIGraphicsBeginImageContext(scaledImageSize)
let scaledContext = UIGraphicsGetCurrentContext()!
scaledContext.interpolationQuality = .none
image.draw(in: CGRect(origin: .zero, size: scaledImageSize))
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()!

你的比例系数是多少?请记住,只有对于x2、x3、x4等,才能获得“尖锐”的结果。请注意,此方法称为最近邻插值。请注意,如果使用[UIImage imageWithCIImage:ci]为UIImageView创建UIImage,则此方法无效;此外,使用
view.layer.shouldRasterize=YES
。这是为了避免某些图像每像素显示4个像素的问题。@PeterDeWeese,这很好,达到了我的目的,但我想问,当我使用
放大过滤器=kCafilterAreset
时,放大的大而清晰的像素真的是图像的原始像素,还是经过一些处理才产生的?谢谢@JeffreySun,当我使用shouldRasterize=YES时,像素看起来不像图像的原始像素,而是经过处理的像素,对吗?谢谢你的下推投票。。。介意解释一下这个答案的问题吗?这个解决方案仍然会在输出中添加插值。如果试图绘制锐利的颜色框,则清晰可见