[問題] win7小畫家存成24位元BMP 像素寬高問題

看板Windows作者 (沒有暱稱)時間7年前 (2018/02/28 11:04), 7年前編輯推噓2(204)
留言6則, 2人參與, 7年前最新討論串1/1
用小畫家開啟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

02/28 11:50, 7年前 , 1F
02/28 11:50, 1F
=================================================================== 這個值必須是偶數,因為圖形裝置介面(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

02/28 14:30, 7年前 , 2F
只是要取RGB出來運算,為什麼要管這個?你是用什麼語言?
02/28 14:30, 2F
喔 抱歉沒說完整 語言是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

03/01 10:20, 7年前 , 3F
bmpWidthBytes代表每一行像素點使用了多少bytes,如果你需
03/01 10:20, 3F

03/01 10:20, 7年前 , 4F
要存取第Y行的第X個像素,你必須移動到bmpWidthBytes * Y
03/01 10:20, 4F

03/01 10:20, 7年前 , 5F
+ X
03/01 10:20, 5F
全彩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

03/03 22:38, 7年前 , 6F
4的倍數就對了
03/03 22:38, 6F
文章代碼(AID): #1QbXmxRB (Windows)