iPhone - 画像内のピクセルのブロックを別のピクセルのブロックに置き換える
-
25-09-2019 - |
質問
画像内のピクセルのブロックを別のピクセルのブロックに置き換えるときに、どのフレームワーク/メソッドを使用するかについて、誰かが私を正しい方向に向けることができるかどうかを知りたいと思います。
たとえば、完全に赤色に色付けされたシンプルな画像があるとしましょう。ピクセルブロックサイズは5x5ピクセルと考えています。3ブロックごとに3番目のブロックを青色のブロック(5x5ピクセル)に置き換えて、3つの赤いブロックごとに青いブロックが表示される赤い画像になります。
ピクセルの置換に関する情報を見つけましたが、ピクセルブロックを決定して処理する方法を理解しようとしています。アドバイスをいただければ幸いです。そしてどんなコードも夢精してしまうだろう。
解決
それは簡単な質問のように聞こえるかもしれないが、それはそのような何かをするのは非常に簡単ではありません。あなたはすべてが軌道に乗るために背景多くの情報を必要とします。また、画像がどこから来るかに依存し、あなたがそれをやりたい。
私は作業例を提供しますが、ここではいくつかのポインタですません。
画像を読み込む
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などの画像をまたはWRITE
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"];
これは一般的なアウトラインですが、私はいくつかのエラーをしたかもしれないが、これは、あなたが、少なくとも軌道に乗る必要があります。