我需要使用旋转灰度图像遮罩“纹理”图像。
我发现,我必须使用 CGImages 或 CGlayers (如果只有使用 UIImageViews 的简化方法,请让我知道它。)
我的问题很简单:
任何 antialias 旋转变换的CG东西很安静 的锯齿 ...
...但旋转变换的UIImageView的抗锯齿有点完美。我怎样才能产生那种美丽的抗锯齿旋转?
我上传了一个涉及实际iPhone模拟器截图的“证据”,看看我在说什么:http://gotoandplay.freeblog.hu/files/Proof.png
我尝试用 renderInContext 使用 CGImages , CGLayers , UIImageViews “捕获”,我我试图将 CGContextSetInterpolationQuality 设置为高,并尝试设置 CGContextSetAllowsAntialiasing - CGContextSetShouldAntialias ,但每个案例都返回相同的锯齿结果。
我打算明年学习使用OpenGL,但这个开发应该仅使用CoreGraphics发布。请让我知道如何获得完美渲染的旋转图像,我只是不能接受它是不可能的。
答案 0 :(得分:1)
要为图片添加1px透明边框,请使用此
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
UIGraphicsBeginImageContext( imageRect.size );
[image drawInRect:CGRectMake(1,1,image.size.width-2,image.size.height-2)];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
答案 1 :(得分:0)
您是否尝试在图像周围添加清晰的1像素边框?我已经听说过建议作为避免混淆的技巧,通过给CoreGraphics提供一些混合边缘的空间。
答案 2 :(得分:0)
我遇到了类似的问题,看起来我也要把它转移到OpenGL ES上。我无法确定一个不影响性能的有效解决方案。
为了参考未来的CoreGraphics探险家,放置一个1像素的透明边框确实在我的实验中取得了显着的进步,但看起来正如Eonil所提到的那样,你最终会有多个阶段的抗锯齿/平滑/插值工作其他。 IE:CGLayer为它的旋转进行了一些插值,然后它被绘制的上下文将进行一些插值/抗锯齿,所以依此类推直到它看起来非常粗糙。
我实际上通过在目标上下文中禁用插值和抗锯齿来获得更好的结果,尽管它仍然显然是锯齿状的(尽管整体上的工件较少)。通过在构造CGLayer时启用插值和抗锯齿,并在重新绘制时禁用目标上下文,我能够实现最佳的整体外观。显然,这种方法充满了其他问题。