4

デバイスのカメラから直接来る画像データを処理しようとしています。CGImage 構造を理解するために、バッファを使用して適切に機能しない画像を作成しています (Obj-C コード内で C コードを使用すべきではないことはわかっています。これは理解のためだけです)。コードは次のとおりです。

int *outBuf = malloc(sizeof(int) * width * height);
for (int i = 0; i < width * height;i ++)
{
     outBuf[i] = (((float)i) / ((float) width * height)) * 255.f;
}
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();

CGContextRef ctx = CGBitmapContextCreate(outBuf, width, height, 8, width * 4, colorSpace, kCGImageAlphaNone);

CGImageRef img = CGBitmapContextCreateImage(ctx);
CFRelease(ref);
CGContextRelease(ctx);
free(outBuf);

CGColorSpaceRelease(colorSpace);

[view.imgView setImage: [UIImage imageWithCGImage:img]];

CGImageRelease(img);

これにより、最初のピクセルから最後のピクセルまでのグラデーションが作成されるはずですが、奇妙なグラフィックになります。

生成画像

水平方向の間隔はどこから来ますか? (この問題を解決したいのですが、グラデーションを描画する他の可能性があることは承知しています)よろしくお願いします。

4

2 に答える 2

3

私は解決策を見つけました:

バッファをint*で初期化していました。すべてのintの長さは4バイトですが、グレースケール画像には1ピクセルあたり1バイトが必要です。バッファをchar*に変更し、CGBitmapContextCreateパラメータを変更すると、問題が修正されました。

CGBitmapContextCreate(outBuf, width, height, 8, width, colorSpace, kCGImageAlphaNone);

ここに画像の説明を入力してください

于 2013-02-01T08:46:36.260 に答える