0

行数 479、列数 638 のカラー画像があります。この画像を BMP ファイルとして保存しようとしています。このために、私は最初に を使用しCreateDIBSection、次に を使用してCreateDIBitmapいます。の場合、を関数CreateDIBSectionに渡す必要があります。BITMAPINFOHEADERここには と の 2 つのパラメータがbiWidthありbiSizeImageます。関数によって返されるメモリは DWORD に揃える必要が638あり、の倍数ではないため4、幅として 638 または 640 を渡す必要がありますか? 幅として 638 を渡すと仮定すると、関数によって返されるメモリは 638 x 479 または 640 x 479 になりますか? 私の観察では、640 x 479 です。この場合、ファイルを BMP として保存すると、各行の最後に幅 2 ピクセルの黒い線が表示されます。どうすればこれを回避できますか? 私はそれが重要であるかのように通過biCompressionしています。BI_RGB

4

1 に答える 1

1

実際の幅をビットマップ幅として渡す必要があります。ただし、スキャンライン/ストライドは dword に揃える必要があります。これは、ストライドとメモリ バッファー サイズを計算するときに、各行に最大 3 バイトを追加することを意味します。

データの実際の幅は、ピクセルあたりのビット数に依存することに注意してください。32 ビット ピクセルを使用している場合は、既に正しく配置されています。

于 2013-02-01T15:14:50.793 に答える