所以,我跟着這個問題的建議:如何獲得UIImage的負顏色不改變顏色空間
how to give UIImage negative color effect
但是當我做了轉換,色彩空間信息丟失,並恢復到RGB。 (我想要灰色)。
如果我在NSLog
CGColorSpaceRef
之前和之後給出的代碼,它證實了這一點。
CGColorSpaceRef before = CGImageGetColorSpace([imageView.image CGImage]);
NSLog(@"%@", before);
UIGraphicsBeginImageContextWithOptions(imageView.image.size, YES, imageView.image.scale);
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy);
[imageView.image drawInRect:CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height)];
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeDifference);
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(),[UIColor whiteColor].CGColor);
CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height));
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGColorSpaceRef after = CGImageGetColorSpace([imageView.image CGImage]);
NSLog(@"%@", after);
是否有任何方法來保留顏色空間信息,或者,如果沒有,我怎麼能改變它之後呢?
編輯:在閱讀文檔UIGraphicsBeginImageContextWithOptions
它說:
對於iOS 3.2中創建位圖和後來的繪圖環境使用預乘ARGB格式存儲的位圖數據。如果opaque參數爲YES,則位圖將被視爲完全不透明,並忽略其Alpha通道。
所以也許這是不可能的,沒有改變它爲CGContext
?我發現如果我將opaque
參數設置爲YES
,那麼它將刪除足夠的alpha通道(我正在使用的tiff閱讀器無法處理ARGB圖像)。儘管爲了減小文件大小,我仍然只想要一個灰度圖像。