[问题] bmp 缩放后颜色改变问题

楼主: benny5566 (Ynneb)   2023-10-08 01:51:06
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10 VS code
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Gcc
问题(Question):
C语言 bmp档缩小后颜色改变问题
说明(Supplement):
我现在要将一张24位元的bmp档使用bilinear缩小1.5倍,一开始失败,且连档案都无法开启
,后来才知道bmp档每一个row的bytes数量必须是4的倍数。
看了一些教学后,我将缩小后的图片每一个row后面补0,以满足4的倍数,也成功将图片开
启了,且缩小尺寸是对的,但现在问题是我图片的整张颜色变得不一样了,一直找不出问题
,想请问各位大大知道问题在哪吗?谢谢!
程式码: http://ideone.com/JFqQZu
楼主: benny5566 (Ynneb)   2023-10-08 02:01:00
补充:其他张没有padding问题的图片颜色都正常
作者: LPH66 (-6.2598534e+18f)   2023-10-08 03:58:00
[公告] 发文附上程式码较易获得协助
作者: stupid0319 (征女友)   2023-10-08 21:36:00
187行很怪,应该是每一个小图像数的forloop而不是原图像数的forloop看错了,拍谢,颜色改变应该是计算问题
楼主: benny5566 (Ynneb)   2023-10-08 22:02:00
大大的意思是bilinear会有问题吗?
作者: stupid0319 (征女友)   2023-10-08 22:26:00
yrgb怎么会相加相乗坐标系的值,看不太懂d1,d2,d3,d4随i,j变化而变化?逻辑不是很理解问了一下ChatGPT,原PO好像没有错XD
作者: LPH66 (-6.2598534e+18f)   2023-10-09 04:52:00
我还没细看, 不过我将一个小画家画的 24x24 24 位元 bmp喂入这支程式, 它会对每个输入图产生两个 270 byte 大小的档案 -- 这一点显然不对, 因为原图有 1782 byte 大小而你的程式至少其中一部份是将其放大由小画家存的 bmp 档大小, 16x16 24 位元应有 822 byte36x36 24 位元应有 3942 byte这里我甚至还没去看你的缩放计算 (因为根本看不到结果)这里就给一个建议: 输入的 bmp 格式很容易用小画家画一个所以你就随便存一个去测试你的程式相关的东西到底对不对
作者: wulouise (在线上!=在电脑前)   2023-10-09 10:08:00
我怎记得windows gdiplus支援放大缩小,确定要重造轮子?
楼主: benny5566 (Ynneb)   2023-10-09 13:38:00
了解,谢谢前辈回答,我再试看看
作者: yvb   2023-10-10 09:00:00
小画家做的图会填image_size,所以原PO程式会走到有问题的76行但有的程式不填image_size,推测原PO的原图没有padding问题.如果原图就有padding问题,那读档时pixels对应就错乱了...然后145行在i为0时就先填了padding?呃, 我上面的第一句是要回LPH66大的.然后原PO的原图很可能是未填image_size(值为0).

Links booklink

Contact Us: admin [ a t ] ucptt.com