1

画像内のピクセルのブロックを別のピクセルのブロックに置き換えるときに使用するフレームワーク/方法に関して、誰かが私を正しい方向に向けることができるかどうか知りたいです。

たとえば、完全に赤に着色された単純な画像があり、ピクセルブロックサイズを5x5ピクセルと見なしているとします。ここで、3ブロックごとに、3番目のブロックを青色のブロック(5x5ピクセル)に置き換えて、3つの赤いブロックごとに青いブロックが表示される赤い画像を作成します。

ピクセル置換に関する情報を見つけましたが、ピクセルブロックを決定して処理する方法を理解しようとしています。どんなアドバイスもいただければ幸いです。そしてどんなコードも夢精です。

4

1 に答える 1

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]];

または、画像をjpegとして記述します。

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

またはPNGとして:

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

それらの最後のものについては、ファイル名が必要になりますが、これもそれほど簡単ではありません(あなたが住んでいる電話環境を考えると)。それはあなたがたくさん見つけるもう一つのトピックです、次のようなものを検索してください:

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

これは一般的な概要です。私はいくつかの誤りを犯した可能性がありますが、これで少なくともうまくいくはずです。

于 2011-01-05T21:21:46.820 に答える