簡體   English   中英

旋轉的CGImage / CGlayer的抗鋸齒看起來很鋸齒,UIImageView的鋸齒不是

[英]The antialias of rotated CGImage/CGlayer seems jaggy, UIImageView's is not

我需要用旋轉的灰度圖像遮蓋 “紋理”圖像。

我發現,我必須使用CGImagesCGlayers進行此操作 (如果僅使用UIImageViews的方法較為簡單,請告訴我)。

我的問題很簡單:

任何旋轉變換后的CG素材的抗鋸齒效果都是安靜的鋸齒 ...

...但是旋轉轉換后的UIImageView的抗鋸齒有點完美。 如何產生漂亮的抗鋸齒旋轉?

我上載了涉及實際iPhone Simulator屏幕截圖的“證明”,以查看我在說什么: http : //gotoandplay.freeblog.hu/files/Proof.png

我試圖使用CGImagesCGLayersUIImageViewsrenderInContext “捕獲”,我試圖將CGContextSetInterpolationQuality設置為高,並且試圖將CGContextSetAllowsAntialiasing - CGContextSetShouldAntialias設置為高,但是每種情況都返回相同的鋸齒結果。

我打算明年學習使用OpenGL,但此開發應僅使用CoreGraphics發布。 請讓我知道如何獲得完美渲染的旋轉圖像,我無法接受這是不可能的。

要為圖像添加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();

我有一個類似的問題,看來我也要將其移至OpenGL ES。 我無法確定一個不會影響性能的有效解決方案。

供將來的CoreGraphics探索者參考,放置一個1像素的透明邊框確實在我的實驗中做出了顯着的改進,但是似乎正如Eonil所提到的,您最終要經歷抗鋸齒/平滑/插值的多個階段。 IE:CGLayer對其旋轉進行一些插值,然后根據上下文對其進行繪制將進行一些插值/抗鋸齒,依此類推,直到最終看起來很粗糙為止。

實際上,通過在目標上下文上禁用插值和抗鋸齒,最終獲得了更好的結果,盡管它顯然仍然比較鋸齒(盡管總體而言工件較少)。 通過在構造CGLayer時啟用插值和抗鋸齒功能,並在重繪時在目標上下文中將其禁用,可以實現最佳的整體外觀。 顯然,這種方法還存在其他問題。

您是否嘗試過在圖像周圍添加清晰的1像素邊框? 我聽說過建議將其作為避免混疊的技巧,可以通過在混合邊緣時為CoreGraphics提供一些處理空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM