Duda Bmp en C

Iniciado por Hendrix60, 3 Marzo 2012, 05:16 AM

0 Miembros y 2 Visitantes están viendo este tema.

Hendrix60

Hola, soy nuevo en esto de la programación y estoy intentando hacer un programa que convierta una imagen bmp de 1 bit, a los colores rojo y azul, aqui abajo pongo el código de lo que llevo, segun yo ya debería estar funcionando pero no copia a la imagen destino, ojala me pudieran orientar. (y disculpen tantos comentarios :D es que lo he intentado de muchas formas

#include<stdio.h>
#include<fcntl.h>
#include<math.h>

main(int argc,char *argv[])
{
int da,y,da2,data,x,biBitCount;
//double biBitCount;
char z[2],buffer[256];
unsigned char r,g,b,Q,gris;
unsigned char paleta[4];

da2=open(argv[2], O_RDONLY|O_TRUNC|O_CREAT,0666);
da=open(argv[1],O_RDONLY);



y=read(da,&z,2);
printf("el tipo de archivo es: %s\n",z);
write(da2,&z,y);printf("y: %i\n",y);

y=read(da,&data,4); printf("El tamanio del archivo es: %i\n",data);
write(da2,&data,y);/*data=0*/;printf("y: %i\n",y);

y=read(da,&data,2);printf("EL bfReserved1 es: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,2);printf("EL bfReserved2 es: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("El bfOffbits: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("EL bfSize es: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("EL ancho de la imagen es: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("EL largo de la imagen es: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,2);printf("EL Numero de planos es: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,2);printf("EL biBitCount numero de bytes por pixel es: %i\n",data);
biBitCount=data;
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("EL tipo de compresion es: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("la resolucion horizontal en pixeles por metro: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("La resolucion vertical en pixeles por metro: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("El tamaño de la imagen bytes: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("EL Numero de colores indexado es: %i\n",data);
write(da2,&data,y);//data=0;

y=read(da,&data,4);printf("EL Numero de colores importantes: %i\n",data);
write(da2,&data,y);//data=0;

if (biBitCount==1)
{
printf(" r\t    g\t     b\t     Q\n");
    for(x=0;x<pow(2,biBitCount);x++)
    {
    read(da,paleta,4);
    printf("%i\t    %i\t    %i\t    %i\n",paleta[0],paleta[1],paleta[2],paleta[3]);
   
   
/*read (da,&r,1);
    read(da,&g,1);
    read(da,&b,1);
    read(da,&Q,1);
        printf("%c,%c,%c,%c",r,g,b,Q);*/
if (x==0)
{paleta[0]=255;write (da2,&paleta,1);
paleta[1]=0;write (da2,&paleta,1);
paleta[2]=0;write (da2,&paleta,1);
paleta[3]=0;write (da2,&paleta,1);}
if(x==1)
{paleta[0]=0;write(da2,&paleta,1);
paleta[1]=0;write(da2,&paleta,1);
paleta[2]=255;write(da2,&paleta,1);
paleta[3]=0;write(da2,&paleta,1);}

  } 
}
/*while((y=read(da,buffer,sizeof(buffer)))!=0)
    {
    write(da2,buffer,y);
    }*/
for (x=0;x<3718;x++)
{
  y=read(da,&data,1);
write(da2,&data,y);
}



/* if (biBitCount==4&biBitCount==8)
{
gris=(0.299)*r+(0.587)g+(0.114)*b);

}*/
     

}


desde ya, muchas gracias

Hendrix60

el archivo destino, no tenia permiso de escritura, =/, ya copia ahora solo falta que copie la paleta y que de ahi siga copiando el resto de la imagen, por que el ciclo for no lo hacia correctamente,, alguna idea? :D