Ich verwende diesen Code, um die Pixel aus einer bmp-Datei zu erhalten. Ich habe bereits die Kopfzeilen und die Palette in den vorherigen Zeilen gelesen, so dass meine FILE * auf den Anfang des Pixel-Arrays zeigt. Es liest die erste Zeile OK, gibt 1000 zurück, was es sollte, aber wenn es versucht, die zweite Zeile von Pixeln zu lesen, gibt es 0 zurück.
Dies ist die Funktion, die die DATEI * empfängt, die Pixelzeilen liest und versucht, sie in einem bmp_type zu speichern. fila_alineada ist die Größe der ausgerichteten Zeilen, dies musste wegen des Paddings geschehen.
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;
}
Ich habe es mit verschiedenen bmp's versucht! Das Problem ist hier oder sollte ich erwägen, den gesamten Code zu überprüfen? Hoffe jemand kann mir helfen, danke im Voraus.