我正在使用此代码从bmp文件中获取像素。我已经阅读了前面几行的标题和调色板,所以我的FILE *指向像素数组的起始部分。 它读取第一行OK,返回1000这是它应该的,但是当它尝试读取第二行像素时,它返回0.Fread返回0,从BMP文件读取像素
这是接收FILE *,读取像素行和尝试将它们保存到bmp_type中。 fila_alineada是对齐的行大小,必须这样做是因为填充。
bool leer_pixels_8bpp( FILE *fbmp, bmp_t *imagen,
const uint32_t fila_alineada,
const bool btopdown){
int32_t i;
long x, y;
int32_t height, width, contador;
uint8_t *ptmp;
uint8_t bufferfila[fila_alineada];
height = imagen->infoheader.height;
width = imagen->infoheader.width;
contador = height;
i = btopdown ? 1 : -1;
y = btopdown ? 0 : (height - 1);
for (; contador--; y += i) /* row loop */
{
/* reading row */
if (fread(bufferfila, sizeof(uint8_t), fila_alineada, fbmp) != fila_alineada)
{ /* HERE is the PROBLEM, it reads ok once, but in the second loop it returns 0 */
fprintf(stderr, "Error reading pixels row.\n");
return false;
}
ptmp = bufferfila;
/* saving pixels into bmp_t */
for (x = 0L; x < width; x++)
{
imagen->pixels[y][x] = imagen->paleta.colores[ *ptmp++ ];
}
}
return true;
}
我已经与型动物BMP的尝试!问题出现在这里还是应该考虑查看整个代码? 希望有人可以帮助我,在此先感谢。
你确定它返回0,还是返回一个不同于''fila_alineada''的值?如果是这种情况,那么预计已经达到文件结尾... – Fred
if(fread)块之后你能注释掉代码吗?如果指针遭到破坏,fread可能会失败。 – Shash316
嘿家伙感谢您的帮助,我设法让它工作。 我使用的开关调用leer_1bpp/8bpp/24bpp(3种不同的功能),具体取决于每个像素的文件位。但是我错过了每个交换机上的'中断'。 Dot知道如何,但它现在工作。 我想检查调试它看到fread的值,但由于某种原因kdbg说在当前上下文中没有符号fread,在我把这些休息之前它显示了整个fread(.........)返回值。 无论如何,它正在阅读好,因为我已经把一些ftells看看它已经读了多少字节,一切都很好。 谢谢! – nitrnitr