在iOS中我正在使用的應用程序中,我需要從用戶那裏獲取圖片,然後將其轉換爲我們都喜歡的塊狀,像素化8位樣式。我假設我使用了一些Quartz/CoreImage(我有我的Mac和iOS dev混合了methinks)過濾器來激活它?我從來沒有使用任何這些,所以任何幫助將不勝感激。iOS中的8位圖像
回答
此過程非常簡單,您自己寫。您可以使用CoreGraphics使用CGImage和CGBitmapContext渲染位圖。然後直接操作像素值。
8位表示要麼:
- 使用色譜表/彩色地圖
- 或RRRGGGBB格式
前者更復雜。如果這對您而言是新的,那麼首先將像素值轉換爲近似RRRGGGBB。假設你知道如何通過CoreGraphics(大量的例子存在)來轉移位圖並創建一個位圖,那麼你就全都設置好了!
您可以使用Core Image,特別是CIColorPosterize
和CIPixellate
過濾器。核心圖像具有利用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.
我試圖使用這段代碼,但我無法讓它正常工作。我稍微修改它以使用NSClassFromString,因爲我的應用程序必須支持iOS 4.3。我以這種方式使用它:http://pastebin.com/5hwb0xcr我的圖像視圖保持空白,但如果我嘗試將我輸入的CIImage轉換回UIImage,我的圖像視圖顯示原始圖像。有任何想法嗎? – 2012-01-07 05:33:32
Argh。我剛剛在iOS上嘗試過這兩種過濾器,並返回'nil'。在檢查了iOS文檔後,我發現iOS上沒有'CIColorPosterize'和'CIPixellate',它們似乎只是Mac。我很抱歉帶領你走下這條花園的道路,我忘記了iOS只有核心圖像過濾器的一個子集。 – 2012-01-07 11:41:00
該死,我想我需要推出我自己的圖像處理代碼。不過謝謝你的回答。 – 2012-01-07 19:27:41
- 1. 比較IOS中的兩個圖像8
- 2. 位圖8位灰度圖像在C
- 3. 創建8位圖像
- 4. 在java中轉換8位灰度RAW圖像中的圖像
- 5. iOS 8 AutoLayout更改視圖的位置
- 6. Xcode 8 beta 6 - 在iOS 8中破解的應用圖像
- 7. LoadImage在8位圖像中失敗
- 8. 轉換1位圖像到8位
- 9. 轉換8位色的BMP圖像到8位灰度BMP
- 10. 如何將8位PNG圖像作爲8位PNG圖像讀取?
- 11. 轉換8位圖像到4位圖像
- 12. 在MATLAB中保存每像素超過8位的圖像
- 13. AFNetworking:圖像不上傳iOS 8
- 14. iOS 8 UITableViewRowAction:向左滑動,圖像?
- 15. 通過whatsapp分享圖像ios 8
- 16. iOS 8 Bug與UIImagePickerController圖像作物
- 17. iOS 8中破解的位置服務
- 18. 如何在Java中將16位.tiff圖像轉換爲8位.tiff圖像?
- 19. 的Xcode 8個模擬器IOS 8圖像會變形
- 20. 在.Net 2.0中將8位灰度tiff圖像轉換爲8位灰度jpg
- 21. 核心圖像CIImage 8位灰度
- 22. 在OpenCV 2中將8位圖像轉換爲32位
- 23. iOS應用圖像/圖標位深度
- 24. 從8位灰度圖像中擷取像素
- 25. 圖像中的iOS
- 26. C# - 如何將圖像轉換爲8位彩色圖像?
- 27. C# - 將圖像複製到8位索引圖像
- 28. iOS中的圖像視圖
- 29. Winforms的RGB圖像灰度8位和16位
- 30. 灰度(每像素8位)在Java圖像像素處理
使用Core Image實際上比這樣做要快得多,因爲它利用了GPU。如果您使用核心映像,您也不需要編寫任何圖像處理代碼,這總是不錯的... – 2012-01-05 09:03:48
但是,您無法支持iOS 4(或3)。 – jrtc27 2012-01-05 09:12:58
@Rob 1)關於GPU的好處,但在所有情況下肯定不會更快。 2)CI不保證在什麼地方會發生什麼,並且出於什麼原因--CG(作爲基於類似概念的示例)確實在GPU上做了很多工作。 3)你的例子是一個近似的效果 - 但它看起來不錯。 4)CI在iOS 5之前不可用。獎金)圖像處理代碼很有趣! ...對於我們中的一些人;)所以我決定在我回答時另一個答案是好的。 – justin 2012-01-05 09:38:22