MacにおけるBMPファイル操作

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
羽流布

MacにおけるBMPファイル操作

#1

投稿記事 by 羽流布 » 16年前

この度、講義でプレゼンをすることになり、僕はバイリニア補間をプログラムで実現することにしました。

とりあえず、BMPファイルを操作するプログラムを書いたのですが(都合上、添付ファイルは削除)、
Winでは正常に動作するものの、プレゼンで使用するMacではヘッダ情報の書き込み時に問題が発生するようです。
MacでBMPを開くためのソフトを使用して開こうとしたら、ファイルが壊れていると怒られました(;^^

バイナリエディタで開いてみると、こんな感じでした。
【Winの場合】
42 4D 36 0C 00 00 00 00 00 00 36 00 00 00 28 00
00 00 20 00 00 00 20 00 00 00 01 00 18 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00

【Macの場合】
4D 42 00 00 0C 36 00 00 00 00 00 00 00 36 00 00
00 28 00 00 00 20 00 00 00 20 00 01 00 18 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00
どうしましょう……。
Macのことはよく解りませんorz

macでコンパイルに使用したソフトは、Xcodeというものです。

Mist

Re:MacにおけるBMPファイル操作

#2

投稿記事 by Mist » 16年前

Win
> 36 0C 00 00

Mac
> 00 00 0C 36

エンディアンの問題ですね。
以下のHPを参照してください。
http://www.ertl.jp/~takayuki/readings/info/no05.html
http://son-son.sakura.ne.jp/programming/tips.html

多バイトデータの出力時に、上位バイトと下位バイトの入れ替えをすると正しくなります。
以下、私がよく使う変換用のマクロです。
#define SWAP2(x)            ((((x) << 8) & 0xff00) | (((x) >> 8) & 0x00ff))
#define SWAP4(x)            ((((x) >> 24) & 0x000000ff) | (((x) >> 8)  & 0x0000ff00) | (((x) << 8)  & 0x00ff0000) | (((x) << 24) & 0xff000000))

羽流布

Re:MacにおけるBMPファイル操作

#3

投稿記事 by 羽流布 » 16年前

迅速な回答ありがとうございます^^

エンディアンの違いだったのですね……。
参考HPのほうは勉強になりました。

これで何とかなりそうです。
変換用マクロもありがとうございますm(_ _)m
活用させていただきます。

閉鎖

“C言語何でも質問掲示板” へ戻る