13

画像を MOV ファイルに変換していて、興味深いことがありました。色成分ごとのビット数、ピクセルごとのビット数、行ごとのバイト数を記録しました。これが私のコードです:

NSLog(@"Image width: %d, Height: %d", CGImageGetWidth(image), CGImageGetHeight(image));
NSLog(@"BPC: %d \ BPP: %d \ ByPR: %d", CGImageGetBitsPerComponent(image), CGImageGetBitsPerPixel(image), CGImageGetBytesPerRow(image));

ここに私の出力があります:

画像の幅: 300、高さ: 300 (すべてが予想どおり) BPC: 8 (1 色あたり 8 ビット...これまでのところ非常に良好) BPP: 32 (32 = 4 コンポーネント ARGB * 1 色あたり 8 ビット...わかりました) ByPR :1216 (行あたり 300 ピクセル * ピクセルあたり 4 バイト = 行あたり 1200 バイト)

行ごとに 1200 ではなく 1216 バイトが記録されるのはなぜですか? ところで、これはただのまぐれではありません。これらのバッファ サイズの数値に基づいてビデオを作成すると、機能します。行あたり 1200 バイトで作成すると、めちゃくちゃなエイリアシング効果が得られます。

考え?!

4

1 に答える 1

23

システムは、イメージが 1 行あたり 64 バイトの倍数であることを好みます。これは、おそらくキャッシュ ラインの配置によるパフォーマンスの向上のためです。1200 は 64 の倍数ではありませんが、1216 は倍数です。

于 2013-04-10T19:59:55.913 に答える