2011-01-05 12 views
1

画像内のピクセルブロックを置き換えるときに、誰かが正しいフレームワーク/方法について正しい方向を指し示すことができるかどうかを知りたいです。 別のピクセルのブロック。iPhone - イメージのピクセルブロックを別のピクセルブロックに置き換える

例えば、単純なイメージが完全に赤色に着色されているとし、ピクセルブロックサイズを5xピクセルと見なします。今度は3ブロックごとに青色のブロック(5x5ピクセル)で3番目のブロックを置き換えたいので、 赤いイメージとなり、青いブロックが3つの赤いブロックごとに現れます。

ピクセル置換に関する情報を見つけましたが、ピクセルブロックを特定して処理する方法を見つけようとしています。どんなアドバイスも高く評価されます。

+0

ピクセルはどこですか?処理中の画像ファイル、または画面上のライブビューの画像ファイルですか? –

+0

画面上のライブビュー中。 – Zigglzworth

答えて

1

簡単な質問のように聞こえるかもしれませんが、そのようなことをするのは簡単ではありません。あなたはすべてのことをするために多くの背景情報が必要です。また、画像がどこから来たのか、またその画像で何をしたいのかによって異なります。

私は作業例を提供しますが、ここではいくつかのポインタですません。画像の読み込み

UIImage *img = [UIImage imageNamed:@"myimage.png"]; 
// make sure you added myimage.png to your project 

を上に描画するために、独自の「グラフィックスコンテキストを作成」:

UIGraphicsBeginImageContext(CGSizeMake(480.0f, 320.0f)); // the size (width,height) 
CGContextRef ctx = UIGraphicsGetCurrentContext(); 

(現在の)コンテキストに画像をペイントする:

[img drawAtPoint:CGPointMake(0.0f, -480.0f)]; // (draws on current context) 
再び画像にビットマップコンテキストを変換

CGContextBeginPath(ctx); // start a path 
CGContextSetRGBStrokeColor(ctx,1,0,0,1); // red,green,blue,alpha with range 0-1 
CGContextMoveToPoint(ctx,50,0); // move to beginning of path at point (50,0) 
CGContextAddLineToPoint(ctx,100,100); // add a line to point (100,100) 
CGContextStrokePath(ctx); // do the drawing 

::他のいくつかの絵を行う

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); 

とし、その後は、次のいずれか

は内から、視聴者に画像を表示しますビューコントローラ:

[self.view addSubview:[[[UIImageView alloc] initWithImage:resultImage] autorelease]]; 

NSData *imagedata = UIImageJPEGRepresentation(img,0.8); // 0.8 = quality 
[imagedata writeToFile:filename atomically:NO]; 

やPNGなど:あなたはどちらか(あなたが住んでいる携帯電話の環境を与えられそう簡単ではありませんファイル名を、持っている必要があり、これらの最後のものについては

NSData *imagedata = UIImagePNGRepresentation(img); 
[imagedata writeToFile:filename atomically:NO]; 

やJPEGなどの画像を書き込みますに)。それはあなたが、多くのことを見つけるようなものを探しますれている別のトピックです:

NSArray *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *filename = [[path elementAtIndex:0] stringByAppendingPathComponent:@"myimage.png"]; 

これは一般的なアウトラインがあり、私はいくつかのエラーをしたかもしれないが、これは、あなたが、少なくとも軌道に乗る必要があります。

+0

詳しい読書:http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGContext/Reference/reference.htmlと他の多くのリンゴのドキュメント。 – mvds

+0

したがって、実際のピクセルブロックは次のように作成されます:UIGraphicsBeginImageContext(CGSizeMake(480.0f、320.0f)); CGContextRef ctx = UIGraphicsGetCurrentContext(); ? – Zigglzworth

+0

それは一つの方法です。もう一つは、 'CGContextRef ctx = CGBitmapContextCreate(baseAddress、width、height、8、bytesPerRow、colorSpace、kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); 'を使ってビットマップコンテキストを作り出すことです。メモリを割り当ててパラメータを決定する)が、メモリ内のピクセルレベルで実際に編集できるようにします。 'CGImageRef cgimage = CGBitmapContextCreateImage(ctx);'を実行すると 'cgimage'が得られ、これを使って' UIImage'を作成することができます。おかげさまで – mvds

関連する問題