線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2689
推到 Plurk!
推到 Facebook!

wingdi.h中的BITMAPFILEHEADER問題

尚未結案
LSonic
一般會員


發表:6
回覆:4
積分:2
註冊:2007-01-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-19 17:12:13 IP:59.120.xxx.xxx 訂閱
小弟在bcb中要做存bmp檔的動作,
但存出來的圖一直是全黑的,
小弟找了一陣子找到了原因所在,
BITMAPFILEHEADER中bfType被用了4bytes來存,
原來只存2bytes之又補上了2bytes為0的值,
導致BITMAPFILEHEADER的設定值向後位移了2bytes而出錯了,
小弟用sizeof(BITMAPFILEHEADER)看這個結構的長度竟然是16bytes,
可是
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
應該只有14bytes才對,
請問有經驗的大大這個要如何解決,
小弟測出sizeof(WORD)為2bytes,sizeof(DWORD)為4bytes,
麻煩了,感謝。

ps:小弟是用p4 1.8G 32位元的電腦。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-19 17:35:39 IP:122.124.xxx.xxx 訂閱
ChungLin.Net
中階會員


發表:2
回覆:33
積分:52
註冊:2006-07-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-20 09:16:22 IP:59.120.xxx.xxx 訂閱
這是一種 word alignment   問題,可以參考下列幾個網站

http://www.cs.umd.edu/class/spring2003/cmsc311/Notes/Data/aligned.html
http://en.wikipedia.org/wiki/Data_structure_alignment
http://gdfan1114.wordpress.com/2005/08/08/stucture-word-alignment/

可以在結構前加 上下面參數段,就可以解決~

#pragma pack(push,2)

typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;

#pragma pack(pop)

通常這種問題容易發生在自訂結構上,一般 .h 檔,
有的會自動在結構前幫你處理這些問題,所以使用
上不會有什麼問題,基本上一般編譯器都會存在這
樣的問題,使用的處理參數可能會不同,不過小弟
試過幾個編譯器,用這方式都可以正常.
------
無限的想像,無盡的延伸。
編輯記錄
ChungLin.Net 重新編輯於 2007-11-20 09:20:25, 註解 無‧
ChungLin.Net 重新編輯於 2007-11-20 09:27:30, 註解 無‧
ChungLin.Net 重新編輯於 2007-11-20 09:28:10, 註解 無‧
ChungLin.Net
中階會員


發表:2
回覆:33
積分:52
註冊:2006-07-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-20 09:45:43 IP:59.120.xxx.xxx 訂閱
補上幾個說明網址

http://www.cppblog.com/saga/archive/2006/05/26/7674.html

http://www.cppblog.com/saga/archive/2006/05/27/7723.html

http://ehome.hifly.to/showthread.php?threadid=150

之前有看過一篇使用程式處理這類問題,及使用參數處理
的比較文章,不過現在找不到了 兩者之間最大
差異就是程式的閱讀性,一個複雜,一個簡潔...
------
無限的想像,無盡的延伸。
系統時間:2024-05-05 11:51:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!