2012-04-23 8 views
0

私は、RGBAを設定することによっていくつかのピクセルカラーを変更したいUIImageを持っています。私は変更する必要があるすべてのピクセルに対してCGPointsを持っています。 RGBA値を設定して色を変更するにはどうすればよいですか?カラーリングUII画像のCGPoint

UIImageピクセルの色を変更できない場合は、画像を含むUIImageViewで描画するのは問題ありませんが、何度もやっているので、かなりうまく実行する必要があります。

どうすればいいですか?

編集:私は私の問題の解決策を考え出した

。この色するCGPointレッド:

-(void)pixelate:(CGPoint)point 
{ 
    CGImageRef inImage = self.drawImage.image.CGImage; 
    CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage]; 
    if (cgctx == nil) { NSAssert(NO,@"Context shouldn't be nil!"); } 

    size_t w = CGImageGetWidth(inImage); 
    size_t h = CGImageGetHeight(inImage); 
    CGRect rect = {{0,0},{w,h}}; 

    CGContextDrawImage(cgctx, rect, inImage); 

    unsigned char* data = CGBitmapContextGetData(cgctx); 
    if (data != nil) 
    { 
     int offset = 4*((w*round(point.y))+round(point.x)); 
     data[offset] = 255; //alpha 
     data[offset+1] = 255; //red 
     data[offset+2] = 0; //green 
     data[offset+3] = 0; //blue 
    } 

    CGImageRef img = CGBitmapContextCreateImage(cgctx); 
    UIGraphicsEndImageContext(); 

    CGContextRelease(cgctx); 

    if (data) { free(data); } 

    self.drawImage.image = [UIImage imageWithCGImage:img]; 
} 
+2

描画パフォーマンスは、アクセスパターンに大きく依存します。ピクセルを一度に1つずつ設定することは、一般的にあまり効率的ではありません。あなたが何を高レベルでやっているのかを知るのに役立ちます。 –

+0

私はペイントプログラムのために "バケット"ツールを作成しようとしています。私はピクセル単位で色分けする再帰的な方法がそれをすると考えました。私はより良い解決策について聞いてうれしいです:) –

答えて

0

のに役立ちます。これはCGPointの赤色を表します。

-(void)pixelate:(CGPoint)point 
{ 
    CGImageRef inImage = self.drawImage.image.CGImage; 
    CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage]; 
    if (cgctx == nil) { NSAssert(NO,@"Context shouldn't be nil!"); } 

    size_t w = CGImageGetWidth(inImage); 
    size_t h = CGImageGetHeight(inImage); 
    CGRect rect = {{0,0},{w,h}}; 

    CGContextDrawImage(cgctx, rect, inImage); 

    unsigned char* data = CGBitmapContextGetData(cgctx); 
    if (data != nil) 
    { 
     int offset = 4*((w*round(point.y))+round(point.x)); 
     data[offset] = 255; //alpha 
     data[offset+1] = 255; //red 
     data[offset+2] = 0; //green 
     data[offset+3] = 0; //blue 
    } 

    CGImageRef img = CGBitmapContextCreateImage(cgctx); 
    UIGraphicsEndImageContext(); 

    CGContextRelease(cgctx); 

    if (data) { free(data); } 

    self.drawImage.image = [UIImage imageWithCGImage:img]; 
} 
0

まずImaport次のファイル.. >>>>編集....

​​

グラブ下にある画素を参照:

UInt8* data = (UInt8*)CGBitmapContextGetData(bitmContext); 

ピクセル操作:

const size_t bitmapByteCount = bytesPerRow * originalHeight; 
for (size_t i = 0; i < bitmapByteCount; i += 4) 
{ 
UInt8 a = data[i]; 
UInt8 r = data[i + 1]; 
UInt8 g = data[i + 2]; 
UInt8 b = data[i + 3]; 

data[i] = (UInt8)newAlpha 
data[i + 1] = (UInt8)newRed; 
data[i + 2] = (UInt8)newGreen; 
data[i + 3] = (UInt8)newBlue; 
} 

CGImageRef newImage = CGBitmapContextCreateImage(bitmContext); 

またはこのRefrenceを使用する10 ...

http://www.markj.net/iphone-uiimage-pixel-color/

希望、これは私の問題の解決策を考え出したyou..enjoy

+0

ありがとう。決して実際にあなたのソリューションを稼働させることはできませんでしたが、私は適切なソリューションを探しました。ありがとうございました。 –

+0

参照を参照してください...あなたを助けるかもしれません...あなたはViewControllerでをインポートする必要があります – Nit

関連する問題