wingdi.h中的BITMAPFILEHEADER問題 |
尚未結案
|
LSonic
一般會員 發表:6 回覆:4 積分:2 註冊:2007-01-03 發送簡訊給我 |
小弟在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 發送簡訊給我 |
|
ChungLin.Net
中階會員 發表:2 回覆:33 積分:52 註冊:2006-07-26 發送簡訊給我 |
這是一種 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 發送簡訊給我 |
補上幾個說明網址
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 之前有看過一篇使用程式處理這類問題,及使用參數處理 的比較文章,不過現在找不到了 兩者之間最大 差異就是程式的閱讀性,一個複雜,一個簡潔...
------
無限的想像,無盡的延伸。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |