0

我需要用旋转的灰度图像掩盖“纹理”图像。

我发现,我必须用CGImagesCGlayers 来做(如果有更简单的方法只使用UIImageViews,请告诉我)。

我的问题很简单:

任何旋转变换的 CG 东西的抗锯齿都是安静的 锯齿状......

...但是旋转转换的 UIImageView 的抗锯齿有点完美。我怎样才能产生漂亮的抗锯齿旋转?

我已经上传了一个涉及实际 iPhone 模拟器屏幕截图的“证明”,看看我在说什么: http: //gotoandplay.freeblog.hu/files/Proof.png

我尝试使用CGImagesCGLayersUIImageViews “捕获”与renderInContext,我尝试将CGContextSetInterpolationQuality设置为高,并尝试设置CGContextSetAllowsAntialiasing - CGContextSetShouldAntialias,但每种情况都返回相同的锯齿状结果。

我计划明年学习使用 OpenGL,但这个开发应该只使用 CoreGraphics 发布。请让我知道如何获得完美渲染的旋转图像,我不能接受这是不可能的。

4

3 回答 3

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();
于 2011-02-20T14:05:58.080 回答
0

我有一个类似的问题,看起来我也要把它移到 OpenGL ES 上。我无法确定一个不影响性能的有效解决方案。

作为未来 CoreGraphics 浏览器的参考,放置一个 1 像素的透明边框确实在我的实验中取得了显着的改进,但似乎正如 Eonil 所提到的,你最终会得到多个阶段的抗锯齿/平滑/插值相互对抗。IE:CGLayer 为它的旋转做了一些插值,然后它被绘制到的上下文将做一些插值/抗锯齿,依此类推,直到它看起来很粗糙。

实际上,通过在目标上下文上禁用插值和抗锯齿,我最终得到了更好的结果,尽管它仍然明显是锯齿状的(尽管总体上工件较少)。通过在构建 CGLayer 时启用插值和抗锯齿,并在重新绘制它时为目标上下文禁用它,我能够获得最佳的整体外观。显然,这种方法充满了其他问题。

于 2012-06-18T23:06:51.530 回答
0

您是否尝试在图像周围添加清晰的 1 像素边框?我听说这是一种避免混叠的技巧,它通过在混合边缘时给 CoreGraphics 一些空间来使用。

于 2009-12-28T08:06:47.160 回答