gpt4 book ai didi

c - 从缓冲区绘制 bmp 时出现意外结果

转载 作者:行者123 更新时间:2023-11-30 17:30:05 25 4
gpt4 key购买 nike

上次我遇到这个问题是因为我以错误的方式交换了WIDTHHEIGHT。之后我被告知正确的方法并修复了它。然而..今天我注意到该功能在某些 bmp 图像上无法正常工作。

Comparement:

我正在从包含所有图像字节数据的缓冲区渲染图像。还有渲染的函数:

void bmp_bdraw (BYTE* BUFF)
{

word WIDTH, HEIGHT, W, H; // word - unsigned short
BYTE R, G, B; // BYTE - unsigned char

(!BUFF || !BUFF[COUNT-1]) ? // debug1
(error("Error in function 'bmp_bdraw'. There is no data to read from.")) : ;

WIDTH = BUFF[18] + BUFF[19] * 256;
HEIGHT = BUFF[22] + BUFF[23] * 256;
ofs = 54;

if(BUFF[0] != 'B' | BUFF[1] != 'M') error // debug2
("Warning: Data identifier error in function 'bmp_bdraw' occurred. Invalid BMP file loaded.");

for(H=HEIGHT-1; H>=0; H--)
{
for(W=0; W<WIDTH; W++)
{
B = sgetc(BUFF); // fgetc-like function but from buff
G = sgetc(BUFF);
R = sgetc(BUFF);

setpen(R, G, B, 0, 1); // sets the color, transparancy and size of the pen
putpixel(W, H); // and puts the pixel at the right location
}
}

if(W != WIDTH || H > 1) // debug3
error("Error in function 'bmp_bdraw'. Rendering failed. The file might be damaged.");

if(real_fps < 11)
error("Too low fps rate."); // debug4
}

最佳答案

如果你在这里的输入数据(BUFF缓冲区)是正确的那么
我与您分享我的观察结果,以便您可以进一步调试。

您正在从 (H(max),w(0)) 渲染到 (H(0),w(max))。所以一开始一切都是好的。图像很好,但是当你的 H(max) 减小时,输出图像就会变差。

简单来说,图像底部的输出很好,而顶部的输出很差。看起来像素在顶部被拉伤了。

我不明白 setpen() 是如何工作的。处理后你应该在相同的位置绘制该像素吗?

我认为随着 H(max) 的减少,您应该减少 putpixel(W, H); 中的 W 值;我认为这将消除倾斜的垂直线和不良图像问题。

关于c - 从缓冲区绘制 bmp 时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com