我想了解如何更改UIImage的顏色/色調。我發現iOS5有很多圖像過濾器,但我很難找到有關正確使用CIColorMatrix
過濾器的文檔。如何在iOS5中使用CIColorMatrix?
-(void)doCIColorMatrixFilter
{
//does not work, returns nil image
CIImage* inputImage = [CIImage imageWithCGImage:[[UIImage imageNamed:@"button.jpg"]CGImage]];
CIFilter *myFilter;
NSDictionary *myFilterAttributes;
myFilter = [CIFilter filterWithName:@"CIColorMatrix"];
[myFilter setDefaults];
myFilterAttributes = [myFilter attributes];
[myFilterAttributes setValue:inputImage forKey:@"inputImage"];
//How to set up attributes?
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *ciimage = [myFilter outputImage];
CGImageRef cgimg = [context createCGImage:ciimage fromRect:[ciimage extent]];
UIImage *uimage = [UIImage imageWithCGImage:cgimg scale:1.0f orientation:UIImageOrientationUp];
[imageView setImage:uimage];
CGImageRelease(cgimg);
}
什麼代碼進入該過濾器字典?
偉大的回答。只有#1音符的旁註。有時由於圖像類型的原因,ciimage是零。所以有時它必須創建cgimage,然後創建一個ciimage。 – Aggressor 2014-12-23 18:45:43
@Aggressor你可以給一個圖像類型的例子,將返回零爲ciimage?我想編輯答案解決它:) – nacho4d 2014-12-25 10:24:40
繼承人一篇文章,解釋了3. https://medium.com/@ranleung/uiimage-vs-ciimage-vs-cgimage-3db9d8b83d94。如果你正在使用已知類型(比如.jpg),並且你總是知道你將擁有CIImage,那麼你就很安全。但是如果你的應用程序採用多種類型的文件格式,那麼當CIImage爲零時應該有保護措施,並且抓取CGImage並將其轉換爲CIImage(這可能意味着在上下文中重新繪製它並從中獲取UIImage-> CIImage ) – Aggressor 2014-12-25 19:04:59