作者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://webptt.com/cn.aspx?n=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
2F:→ 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
3F:推 jaw109: bmpWidthBytes代表每一行像素点使用了多少bytes,如果你需 03/01 10:20
4F:→ jaw109: 要存取第Y行的第X个像素,你必须移动到bmpWidthBytes * Y 03/01 10:20
5F:→ 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
6F:推 jaw109: 4的倍数就对了 03/03 22:38