我最后一次遇到问题是因为我以错误的方式交换了WIDTH
和HEIGHT
。在那之后,我被告知正确的方式,我修复它。但是..今天我注意到这个功能没有像预期的一些bmp图像那样工作。
我从具有所有图像字节数据的缓冲区渲染图像。 并且有渲染的功能:
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
}
答案 0 :(得分:0)
如果您的输入数据(BUFF缓冲区)正确则为
我和你分享我的观察结果,你可以进一步调试。
从(H(max),w(0))渲染到(H(0),w(max))。所以在一切都很好。图像很好但是当你的H(最大)减少输出图像变坏时。
简单来说,在顶部输出不好时,图像输出底部很好。看起来像素在顶部被踩到了。
我不明白setpen()是如何工作的。并且在处理之后你应该将该像素绘制在相同位置?
我认为随着H(最大)减少,您应该减少putpixel(W, H);
中的W值我认为这将消除倾斜的垂直线和不良图像问题。