Pascal/Turbo Pascal - operaciones simples con registros en pascal

 
Vista:
sin imagen de perfil

operaciones simples con registros en pascal

Publicado por Esteban (9 intervenciones) el 03/05/2016 18:32:59
Hola buenas.
Necesito ayuda con este ejercicio:


Una imagen en color verdadero (truecolor) almacena la información de color de cada píxel en
tres componentes, una para cada color básico según el modelo RGB, reservando un byte para
cada componente.
Define un tipo de datos registro tpColor que permita representar un color en truecolor.
Construye procedimientos o funciones que permitan: pedir los valores de las componentes al
usuario, mostrar los valores de las componentes al usuario y transformar un color a escala de
grises (asignando a cada componente RGB el promedio de sus componentes). El programa
principal será una simple comprobación de que los procedimientos o funciones son correctos,
pidiendo un color al usuario, transformándolo a escala de grises y mostrándolo por pantalla.

Gracias de antemano.
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

operaciones simples con registros en pascal

Publicado por ramon (2158 intervenciones) el 05/05/2016 11:02:23
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
149
150
151
152
153
154
155
156
157
158
159
{Esto puede ayudar}
 
program color_rgb;
  uses
     crt;
   const
      ext : string[3] = 'BMP';
   type
   camposcabecera = record
           idenbmp : array[0..1] of char;
           tamanobmp : longint;
           reserva1  : word;
           reserva2  : word;
           inicioimag : longint;
        end;
 
   campoinformacion = record
           tamanocabe : longint;
           tamanox    : longint;
           tamanoy    : longint;
           planoscolor : word;
           bitspixel   : word;
           compresion  : longint;
           tamaimagen  : longint;
           resolucionx : longint;
           resoluciony : longint;
           numerocolor : longint;
           coloresimpo : longint;
        end;
 
    colorreg = record
           Blue : Byte;
          Green : Byte;
            Red : Byte;
          reser : Integer;
        end;
 
    regcolor = record
          regazul  : byte;
          regverde : byte;
          regrojo  : byte;
          regreser : byte;
        end;
 
    paletabmp = array[0..255] of regcolor;
 
    colorrgb = record
          rojo : byte;
          verde : byte;
          azul : byte;
        end;
 
    paletargb = array[0..255] of colorrgb;
 
    var
      f : file;
      comp : string[4];
      infocabe : camposcabecera;
      infoinfo : campoinformacion;
      bmpcol   : paletabmp;
      imagcol  : paletargb;
      byt : array[1..1024] of byte;
      nombre : string;
      colores, resul1, resul2 : word;
      colorespixel : byte;
      valido : boolean;
 
 
  procedure cargacabecerayinformeycolor(archi : string);
  begin
     assign(f,archi);
  {$I-} reset(f,1); {$I+}
     if ioresult <> 0 then
     begin
       writeln('Archivo No Encontrado o Da¤ado pulse [Enter]');
       readln;
       halt(1);
     end
  else
  begin
     blockread(f,infocabe,sizeof(camposcabecera),resul1);
     if (upcase(infocabe.idenbmp[0]) = 'B') and
     (upcase(infocabe.idenbmp[1]) = 'M') then
     begin
     ext := 'BMP';
     blockread(f,infoinfo,sizeof(campoinformacion),resul2);
     if infoinfo.bitspixel <= 8 then
     begin
     blockread(f, bmpcol,infocabe.inicioimag - (resul1 + resul2),colores);
     valido := true;
     end
  else
     valido := false;
     end;
     close(f);
  end;
 end;
 
 procedure presentadatosbmp(nom : string);
 begin
     cargacabecerayinformeycolor(nom);
     if valido = true then
     begin
     if ext = 'BMP' then
     begin
     clrscr;
     writeln('***** Informacion Archivo *****');
     writeln('-------------------------------');
     writeln;
     writeln('Tipo De Archivo Es            = ',infocabe.idenbmp[0],
                               infocabe.idenbmp[1],'P');
     writeln('tama¤o cabecera y informacion = ',resul1 + resul2,' Bytes');
     writeln('Inicio Imagen En La Posicion  = ',infocabe.inicioimag,' Bytes');
     colorespixel := infoinfo.bitspixel;
     if infoinfo.bitspixel <= 8 then
     begin
     writeln('Tama¤o Paleta de color        = ',infocabe.inicioimag -
                                               (resul1 + resul2),' Bytes');
     writeln('Los Colores De La Paleta Son  = ',
               (infocabe.inicioimag - (resul1 + resul2)) div 4,' colores');
     end
  else
     writeln('Los Colores De La Paleta Son  = ',infoinfo.bitspixel);
     writeln('Los Planos De Color Son       = ',infoinfo.planoscolor);
     writeln('Tama¤o Del Archivo Total      = ',infocabe.tamanobmp,' Bytes');
     writeln('Tama¤o De La Imagen           = ',infoinfo.tamaimagen,' Bytes');
     writeln('Longitud  De X                = ',infoinfo.tamanox,' Pixeles');
     writeln('Longitud  De Y                = ',infoinfo.tamanoy,' Pixeles');
     case infoinfo.compresion of
   0 : comp := 'No';
   1 : comp := 'RLE8';
   2 : comp := 'RLE4';
    end;
     writeln('Compresion                    = ',comp);
     writeln('Resoluccion X                 = ',infoinfo. resolucionx);
     writeln('Resoluccion y                 = ',infoinfo. resoluciony);
     writeln('Numero Colores De La Imagen   = ',infoinfo.numerocolor);
     writeln('Numero De Colores Importantes = ',infoinfo.coloresimpo);
     writeln;
     writeln('***** Pulse [Enter] *****');
     readln;
     end;
   end
 else
    begin
       writeln('   Colores 24 bit ');
       readln;
    end;
 end;
 
 
 begin
    clrscr;
    writeln('   Entre Camino Y Nombre De Archivo BMP No Extension');
    writeln;
    write('  Entre Nombre : ');
    readln(nombre);
    presentadatosbmp(nombre + '.' + ext);
 end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

operaciones simples con registros en pascal

Publicado por Esteban (1 intervención) el 05/05/2016 17:29:59
Muchas gracias por responder a los dos ejercicios Ramón, pero el texto de salida de pascal debe ser el que ya esta especificado en el ejercicio, cosa que se me olvida adjuntar, aqui te adjunto la pagina web y como debe ser la salida por pascal.

https://moodle2.unizar.es/add/pluginfile.php/752180/course/section/158152/04_vectores_y_registros.pdf

Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

operaciones simples con registros en pascal

Publicado por ramon (2158 intervenciones) el 05/05/2016 18:33:28
No encuentro ningún dato referente a lo que pides no tengo acceso a documentos pasa lo como archivo aquí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar