我正在尋找一種簡單而有效的方法來給NSImage中包含的任何圖標賦予特殊的色調。我最初的需要ID有棕褐色的圖標,但如果可以使用其他顏色,它會更好。任何NSImage的棕褐色版本
你有什麼想法做到這一點?
預先感謝您的幫助,
問候,
我正在尋找一種簡單而有效的方法來給NSImage中包含的任何圖標賦予特殊的色調。我最初的需要ID有棕褐色的圖標,但如果可以使用其他顏色,它會更好。任何NSImage的棕褐色版本
你有什麼想法做到這一點?
預先感謝您的幫助,
問候,
我想你會通過像素有取圖像像素和調整RGB值,以獲得效果。
-(UIImage*)makeSepiaScale:(UIImage*)image
{
CGImageRef cgImage = [image CGImage];
CGDataProviderRef provider = CGImageGetDataProvider(cgImage);
CFDataRef bitmapData = CGDataProviderCopyData(provider);
UInt8* data = (UInt8*)CFDataGetBytePtr(bitmapData);
int width = image.size.width;
int height = image.size.height;
NSInteger myDataLength = width * height * 4;
for (int i = 0; i < myDataLength; i+=4)
{
UInt8 r_pixel = data[i];
UInt8 g_pixel = data[i+1];
UInt8 b_pixel = data[i+2];
int outputRed = (r_pixel * .393) + (g_pixel *.769) + (b_pixel * .189);
int outputGreen = (r_pixel * .349) + (g_pixel *.686) + (b_pixel * .168);
int outputBlue = (r_pixel * .272) + (g_pixel *.534) + (b_pixel * .131);
if(outputRed>255)outputRed=255;
if(outputGreen>255)outputGreen=255;
if(outputBlue>255)outputBlue=255;
data[i] = outputRed;
data[i+1] = outputGreen;
data[i+2] = outputBlue;
}
CGDataProviderRef provider2 = CGDataProviderCreateWithData(NULL, data, myDataLength, NULL);
int bitsPerComponent = 8;
int bitsPerPixel = 32;
int bytesPerRow = 4 * width;
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider2, NULL, NO, renderingIntent);
CGColorSpaceRelease(colorSpaceRef); // YOU CAN RELEASE THIS NOW
CGDataProviderRelease(provider2); // YOU CAN RELEASE THIS NOW
CFRelease(bitmapData);
UIImage *sepiaImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef); // YOU CAN RELEASE THIS NOW
return sepiaImage;
}
代碼被無恥地從這個SO線程複製,並且它談論施加棕褐色過濾器的UIImage代替NSImage中,但邏輯可以reused..Also this線程是最好的一個,當涉及到圖像處理..One書籤..
編輯:由於喬希卡斯威爾指出,核心圖像可以用來創建棕褐色圖像和某些圖像filtering..So更簡單的方法應該是使用核心圖片...閱讀他的回答如何做到這一點。這種方法也很好,尤其是在沒有coreImage框架的iPhone中。
有沒有必要手工完成。 CoreImage不僅僅是任務。 – 2011-04-27 08:00:52
正確Josh ..我不熟悉MAC開發。編輯我的答案..這是一個可惜的CoreImage是不存在的iPhone .. – Krishnabhadra 2011-04-27 08:25:21
現在的核心圖像是在iPhone上.. https://developer.apple.com/library/ ios /#documentation/graphicsimaging/Conceptual/CoreImaging/ci_intro/ci_intro.html – Krishnabhadra 2012-04-24 05:30:29
CoreImage有built-in filters,其中之一是CISepiaTone,您可以輕鬆地使用它來轉換圖像的顏色和其他方面。
您需要按照Processing an Image被佈局的步驟:
得到一個CIContext
對象。最簡單的方法可能是詢問當前的NSGraphicsContext
。
獲取圖像的CIImage表示形式。這不能直接從NSImage
創建;您可能需要使用CGImageForProposedRect:context:hints:
將NSImage
轉換爲CGImageRef
(您可以通過NULL
獲取proposedRect
參數)。
創建濾鏡對象,設置其值並獲取處理後的圖像。
最後,在您的CIContext
中繪製圖像。
也許[這個答案](http://stackoverflow.com/questions/1117211/how-would-i-tint-an-image-programatically-on-the-iphone/1118005#1118005)(雖然它是爲iPhone)將有所幫助。 – 2011-04-27 06:49:09