質問編集履歴

2

BITMAPFILEHEADER構造体のアラインメントに原因があることがわかり、修正。

2019/06/02 11:21

投稿

maic
maic

スコア8

test CHANGED
File without changes
test CHANGED
@@ -30,9 +30,13 @@
30
30
 
31
31
  ```
32
32
 
33
- ですが、構造体のメモリアラインメントのせいで`BITMAPINFOHEADER構造体`のサイズがメンバーサイズの合算値にならないため、期待したサイズよりも多く読み込んでいるようです。
33
+ ですが、構造体のメモリアラインメントのせいで~~`BITMAPINFOHEADER構造体`~~ `BITMAPFILEHEADER構造体`のサイズがメンバーサイズの合算値にならないため、期待したサイズよりも多く読み込んでいるようです。
34
34
 
35
35
  この方法では読み込みだけでなく書き込みでも同様にパディング分ゴミが入ってしまいます。
36
+
37
+
38
+
39
+ 追記:実際にはBITMAPFILEHEADERが14byteから16byteにアラインメントされてしまったため、BITMAPINFOHEADERの読み込みがずれてしまっていたようです。
36
40
 
37
41
 
38
42
 

1

ファイルI/O一般での疑問として質問するため、抜けていた記述を加筆。

2019/06/02 11:21

投稿

maic
maic

スコア8

test CHANGED
File without changes
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  今回はC言語で書いていますが、モダンで大規模なOSSのC++プロジェクトだと前提を置いたとして
46
46
 
47
- ファイルの読み書きを行うときには多少冗長ながらも、最初に述べた「ヘッダーのメンバ毎に変数を定義して読み込む方法」が理想的(or よく使われる書き方)なのでしょうか?
47
+ BITMAPに限らず、ファイルの読み書きを行うときには多少冗長ながらも、最初に述べた「ヘッダーのメンバ毎に変数を定義して読み込む方法」が理想的(or よく使われる書き方)なのでしょうか?
48
48
 
49
49
 
50
50