作者ProTrader (沒有暱稱)
看板Windows
標題[問題] win7小畫家存成24位元BMP 像素寬高問題
時間Wed Feb 28 11:04:25 2018
用小畫家開啟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
===================================================================
這個值必須是偶數,因為圖形裝置介面(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