2013-02-01 27 views
0

我正在開發一個在圖層上繪製的應用程序。這是一個示例代碼,顯示了我繪製的方式。石英芯:改變整個圖層的像素顏色

UIImageView * currentLayer = // getting the right layer... 
UIGraphicsBeginImageContext(currentLayer.frame.size); 
[currentLayer.image drawInRect:currentLayer.bounds]; 
// Painting... 
UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
currentLayer.image = img; 
UIGraphicsEndImageContext(); 

所以我有一個圖像(1024×768),它有兩種像素:
- 繪者(同色每個)
- 透明的人

什麼是改變的最佳途徑整個圖層的顏色不透明像素,知道所有像素都具有相同的顏色?

我是否必須逐一重繪每個不透明的像素?

編輯:

大衛Rönnqvist建議,通過與我的層來掩蔽填充圖像tryed。

,我想改變顏色層是self.image

// Creating image full of color 
CGRect imRect = self.bounds; 
UIGraphicsBeginImageContext(imRect.size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetFillColorWithColor(context, [color CGColor]); 
CGContextFillRect(context, imRect); 
UIImage * fill = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

// masking the image 
CGImageRef maskRef = [self.image CGImage]; 
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
            CGImageGetHeight(maskRef), 
            CGImageGetBitsPerComponent(maskRef), 
            CGImageGetBitsPerPixel(maskRef), 
            CGImageGetBytesPerRow(maskRef), 
            CGImageGetDataProvider(maskRef), NULL, false); 

CGImageRef masked = CGImageCreateWithMask([fill CGImage], mask); 
self.image = [UIImage imageWithCGImage:masked]; 

差不多!它掩蓋了我的圖層的確切對照:只有alpha像素被繪製...

任何想法?

+0

你想改變每個像素或僅僅是不透明的像素? –

+0

只是不透明的! – Martin

+0

您可以將具有圖形的圖層作爲蒙版用於完全用新顏色填充的新圖層。 alpha值將被用於讓r,g,b值進入新層。你需要檢查性能思想。我不確定當你有很多被掩蓋的圖層時它會如何縮放。此外,用於遮罩的圖層不再是視圖層次結構的一部分。 –

回答

1

事實上這很簡單。

UIImage有一個方法:drawInRect它只繪製不透明的像素。

下面的代碼(從UIImageView調用):

CGRect rect = self.bounds; 
UIGraphicsBeginImageContext(rect.size); 
[self.image drawInRect:rect]; 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetBlendMode(context, kCGBlendModeSourceIn); 
CGContextSetFillColorWithColor(context, newColor.CGColor); 
CGContextFillRect(context, rect); 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

非常感謝iPhone - How do you color an image?