コードでゼロからを作成NSImage
しています。まず、バイト配列を割り当てます。
pixels = malloc( (int)( size.width * size.height) * 4 * 8 * sizeof(unsigned char));
次に、左側の純粋な黒から右側の純粋な赤へのグラデーションを含むテスト画像を作成しようとします。
-(void)generateTestImage{
int idx =0;
for( int i=0; i<(int)(size.height); i++){// Rows
for (int j=0; j<(int) size.width; j++){// Columns
pixels[ idx + 0 ] = 255 * ((float) j / size.width); // r
pixels[ idx + 1 ] = 0; // g
pixels[ idx + 2 ] = 0; // b
pixels[ idx + 3 ] = 255;// a
idx += 4;
}
}
}
NSImage
最後に、バイト配列をusingに変換します。
-(void) convertPixelsToImage{
if (renderImage == NULL)
renderImage = [[NSImage alloc] initWithSize:size];
else{
NSArray *prevReps = [renderImage representations];
for (id r in prevReps)
[renderImage removeRepresentation:r];
}
NSLog(@"Creating bitmapImageReprsentation with size:%@", NSStringFromSize(size));
NSBitmapImageRep *imgRep =
[[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&pixels
pixelsWide:size.width
pixelsHigh:size.height
bitsPerSample:8
samplesPerPixel:sampPerPix
hasAlpha:true
isPlanar:false
colorSpaceName:NSDeviceRGBColorSpace
bitmapFormat:0
bytesPerRow:0
bitsPerPixel:0];
[renderImage addRepresentation:imgRep];
}
しかし、結果の画像は私が期待するものではありません。
これは、インデックス作成オフセットのズームイン ビューです。
グラデーション パターンが各行で左に 9 ピクセルずつシフトするため、I'm indexing がオフになっているように見えます。
さらに、画像の下部にある白い縞模様に混乱しています...
ここ数時間、さまざまなインデックス作成スキームを試してみましたが、いずれも問題は解決しませんでした。size
コード全体で同じものを使用していることを確認しました。さらに、結果の画像の寸法が正しいことを確認しましたが、コンテンツがオフになっています。
このコードに明らかな問題はありますか? これを修正する方法についてのアイデアはありますか?