Ранее я писал об этой проблеме .. но проблема не была решена. Итак, я могу честно сказать, что это самое странное, необъяснимое осложнение, которое я когда-либо испытывал в своем опыте программирования.Более сложное исследование действительно странного неожиданного результата.
Проблема в том, когда я рисую 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>=1; 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
Что я заметил в линии: for(H=HEIGHT-1; H>=1; H--)
является H>=1
В прямом ничьи (ВМР для визуализации) функция (которая работает на 100%, и использует тот же метод), то H>=0
Однако .. если я меняю H>=1
на H>=0
, он возвращает ошибку для переполнения буфера, возвратил функцией sgetc
.
Очень странное использование тройной ... –
@Edenia: Почему? Вы использовали 'if' в трех других тестах отладки и нет веской причины использовать эту нелепую тройку в первом. Кстати, вы должны использовать логический ИЛИ '||' вместо этого побитового ИЛИ '' 'в теге debug2. Не пишите неряшливый код, сложнее рассуждать и отлаживать. – Blastfurnace
OT: Использование 'H> 0' вместо' H> = 1' более понятно. – alk