[問題] bmp檔讀取與寫入

看板C_and_CPP (C/C++)作者時間16年前 (2009/07/01 22:33), 編輯推噓2(208)
留言10則, 7人參與, 最新討論串1/1
 有個小問題想請教各位前輩,  今天花了點時間寫了個小程式,想用它來批次合成bmp圖檔,  被合成的圖檔有其特性,兩張圖是同尺寸同深度,  b.bmp有固定底色,而我希望把b.bmp的這個底色濾掉,  其餘前景的部份則貼到a.bmp上去;  目前的做法是分別用fread讀入兩張圖檔後,  再以for迴圈一次讀入一個pixel的RGB值,判別是否和底色相同,  是的話擋掉,不是的話就貼到a.bmp上面去;  初步測試的結果雖然大致上OK,但卻出現了一個小狀況:  假設b.bmp中有一段是  301A5B 0D3057 FF0000 FF0000 ....  px X px X+1 px X+2 px X+3  FF0000的部份是藍色底色,以這段資料來看的話,  應該是301A5B和0D3057要被寫到a.bmp去而FF0000不要,  但打開完成後的a.bmp卻會變成像下面這樣:  301A5B 0D30FF 0000FF 0000FF ....  不知道是在讀取還是寫入時出了錯,中間少掉了1byte,  結果後面全部跟著錯掉,藍底色被判別成紅色全部寫到a.bmp去,  問題是這情況並非100%發生,有的圖一切正常,有的則會出現這問題,  而我實在找不到那1byte到底為什麼會人間蒸發...囧  不曉得有沒有哪位碰過類似的情況呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.65.41

07/01 22:57, , 1F
沒開fopen參數沒加b?
07/01 22:57, 1F

07/01 23:06, , 2F
處理BMP要考慮padding
07/01 23:06, 2F

07/01 23:26, , 3F
推樓上說的, BMP要注意padding問題:)
07/01 23:26, 3F

07/01 23:55, , 4F
讀檔沒加b,寫入有...明天再試試看讀檔也加b
07/01 23:55, 4F

07/01 23:57, , 5F
padding的話,雖然我真的沒考慮到,但ok和ng的圖都同大小
07/01 23:57, 5F

07/01 23:57, , 6F
也都符合4x的倍數耶... @.@"
07/01 23:57, 6F

07/02 00:02, , 7F
read/write 都要加 b 才可以喔!
07/02 00:02, 7F

07/02 00:03, , 8F
讀檔沒加B你讀的出來真的是運氣 @@"
07/02 00:03, 8F

07/02 00:05, , 9F
說不定不是用Windows,加不加b都沒差
07/02 00:05, 9F

07/02 00:09, , 10F
你 code 沒出來沒辦法解bug, 找找記憶體配置的地方
07/02 00:09, 10F
 早上看了一下,fread a.bmp有加b,b.bmp則沒有,  兩個都加之後就沒問題了...待會也處理一下padding的機制好了,  謝謝各位前輩的指教 <(_ _)> ※ 編輯: cometstar 來自: 61.219.70.229 (07/02 10:29)
文章代碼(AID): #1AItEYkj (C_and_CPP)
文章代碼(AID): #1AItEYkj (C_and_CPP)