Título: Problemas con la creación de archivos en C
Publicado por: k-mm en 5 Julio 2017, 01:16 am
Hola buenas, resulta que soy nueva en esto de la programación y estoy haciendo un código en donde ingreso una imagen con formato bmp y debería crearse una imagen auxiliar (una copia de la imagen original). Funciona excelente en linux, pero no me funciona en Windows (lo probé en CodeBlocks y en Dev-C++). ¿A qué se debe esto? AYUDA POR FAVOR !
Título: Re: Problemas con la creación de archivos en C
Publicado por: engel lex en 5 Julio 2017, 01:21 am
sin ver el código, puede ser cualquier cosa...
Título: Re: Problemas con la creación de archivos en C
Publicado por: k-mm en 5 Julio 2017, 01:47 am
Perdón por lo desordenado, pero estoy esperando que funcione para hacerlo con funciones y dejarlo mas corto. En la opción 2 se supone que tendría que copiar la imagen. (Hasta el momento solo funciona con imágenes BMP de 24 bits). #include <stdio.h> #include <stdlib.h> typedef struct{ char marc1; char marc2; int tamArchivo; short int reservado1; short int reservado2; int finalDatos; }FILEHEADER; typedef struct{ unsigned int tamCabecera; unsigned int ancho; unsigned int alto; short int numPlanos; short int tamPunto; unsigned int compresion; unsigned int tamImagen; unsigned int resoHoriz; unsigned int resoVertic; unsigned int tamTablaColor; unsigned int contColorImport; }INFOHEADER; typedef struct { unsigned char azul; unsigned char rojo; unsigned char verde; }PIXEL; int main () { int opcion; printf ("\t\tESTEGANOGRAFIA\n\n"); printf ("1. Calcular capacidad total de imagen.\n"); printf ("2. Esteganografiar.\n"); printf("\n\nIngrese una opcion: "); FILEHEADER fh; INFOHEADER ih; PIXEL pix; FILE *fp; FILE *fp2; char archivo[30]; int i,j; if(opcion==1){ printf("\nIngrese nombre del archivo: "); fp = fopen(archivo ,"rb"); while(fp==NULL){ printf("\nEl archivo no ha sido encontrado.\n"); printf("\nIngrese nombre del archivo: "); fp = fopen(archivo ,"rb"); } unsigned char marc1 = fread(&fh. marc1, 1, sizeof(FILEHEADER ), fp ); unsigned char marc2 = fread(&fh. marc2, 1, sizeof(FILEHEADER ), fp ); unsigned int tamCabecera = fread(&ih. tamCabecera, 4, 1, fp ); unsigned int ancho = fread(&ih. ancho, 4, 1, fp ); unsigned int alto = fread(&ih. alto, 4, 1, fp ); short int tamPunto = fread(&ih. tamPunto, 2, 1, fp ); if(fh.marc1=='B' && fh.marc2=='M' && ih.tamCabecera==40){ if(ih.tamPunto==24){ //INICIO CALCULO CAPACIDAD unsigned long long totBytes=(ih.ancho*ih.alto)*3; printf("Capacidad total: %llu bytes\n", totBytes ); } if(ih.tamPunto==16){ unsigned long long totBytes=(ih.ancho*ih.alto)*2; printf("Capacidad total: %llu bytes\n", totBytes ); } if(ih.tamPunto==32){ int totBytes=(ih.ancho*ih.alto); printf("Capacidad total: %d bytes\n", totBytes )*4; } //FIN CALCULO CAPACIDAD } else{ while(fh.marc1!='B' || fh.marc2!='M' || ih.tamCabecera!=40){ printf ("\nImagen no valida.\n"); printf("\nIngrese nombre del archivo: "); fp = fopen(archivo ,"rb"); while(fp==NULL){ printf("\nEl archivo no ha sido encontrado.\n"); printf("\nIngrese nombre del archivo: "); fp = fopen(archivo ,"rb"); } unsigned char marc1 = fread(&fh. marc1, 1, sizeof(FILEHEADER ), fp ); unsigned char marc2 = fread(&fh. marc2, 1, sizeof(FILEHEADER ), fp ); unsigned int tamCabecera = fread(&ih. tamCabecera, 4, 1, fp ); unsigned int ancho = fread(&ih. ancho, 4, 1, fp ); unsigned int alto = fread(&ih. alto, 4, 1, fp ); short int tamPunto = fread(&ih. tamPunto, 2, 1, fp ); } if(ih.tamPunto==24){ //INICIO CALCULO CAPACIDAD unsigned long long totBytes=(ih.ancho*ih.alto)*3; printf("Capacidad total: %llu bytes\n", totBytes ); } if(ih.tamPunto==16){ unsigned long long totBytes=(ih.ancho*ih.alto)*2; printf("Capacidad total: %llu bytes\n", totBytes ); } if(ih.tamPunto==32){ int totBytes=(ih.ancho*ih.alto)*4; printf("Capacidad total: %d bytes\n", totBytes ); } //FIN CALCULO CAPACIDAD } } if(opcion==2){ printf("\nIngrese nombre del archivo: "); fp = fopen(archivo , "rb"); fp2 = fopen("aux.bmp", "w+"); while(fp==NULL){ printf("\nEl archivo no ha sido encontrado.\n"); printf("\nIngrese nombre del archivo: "); fp = fopen(archivo ,"rb"); fp2 = fopen("aux.bmp", "w+"); } fread(&fh , sizeof(unsigned char), 14, fp ); fread(&ih ,sizeof(unsigned char), 40,fp ); unsigned int valor[ih.ancho][ih.alto]; fwrite(&fh , sizeof(unsigned char), 14, fp2 ); //TENER FWRITE AQUI HACE QUE CREE AUX AUNQUE SEA UN ARCHIVO INVALIDO O NO EXISTA fseek(fp2 , 14, SEEK_SET ); fwrite(&ih , sizeof(unsigned int), 40, fp2 ); if(fh.marc1=='B' && fh.marc2=='M' && ih.tamCabecera==40){ if(ih.tamPunto==24){ unsigned long long totBytes=(ih.ancho*ih.alto)*3; for(i=0; i<ih.alto; i++){ for(j=0; j<ih.ancho; j++){ fseek(fp , (fh. finalDatos+3*(j +ih. ancho*i )), SEEK_SET ); fread(&pix , sizeof(char), sizeof(PIXEL ), fp ); fseek(fp2 , (fh. finalDatos+3*(j +ih. ancho*i )), SEEK_SET ); fwrite(&pix , sizeof(char), sizeof(PIXEL ), fp2 ); } } } if(ih.tamPunto==16){ unsigned long long totBytes=(ih.ancho*ih.alto)*2; } if(ih.tamPunto==32){ int totBytes=(ih.ancho*ih.alto)*4; } //FIN CALCULO CAPACIDAD } else{ while(fh.marc1!='B' || fh.marc2!='M' || ih.tamCabecera!=40){ printf ("\nImagen no valida.\n"); printf("\nIngrese nombre del archivo: "); fp = fopen(archivo ,"rb"); fp2 = fopen("aux.bmp", "w+"); while(fp==NULL){ printf("\nEl archivo no ha sido encontrado.\n"); printf("\nIngrese nombre del archivo: "); fp = fopen(archivo ,"rb"); fp2 = fopen("aux.bmp", "w+"); } fread(&fh , sizeof(unsigned char), 14, fp ); fread(&ih ,sizeof(unsigned char), 40,fp ); unsigned int valor[ih.ancho][ih.alto]; fwrite(&fh , sizeof(unsigned char), 14, fp2 ); fseek(fp2 , 14, SEEK_SET ); fwrite(&ih , sizeof(unsigned int), 40, fp2 ); if(ih.tamPunto==24){ unsigned long long totBytes=(ih.ancho*ih.alto)*3; for(i=0; i<ih.ancho; i++){ for(j=0; j<ih.alto; j++){ fseek(fp , (fh. finalDatos+3*(j +ih. ancho*i )), SEEK_SET ); fread(&pix , sizeof(char), sizeof(PIXEL ), fp ); fseek(fp2 , (fh. finalDatos+3*(j +ih. ancho*i )), SEEK_SET ); fwrite(&pix , sizeof(char), sizeof(PIXEL ), fp2 ); } } } if(ih.tamPunto==16){ unsigned long long totBytes=(ih.ancho*ih.alto)*2; } if(ih.tamPunto==32){ int totBytes=(ih.ancho*ih.alto)*4; } } } } return 0; }
· Los códigos deben ir en etiquetas GeSHi >aquí las reglas del foro (http://foro.elhacker.net/reglas.htm) -Engel Lex
|