Ayuda con programa para leer ficheros pcx
Publicado por carlos (95 intervenciones) el 21/04/2018 01:28:27
Buenas, pongo aqui una duda que tengo le doy vueltas pero no doy con la tela
Quiero leer del gif y del pcx informacion(resolución) pero me salen numeros raros y segun la cabecera deberian ser esos sitios pero es solo con el ancho
Alguien me ayuda
Cabeceras leidos:
https://es.wikipedia.org/wiki/PCX
http://www.onicos.com/staff/iz/formats/gif.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <stdio.h>
char nombre[60];
int main(){
int opcion;
char number[3];
FILE* fichero;
int compresion,ancho,alto,tamano,color,pcx;
char version[3];
char marca1,marca2,marca3;
printf("1º OPCION PARA BMP\n 2ºOPCION PARA GIF\n 3ºopcion para pcx");
gets(number);
sscanf(number,"%d",&opcion);
switch(opcion){
case 1:
puts("Comprobacion de imagen BMP\n");
printf("Seleccione archivo");
gets(nombre);
fichero= fopen(nombre,"rb");
if(fichero==NULL){
puts("no encontrado o no existe");
}
else{
marca1 =fgetc(fichero);
marca2 = fgetc(fichero);
if((marca1=='B')&&(marca2=='M'))
{
printf("Marca del fichero: %c%c\n",marca1,marca2);
fseek(fichero,18,SEEK_SET);
fread(&ancho,1,4,fichero);
printf("Ancho:%d\n",ancho);
fread(&alto,1,4,fichero);
printf("alto:%d\n",alto);
fseek(fichero,4,SEEK_CUR);
fread(&compresion,1,4,fichero);
printf("tamano :%d\n",compresion);
fseek(fichero,2,SEEK_SET);
fread(&tamano,1,4,fichero);
printf("su tamano es:%d\n",tamano);
fclose(fichero);
switch(compresion)
{
case 0: printf("Sin compresion"); break;
case 1: printf("Compresion RLE 8 bits"); break;
case 2: printf("Compresion RLE 4bits"); break;
case 3:puts("codificacion mascara de bits"); break;
}
}
else
printf("bmp no detectado");
}
break;
case 2:
printf("Ha elegido GIF\n");
printf("Introduzca el nombre.gif");
gets(nombre);
fichero= fopen(nombre,"rb");
if(fichero==NULL){
puts("no encontrado o no existe");
}
else{
marca1 =fgetc(fichero);
marca2 = fgetc(fichero);
marca3 = fgetc(fichero);
if((marca1=='G')&&(marca2=='I')&&(marca3=='F'))
{
printf("Marca del fichero: %c%c%c\n",marca1,marca2,marca3);
fseek(fichero,6,SEEK_SET);
fread(&ancho,1,2,fichero);
printf("Ancho:%d\n",ancho);
fseek(fichero,8,SEEK_SET);
fread(&alto,1,2,fichero);
printf("alto:%d\n",alto);
fseek(fichero,3,SEEK_SET);
fread(&version,1,3,fichero);
printf("version :%s\n",version);
fseek(fichero,10,SEEK_SET);
fread(&color,1,1,fichero);
printf("tiene:%d colores\n",color);
fclose(fichero);
}
else
printf("gif no detectado");
}
break;
case 3:
printf("HAS SELECCIONADO PCX\n");
int ancho_MIN,ancho_MAX,alto_MAX,alto_MIN,versions;
printf("Selecciona archivo\n");
gets(nombre);
fichero= fopen(nombre,"rb");
if(fichero==NULL){
puts("Te has equivocado o no existe");
}
else{
pcx =fgetc(fichero);
if(pcx==10)
printf("Correcto\n");
fseek(fichero,1,SEEK_SET);
fread(&versions,1,1,fichero);
if(versions==0){
printf("2.5\n");
}
else if(versions==2){
printf("2.8\n");
}
else if(versions==3){
printf("2.8+ paleta\n");
}
else if(versions==4){
printf("paitbrush\n");
}
else if(versions==5){
printf("3.0, superior\n");
}
else{
printf("DAFUQ\n");
}
fseek(fichero,4,SEEK_SET);
fread(&ancho_MIN,2,1,fichero);
printf("ancho minimo %d\n",ancho_MIN);
/////////
fseek(fichero,6,SEEK_SET);
fread(&alto_MIN,2,1,fichero);
printf("alto minimo %d\n",alto_MIN);
////////////////////
fseek(fichero,8,SEEK_SET);
fread(&ancho_MAX,2,1,fichero);
printf("ancho maximo %d\n",ancho_MAX);
////////////////
fseek(fichero,10,SEEK_SET);
fread(&alto_MAX,2,1,fichero);
printf("alto maximo %d\n",alto_MAX);
///////////////////
printf("\\\\\\\\\\\\\\\\\n");
printf("la anchura es: %d\n",ancho_MAX-ancho_MIN+1);
printf("la altura es: %d\n",alto_MAX-alto_MIN+1);
}
return 0;
}
}
Quiero leer del gif y del pcx informacion(resolución) pero me salen numeros raros y segun la cabecera deberian ser esos sitios pero es solo con el ancho
Alguien me ayuda
Cabeceras leidos:
https://es.wikipedia.org/wiki/PCX
http://www.onicos.com/staff/iz/formats/gif.html
Valora esta pregunta
0