看板 Windows 關於我們 聯絡資訊
用小畫家開啟BMP檔以後只要拖曳方格就能改變像素寬高 再另存新檔就能取得更改寬高後的BMP 我改成 50*50 MyBMP.bmWidth => 50 MyBMP.bmHeight => 50 問題是 MyBMP.bmWidthBytes => 152 ???? 應該是150吧 我嘗試的結果 48 40 都很順利 144 120 其他的數值 45 46 50 都有問題 136(135) 138(136) 150(152) 想問問這樣情況要怎麼解決?? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.239.185.89 ※ 文章網址: https://www.ptt.cc/bbs/Windows/M.1519787067.A.6CB.html
kobe8112: https://goo.gl/Tgb6DF 02/28 11:50
=================================================================== 這個值必須是偶數,因為圖形裝置介面(GDI) 會假設點陣圖的位元值組成的 整數 (2 個位元組) 值的陣列。 亦即, bmWidthBytes 1 8 必須是大於或等於時取得值的 16 的下一個多重 bmWidth 成員乘以 bmBitsPixel 成員。 ==================================================================== 這串是在說 bmWidthBytes不一定剛好是Width的3倍嗎?? 因為我是要取出RGB值作影像處理 可以確定剛好3倍的情況沒問題 請問如果是 50*50 152的情況下 有辦法嗎?? 還是說這是BMP天生的限制無法突破?? ※ 編輯: ProTrader (36.239.185.89), 02/28/2018 12:05:23
kobe8112: 只是要取RGB出來運算,為什麼要管這個?你是用什麼語言? 02/28 14:30
喔 抱歉沒說完整 語言是VBA "GetBitmapBits"取得原圖檔RGB值 我要把原圖切割(取RGB值很簡單) 然後用SetBitmapBits把RGB值分別存入小圖中 再用SavePicture儲存 可是我不會修改圖檔的寬高 現在是用小畫家把縮圖 得到小圖BMP檔 LoadPicture讀入原圖 與 小圖 處理後再再用SavePicture儲存小圖得到我要的BMP圖檔 我的問題是不會用VBA修改原圖檔寬高 所以才用小畫家縮圖 我已確認剛好3倍的情況我的想法可行 想問問不是剛好3倍要怎麼克服 ※ 編輯: ProTrader (36.239.185.89), 02/28/2018 15:52:39
jaw109: bmpWidthBytes代表每一行像素點使用了多少bytes,如果你需 03/01 10:20
jaw109: 要存取第Y行的第X個像素,你必須移動到bmpWidthBytes * Y 03/01 10:20
jaw109: + X 03/01 10:20
全彩BMP 寬*高 = 50*50 RGB(50*50 + 50*50 + 50 *50) = 150*50 bmpWidthBytes = 152 如果要直接存取RGB 我不能理解150<=>152 如何對應 QQ ※ 編輯: ProTrader (218.164.60.56), 03/02/2018 00:28:45
jaw109: 4的倍數就對了 03/03 22:38