sle*_*rfx 12 iphone objective-c core-image uiimageview ios
谢谢你的期待.
这是我的代码
CIImage *result = _vignette.outputImage;
self.mainImageView.image = nil;
//self.mainImageView.contentMode = UIViewContentModeScaleAspectFit;
self.mainImageView.image = [UIImage imageWithCIImage:result];
self.mainImageView.contentMode = UIViewContentModeScaleAspectFit;
Run Code Online (Sandbox Code Playgroud)
在这里_vignette正确设置过滤器,图像效果正确应用于图像.
我正在使用分辨率为500x375的源图像.我的imageView几乎拥有iPhone屏幕的分辨率.所以为了避免拉伸我正在使用AspectFit.
但是在我将结果图像分配回我的imageView后应用效果后,它会拉伸.无论UIViewContentMode我用哪个.它不起作用.ScaleToFill无论我给出的过滤器如何,它似乎总是适用.
知道为什么会这样吗?任何建议都非常感谢.
mat*_*att 23
(1)Aspect Fit 确实拉伸图像 - 适合.如果您根本不想拉伸图像,请使用中心(例如).
(2)imageWithCIImage给你一个非常奇怪的野兽,一个不基于CGImage的UIImage,因此不受普通的图层显示规则的影响.它实际上只不过是CIImage的薄包装,这不是你想要的.你必须通过CGImage将CIFilter输出转换(渲染)到UIImage,从而为你提供一个实际上有一些位的UIImage(CGImage,一个位图).我在这里的讨论为您提供了演示代码:
http://www.apeth.com/iOSBook/ch15.html#_cifilter_and_ciimage
换句话说,在某些时候,您必须调用CIContext createCGImage:fromRect:从CIFilter的输出生成CGImageRef,并将其传递给UIImage.在您这样做之前,您没有将过滤器操作的输出作为真正的UIImage.
或者,您可以将图像绘制imageWithCIImage到图形上下文中.例如,您可以将其绘制到图像图形上下文中,然后使用该图像.
你不能做的是imageWithCIImage直接显示图像.那是因为它不是图像!它没有底层位图(CGImage).那里没有.它只是一组用于导出图像的CIFilter指令.
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |