2
我有像this png文件中的圖像。我加載它,並繪製drawRect方法。我可以在iPhone上更改Core Graphics或Quartz中的圖像顏色嗎?我想要有紅色的足球,而不是黑色。我可以做嗎?從核心圖形設置圖像顏色
我有像this png文件中的圖像。我加載它,並繪製drawRect方法。我可以在iPhone上更改Core Graphics或Quartz中的圖像顏色嗎?我想要有紅色的足球,而不是黑色。我可以做嗎?從核心圖形設置圖像顏色
您鏈接的圖像是帶有白色背景的圖像,這使得它有點竅門(儘管可能有一種方法可以使我找不到特定的顏色)。一種方法是獲取圖像的位圖表示並遍歷每個像素以更改顏色。
這些例子不會直接在iPhone上運行,但可能會成爲您想要做的事情的起點。
在第一個中,它只是遍歷像素並將所有非白色像素更改爲紅色。除非您想要更改的顏色始終爲黑色,否則可能需要爲顏色着色,而不是將其設置爲全紅色。
NSImage *image = [NSImage imageNamed:@"football.jpg"];
NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithData:[image TIFFRepresentation]];
NSSize imageSize = [bitmap size];
int samples = imageSize.height * [bitmap bytesPerRow];
unsigned char *bitmapData = [bitmap bitmapData];
int samplesPerPixel = [bitmap samplesPerPixel];
int startSample = [bitmap bitmapFormat] & NSAlphaFirstBitmapFormat ? 1 : 0;
for (int i = startSample; i < samples; i = i + samplesPerPixel) {
if (bitmapData[i] < 255.0 && bitmapData[i + 1] < 255.0 && bitmapData[i + 2] < 255.0) {
bitmapData[i] = 255.0;
}
}
NSImage *newImage = [[NSImage alloc] initWithSize:[bitmap size]];
[newImage addRepresentation:bitmap];
[bitmap release];
如果不具備源圖像控制它可能會更容易,如果你創建它們具有透明背景並將其保存爲PNG(或支持alpha通道其他格式)。至少使用AppKit,你可以做一個更簡單的解決方案。
NSImage *image = [NSImage imageNamed:@"football-transparent.png"];
NSSize size = [anImage size];
NSRect imageBounds = NSMakeRect(0, 0, size.width, size.height);
NSImage *newImage = [anImage copy];
[newImage lockFocus];
[[NSColor redColor] set];
NSRectFillUsingOperation(imageBounds, NSCompositeSourceAtop);
[newImage unlockFocus];
NSImage中技術不會幫助的iPhone,因爲NSImage中是應用程序套件的一部分,而iPhone已經UIKit的代替了AppKit。 – 2009-11-21 02:39:24
謝謝,png與透明bg這是個好主意。 – 2009-11-21 09:07:16
謝謝你指出彼得,我天真地希望UIImage和NSImage會更相似。我更新了文字,以反映這些例子不會直接在iPhone上運行,但可以作爲一個起點。 – hallski 2009-11-21 09:59:03