[問題] 讀取BMP這個部分一個小問題

看板C_and_CPP作者 (Aesthetic)時間15年前 (2010/08/13 00:40), 編輯推噓5(5025)
留言30則, 8人參與, 最新討論串1/1
是這樣的 最近在做一個可以讀取BMP檔案還有可以旋轉一些特效的程式 是用DevC++的IDE,我還是個很弱的新手 不多說,我的小問題在這邊........... 先給上我HeaderFile裡面這段宣告 typedef struct __BITMAPFILEHEADER { unsigned short bfType; unsigned int bfSize; unsigned short bfReserved1; unsigned short bfReserved2; unsigned int bfOffBits; } BITMAPFILEHEADER; 我是不知道這個跟我的問題有沒有關係 我的問題是我請教別人之後他開檔這邊這樣寫了 BITMAPFILEHEADER fileHeader; input.read(reinterpret_cast<char*>(&fileHeader), sizeof(BITMAPFILEHEADER)); 恩恩...我看不懂為什麼要這樣....就是這個reintepret_cast的地方 我有去Google過, 說好像是強制型別轉換,但是在這邊我還是不知道為什麼要這麼做.. 也不太清楚裡面的<char*>的涵義。 如果說一定要這樣寫才能完善沒有問題的話... 我的另一個在HeaderFile裡面有宣告 typedef struct RGBQ { char rgbBlue; char rgbGreen; char rgbRed; char rgbReserved; } RGBQuad; 如果要讀取調色盤的資料的話 我要先宣告一個 char RGB[4][256] (是256吧我猜..16*16=256有四個值...) 然後.... 然後我就不知道怎麼讀取了 = = ... 抱歉,見笑了,可能是很蠢的問題吧 = . = 麻煩各位高手在噗嗤一笑之餘 幫幫我吧~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.112.93

08/13 00:41, , 1F
有看看板上的reinterpret_cast了..不過還是不太懂阿..
08/13 00:41, 1F

08/13 00:42, , 2F
主要是想說 可不可以避免不要用到這個...
08/13 00:42, 2F

08/13 00:47, , 3F
(char*)(&fileHeader)
08/13 00:47, 3F

08/13 01:03, , 4F
請教 用 static_cast不可以嗎??一直不懂static cast和reinter
08/13 01:03, 4F

08/13 01:03, , 5F
的關鍵差異在哪耶......模糊
08/13 01:03, 5F

08/13 01:28, , 6F
喔喔剛爬個版 了解了 就用c style轉型吧
08/13 01:28, 6F

08/13 03:53, , 7F
然後就該讀影像的Pixel了阿
08/13 03:53, 7F

08/13 06:39, , 8F
我記得C++的reinterpret_cast和static cast~~
08/13 06:39, 8F

08/13 06:44, , 9F
有種註記的意義,這樣debug時一看到用了危險的reinterpret
08/13 06:44, 9F

08/13 06:44, , 10F
就可以更仔細的看一下是不是這邊出錯~~
08/13 06:44, 10F

08/13 07:59, , 11F
那請問一下..RGBquad的部分就是寫個count 4次的迴圈
08/13 07:59, 11F

08/13 08:01, , 12F
然後每次都讀取一次入RGB[4][256]的陣列嗎? ?
08/13 08:01, 12F

08/13 08:02, , 13F
是不是沒有讀就直接開始讀image資料會有錯誤呢?
08/13 08:02, 13F

08/13 08:06, , 14F
主要我這邊的另個小問題是 這段code
08/13 08:06, 14F

08/13 08:06, , 16F
我找不到裡面有讀取RGB的地方....
08/13 08:06, 16F

08/13 09:09, , 17F
//Allocating memory for image data array之後
08/13 09:09, 17F

08/13 09:11, , 18F
//Closing the BMP file.之前 是將pixel讀出來的地方
08/13 09:11, 18F

08/13 09:13, , 19F
image是指向pixel的指標 可以當成二維陣列用
08/13 09:13, 19F

08/13 10:07, , 20F
有點好奇為什麼你是用16x16來算出256覺得是這個值:)
08/13 10:07, 20F

08/13 10:07, , 21F
以8 bit調色盤來說, 是因為用來index的range有2的8次方
08/13 10:07, 21F

08/13 10:08, , 22F
種變化, 所以是2的8次方共256欄table, 16x16我不太理解
08/13 10:08, 22F

08/13 10:08, , 23F
理由是什麼@_@" 另外, 我忘了有沒有地方確認調色盤的大
08/13 10:08, 23F

08/13 10:09, , 24F
小還是固定256種, 印象中古早的色盤也有僅16色的XD
08/13 10:09, 24F

08/13 10:10, , 25F
另外, header這樣寫要小心compiler有沒有啟用struct
08/13 10:10, 25F

08/13 10:10, , 26F
data alignement, 有的話對齊多少, 不然有些環境可以
08/13 10:10, 26F

08/13 10:11, , 27F
header sizeof出來, 結恐怕不是14 bytes XD 能
08/13 10:11, 27F

08/13 16:57, , 28F
Vic大大 有有有 我有用 pragma pack
08/13 16:57, 28F

08/13 17:40, , 29F
你那份code是沒有讀調色盤的吧
08/13 17:40, 29F

08/13 19:31, , 30F
調色盤那部分他是問"如果"要讀的話~
08/13 19:31, 30F
文章代碼(AID): #1CP2G1H8 (C_and_CPP)