2009-12-07 20 views
0

我需要掩碼「紋理」圖像與旋轉灰度圖像。旋轉CGImage/CGlayer的抗鋸齒看起來很光滑,UIImageView的不是

我發現,我與CGImagesCGlayers做到這一點(如果有使用的UIImageViews只,請讓我知道關於它的simplier方式)。

我的問題很簡單:

反鋸齒的任何 旋轉變換CG東西安靜 鋸齒 ...

...但的抗混疊旋轉轉換的UIImageView是一個完美的。我怎樣才能製作出美麗的反鋸齒旋轉?

我已上傳的 「證據」,包括實際的iPhone模擬器截圖,看看我究竟在說約:http://gotoandplay.freeblog.hu/files/Proof.png

我試着使用CGImagesCGLayers的UIImageViews「拍攝」與renderInContext,我試圖CGContextSetInterpolationQuality高,並且還試圖設置CGContextSetAllowsAntialiasing - CGContextSetShouldAntialias,但每個案件都返回相同的鋸齒結果。

我打算明年學會使用OpenGL,但是這個開發應該只使用CoreGraphics發佈。請讓我知道如何獲得完美呈現的旋轉圖像,我不能接受它是不可能的。

+0

沒有人知道... – Geri 2009-12-08 07:27:59

+0

嗨geri,你有沒有找到解決這個問題的辦法?我在這裏面臨類似的問題:http://stackoverflow.com/questions/2590470/how-do-i-remove-those-rotation-artefacts-from-my-catiledlayer – FelixLam 2010-04-07 11:18:29

+0

雅。每個解決方案都需要很高的性能,所以我決定學習OpenGL ES API。這不是什麼大不了的事情,並且遊戲在反抗和表現上都變得非常順利。 – Geri 2010-05-19 11:41:10

回答

0

您是否曾嘗試在圖像周圍添加清晰的1像素邊框?我聽說過這種建議是避免走樣的技巧,通過給CoreGraphics提供一些空間來處理邊緣混合。

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(); 
0
我有一個類似的問題

,看起來像我將其移動到OpenGL ES的爲好。我無法確定一個不會影響性能的有效解決方案。對於未來的CoreGraphics探索者來說,放置1像素透明邊框確實可以顯着改善我的實驗,但是看起來像Eonil提到的那樣,最終會出現多個抗鋸齒/平滑/插值階段彼此。 IE:CGLayer爲它的旋轉做了一些插值,然後它被繪製的上下文將做一些插值/抗鋸齒,等等,直到它看起來很粗糙。

實際上,通過在目標上下文上禁用插值和抗鋸齒,實際上結果更好,儘管它仍然明顯是鋸齒狀(儘管總體上較少的僞影)。通過在構建CGLayer時啓用插值和抗鋸齒,並在重新繪製CGLayer時將其禁用到目標上下文,我能夠實現最佳整體外觀。顯然,這種方法充滿了其他問題。