2012-01-05 43 views
2

在iOS中我正在使用的應用程序中,我需要從用戶那裏獲取圖片,然後將其轉換爲我們都喜歡的塊狀,像素化8位樣式。我假設我使用了一些Quartz/CoreImage(我有我的Mac和iOS dev混合了methinks)過濾器來激活它?我從來沒有使用任何這些,所以任何幫助將不勝感激。iOS中的8位圖像

回答

1

此過程非常簡單,您自己寫。您可以使用CoreGraphics使用CGImage和CGBitmapContext渲染位圖。然後直接操作像素值。

8位表示要麼:

  • 使用色譜表/彩色地圖
  • 或RRRGGGBB格式

前者更復雜。如果這對您而言是新的,那麼首先將像素值轉換爲近似RRRGGGBB。假設你知道如何通過CoreGraphics(大量的例子存在)來轉移位圖並創建一個位圖,那麼你就全都設置好了!

+0

使用Core Image實際上比這樣做要快得多,因爲它利用了GPU。如果您使用核心映像,您也不需要編寫任何圖像處理代碼,這總是不錯的... – 2012-01-05 09:03:48

+0

但是,您無法支持iOS 4(或3)。 – jrtc27 2012-01-05 09:12:58

+0

@Rob 1)關於GPU的好處,但在所有情況下肯定不會更快。 2)CI不保證在什麼地方會發生什麼,並且出於什麼原因--CG(作爲基於類似概念的示例)確實在GPU上做了很多工作。 3)你的例子是一個近似的效果 - 但它看起來不錯。 4)CI在iOS 5之前不可用。獎金)圖像處理代碼很有趣! ...對於我們中的一些人;)所以我決定在我回答時另一個答案是好的。 – justin 2012-01-05 09:38:22

4

您可以使用Core Image,特別是CIColorPosterizeCIPixellate過濾器。核心圖像具有利用GPU的優勢,並且比手動操作位圖更快。

一個簡單的例子是這樣的:

NSURL* imageURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForImageResource:@"yourSourceImage"]]; 
CIImage* inputImage = [[CIImage alloc] initWithContentsOfURL:imageURL]; 

CIFilter* posterize = [CIFilter filterWithName:@"CIColorPosterize"]; 
[posterize setDefaults]; 
[posterize setValue:[NSNumber numberWithDouble:8.0] forKey:@"inputLevels"]; 
[posterize setValue:inputImage forKey:@"inputImage"]; 

CIFilter* pixellate = [CIFilter filterWithName:@"CIPixellate"]; 
[pixellate setDefaults]; 
[pixellate setValue:[NSNumber numberWithDouble:4.0] forKey:@"inputScale"]; 
[pixellate setValue:[posterize valueForKey:@"outputImage"] forKey:@"inputImage"]; 

CIImage* outputImage = [pixellate valueForKey:@"outputImage"]; 
[inputImage release]; 

//do something with outputImage 

你應該玩的「核心圖片遊樂園」的應用程序,你可以在/Developer/Applications/Graphics Tools找到以獲得該給你結果你的過濾器值想。

您應該記住Core Image僅適用於iOS 5.

+0

我試圖使用這段代碼,但我無法讓它正常工作。我稍微修改它以使用NSClassFromString,因爲我的應用程序必須支持iOS 4.3。我以這種方式使用它:http://pastebin.com/5hwb0xcr我的圖像視圖保持空白,但如果我嘗試將我輸入的CIImage轉換回UIImage,我的圖像視圖顯示原始圖像。有任何想法嗎? – 2012-01-07 05:33:32

+1

Argh。我剛剛在iOS上嘗試過這兩種過濾器,並返回'nil'。在檢查了iOS文檔後,我發現iOS上沒有'CIColorPosterize'和'CIPixellate',它們似乎只是Mac。我很抱歉帶領你走下這條花園的道路,我忘記了iOS只有核心圖像過濾器的一個子集。 – 2012-01-07 11:41:00

+0

該死,我想我需要推出我自己的圖像處理代碼。不過謝謝你的回答。 – 2012-01-07 19:27:41