2012-09-07 92 views
1

我學習繪畫UIImages和CGImages,使用CIFilters等來測試我的知識,我與滑塊一個小的測試應用程序,以編程方式更改藥水精靈的顏色,並在屏幕上顯示出來(使用CIHueBlendMode CIFilter)。我完成後,我想清理相對冗長的代碼,發現的,而不是從過濾器的輸出CIImage一個CGImage,然後一個UIImage去,我可以直接從CIImage到的UIImage使用的UIImage的imageWithCIImage去:方法。繪製的UIImage從CIImage在的drawRect:

然而,當我試圖繪製使用drawInRect產生的UIImage的:,什麼也沒有繪製。當然,通過CGImage階段來解決這個問題。我對此的理解是,使得從在UIImage的,這是在drawInRect使用NULL CGImage屬性CIImage結果一個UIImage:。它是否正確?如果是這樣,有沒有更好的方式來顯示一個CIImage,而不是通過CGImage跟着UIImage?我只能畫一個用CIImage製作的CGImage,但這會翻轉圖像,這會導致另一個問題。目前,我首先包裝了我在UIImage中繪製的任何內容,以保證翻轉。還有另一種更有效的方法嗎?

過長;沒有閱讀:有沒有更好的方法來繪製CIImages,而不是將其轉換爲CGImage,然後是UIImage並繪製它?繪製CGImages時處理翻轉的最佳方式是什麼?

由於任何人誰可以回答我的一些問題。 :)

回答

1

在做了一些關於CIImage的研究之後,我意識到現在您不能跳過從CIImage製作CGImage的步驟,即使可以,也不會更高效,因爲無論如何你仍然需要處理CIImage。 CIImage並不是一個真正的圖像,as noted in Apple's documentation,它被轉換成CGImage時被處理。這也是爲什麼如果我在我的項目中使用Time Profiler,我發現我的drawRect:方法中有99%的時間花在createCGImage:上,而不是使用CIFilters。

至於應對Core Graphics和iPhone之間座標系統變化的最有效方法,似乎將對象包裝在UIImage實例中是最簡單的(不確定最佳)方式。這很簡單,而且相對高效。另一種選擇是轉換圖形上下文。


如果我在三天內得不到比我自己更好的答案,我會將其標記爲已接受。