C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ImageのStrideに関して

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■91355 / inTopicNo.1)  ImageのStrideに関して
  
□投稿者/ てじ (1回)-(2019/06/18(Tue) 13:00:49)

分類:[.NET 全般] 

Dim bmp1 As New Bitmap(filepath)

Dim bd1 As BitmapData = bmp1.LockBits(New Rectangle(0, 0, PixelX, PixelY), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb)

でImageを取り込んだ後、

Imageをバイト配列にコピーしたいのですが、
ほとんど画像ファイルは


bd1.Stride と    PixelX * 3
の値が一致します。

しかし、なぜかIrfanviewという画像ビューアで出力した画像ファイルの場合には
bd1.Stride の中に
PixelX * 3 よりも2大きな値が
格納されています。

この各Xラインごとに、余分に入っている2バイト分のデータは
何を意味しているのでしょうか?




引用返信 編集キー/
■91356 / inTopicNo.2)  Re[1]: ImageのStrideに関して
□投稿者/ Hongliang (825回)-(2019/06/18(Tue) 13:13:50)
パディング、埋め草とか言われるものです。

bmp形式は、1行のピクセルデータが4の倍数バイトでなければならない、という仕様があります。
例えば24bppであれば1ピクセル3バイトなので、横ピクセル数が
・12ピクセル => 横36バイトで4の倍数。パディングは無し
・10ピクセル => 横30バイトで4の倍数にならない。2バイトのパディングが必要
という感じです。

パディング部分の中身は意味を持ちません。大抵は0が格納されていると思いますが、0以外であっても無視されるだけです。
引用返信 編集キー/
■91358 / inTopicNo.3)  Re[2]: ImageのStrideに関して
□投稿者/ てじ (2回)-(2019/06/18(Tue) 14:05:58)
そういうことでしたか。
ありがとうございます。

ちなみに1行のデータが4の倍数バイトである必要があるという仕様は
なぜこのような仕様があるのでしょうか?

引用返信 編集キー/
■91362 / inTopicNo.4)  Re[3]: ImageのStrideに関して
□投稿者/ 774RR (708回)-(2019/06/18(Tue) 15:51:13)
32bit CPU では1回のメモリアクセスで32ビット(4バイト)が読めるわけだ。
なのでバッファが4の倍数アドレスに整合していると高速で
4の倍数アドレスでない場合はメモリアクセスペナルティがあって遅くなるから、
かな?


引用返信 編集キー/
■91363 / inTopicNo.5)  Re[4]: ImageのStrideに関して
□投稿者/ てじ (3回)-(2019/06/18(Tue) 16:17:14)
ありがとうございます。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ