0

私はバイトレベルでUIImagesを扱うのは初めてですが、誰かがこの問題に関するいくつかのガイドを教えてくれることを望んでいましたか?

私は最終的に、特定のパラメーター (位置、色など) に基づいて、バイトの RGBA 値を編集しようとしています。これまでにサンプル/チュートリアルに出くわしたことは知っていますが、何も見つからないようです。今。

基本的に、UIImage をそのバイトに分割し、それらを反復処理して、バイトの RGBA 値を個別に編集できるようにしたいと考えています。たぶん、ここのサンプルコードも大きな助けになるでしょう。

すでにさまざまなイメージ コンテキストで作業し、CG パワー ツールを使用してイメージを編集していますが、バイト レベルで作業できるようにしたいと考えています。

編集:

申し訳ありませんが、UIImage のバイトを直接編集できないことは理解しています。もっと明確に質問すべきだった。UIImage のバイトを取得し、それらのバイトを編集し、それらのバイトから新しい UIImage を作成する方法を尋ねるつもりでした。

@BradLarson が指摘したように、OpenGL はこれに適したオプションであり、@BradLarson によって作成された優れたライブラリがここにあります。指摘してくれてありがとう@CSmith!

4

2 に答える 2

2

@MartinRには正解があります。開始するためのコードを次に示します。

UIImage *image = あなたのイメージ;

CGImageRef imageRef = image.CGImage;
NSUInteger nWidth = CGImageGetWidth(imageRef);
NSUInteger nHeight = CGImageGetHeight(imageRef);
NSUInteger nBytesPerRow = CGImageGetBytesPerRow(imageRef);
NSUInteger nBitsPerPixel = CGImageGetBitsPerPixel(imageRef);
NSUInteger nBitsPerComponent = CGImageGetBitsPerComponent(imageRef);
NSUInteger nBytesPerPixel = nBitsPerPixel == 24 ? 3 : 4;

unsigned char *rawInput = malloc (nWidth * nHeight * nBytesPerPixel);

CGColorSpaceRef colorSpaceRGB = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(rawInput, nWidth, nHeight, nBitsPerComponent, nBytesPerRow, colorSpaceRGB, kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Big);
CGContextDrawImage (context, CGRectMake(0, 0, nWidth, nHeight), imageRef);          

// modify the pixels stored in the array of 4-byte pixels at rawInput
.
.
.

UIImage *imageNew = [[UIImage alloc] initWithCGImage:CGBitmapContextCreateImage(context)];

CGContextRelease (context);
free (rawInput);
于 2012-08-23T19:55:10.667 に答える
1

のバイトに直接アクセスするUIImageことはできず、直接変更することもできません。

イメージを に描画CGBitmapContextし、ビットマップ内のピクセルを変更してから、ビットマップ コンテキストから新しいイメージを作成する必要があります。

于 2012-08-23T19:44:41.343 に答える