3

コードでゼロからを作成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コード全体で同じものを使用していることを確認しました。さらに、結果の画像の寸法が正しいことを確認しましたが、コンテンツがオフになっています。

このコードに明らかな問題はありますか? これを修正する方法についてのアイデアはありますか?

4

1 に答える 1

1

行はいくつかの境界に切り上げられることを覚えておいてください - 私は 16 ピクセルを考えています。

于 2012-11-04T01:21:07.320 に答える