Foros de daboweb
MULTIMEDIA, Video digital, Grabación, Diseño gráfico, Diseño web, Programación => Webmasters - Diseño Web - Programación - Diseño gráfico => Mensaje iniciado por: Arandacrack en 29 de Mayo de 2005, 12:40:15 pm
-
Hola, tengo que entregar una practica este jueves y tengo un pequeño problema con la citada función.
for(i=cabecera.Ancho;i>0;i--){
printf("\n");
for(j=0;j<cabecera.Alto;j++){
printf("i %d",i);
fseek(fde,(cabecera.Ancho-i)*sizeof(char),SEEK_CUR);
fread(&c, cabecera.Ancho*sizeof(char), 1, fde);
fwrite(&c,sizeof(char), 1, fds);
if (c<0) l=c+256;
else l=c;
printf("O %d \n",l);
}
system("pause");
}
Esta es la parte del codigo que me da problemas. Se trata de un programa de tratamiento de imagenes, y debo de cambiar la posicion de fseek, q una vez ha leido cabecera.Alto valores(Alto de la imagen), no pasa a la siguiente columna y queda estancado en el ultimo valor. y yo creo que es por un error de fseek, pero no se cual.
Alguien que con estos poquitos datos que he proporcionado sepa algo?
Gracias
-
Me parece que estás empleando mal la función fseek. Suponiendo que abriste bien el archivo (espero que no lo hayas abierto para apendizarlo), vamos a ver que es lo que haces con los dos ciclos. En el primer ciclo varias a la variable i desde cabecera.Alto hasta 0. ¿Qué sucede cuando i tiene el valor de cabecera.Alto?, pues que en el segundo ciclo, el cual varias desde j = 0 hasta j = cabecera.Ancho, la función fseek toma estos valores
fseek(fde,(cabecera.Ancho-cabecera.Ancho)*sizeof(char),SEEK_CUR);
o sea, sustituyendo
fseek(fde,0,SEEK_CUR);
o sea que nunca mueves al apuntador del archivo, pero el que si lo mueve es la instrucción que pones enseguida de esta, que es
fread(&c, cabecera.Ancho*sizeof(char), 1, fde);
esta instrucción provoca que el apuntador se mueva tantos bytes como tenga cabecera.Ancho. Bueno, podríamos seguir analizando que haces en cada ciclo, pero espero que con esto poco te des cuenta donde hay que cambiar el código para corregirlo.
-
perdón, cometí un error al decir que i variaba de cabecera.Alto hasta 0 y j desde 0 hasta cabecera.Ancho siendo que es alrevés, sin embargo la argumentación se mantiene.