Pascal/Turbo Pascal - ayuda con programiita en pascal

 
Vista:

ayuda con programiita en pascal

Publicado por denisse (1 intervención) el 30/10/2008 18:53:41
necesito q m ayuden a realizar unos programitas en pascal
la verdad nose como hacer para utilizar el modo grafico para hacer una flor, un cohete, y un cerdito!!!
porfavor si tienen algun codigo q m pueda servir para hacer estos dibujos en pascal, creanme se los agradeceria mucho! !!!! . . porfavoooor ayudenme!! :)
att. denisse
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

RE:ayuda con programiita en pascal

Publicado por Martin (2 intervenciones) el 01/11/2008 01:41:56
hola Denisse, te envio este codigo fuente en turbo pascal 7.0 que sirve para ver archivos .bmp en 256 colores. Podés crear en paint la imagen con las figuras que vos necesitas y en la opcion guardar como elegis el formato bmp en 256 colores.
En el codigo, en la linea 15 se asigna el nombre del archivo que creaste(reemplazá 'fondito.bmp') por el tuyo. espero que te sirva. besos. suerte!!!

{Muestra una imagen BMP a 256 colores.
Se espera Turbo Pascal 7.0 para compilar
y el manejador SVGA256.BGI en el mismo directorio al ejecutar
Autor: Diego F. Romero
E-mail: [email protected]
Original: Marzo 1997
Ultima modif: Julio 2001
Agregado comentarios}

{$N+}
uses Graph,crt,dos;

const
archivo='fondito.bmp'; {Nombre Fisico del Archivo de Imagen}

type

DacPalette256 = array[0..255] of array[0..2] of Byte; {Matriz de la memoria de la placa de Video VGA}

tcolores=(rojo,verde,azul); {Colores}

tfileheader=record {Encabezado del BMP}
byte1:char;
byte2:char;
fsize:longint;
res1:array [1..2] of word;
dataoffset:longint;
end;

tinfoheader=record {Informaci¢n del Encabezado del BMP}
infosize:longint;
ancho:longint;
alto:longint;
planos:word;
resolucion:word;
compresion:longint;
imagesize:longint;
anchopixelpormetro:single;
altopixelpormetro:single;
coloresusados:longint;
coloresimportantes:longint;
end;

tcolordef=record {Registro del mapa de Colores}
azul:byte;
verde:byte;
rojo:byte;
res2:byte;
end;

tpalette=array[0..255] of tcolordef; {Mapa de Colores para 256 Colores}

tbmp=record {Registro del Encabezado del BMP}
fileheader:tfileheader;
infoheader:tinfoheader;
paleta:tpalette;
end;

var
GraphMode, GraphDriver, GrErr : integer; {Necesarios para establecer el modo grafico}
X,Y : integer; {Contadores}
f:file of tbmp; {Nombre logico del BMP}
bmp:tbmp; {Buffer de lectura del encabezado del BMP}
i:integer; {Indice de la paleta de colores}
data:file of byte; {Nombre logico del area de datos del BMP}
buf:byte; {Buffer del area de datos}
pal256:dacpalette256; {La paleta de colores en la placa VGA}

(* Setvgapalette sets the entire 256 color palette *)
{Este procedimiento pone la paleta completa de 256 colores de una sola vez}
(* PalBuf contains RGB values for all 256 colors *)
{PalBuf contiene los valores para Rojo, Verde y Azul de los 256 colores}
(* R,G,B values range from 0 to 63 *)
{El rango para Rojo, Verde y Azul va de 0 a 63 (6 bits c/u)}

procedure SetVGAPalette256(PalBuf : DacPalette256);
var
Reg : Registers;

begin
reg.ax := $1012;
reg.bx := 0;
reg.cx := 256;
reg.es := Seg(PalBuf);
reg.dx := Ofs(PalBuf);
intr($10,reg);
end;

(* Posibles valores para DetectVGA256 (Ancho x Alto x Cantidad de Colores)
0=320x200x256
1=640x400x256
2=640x480x256
3=800x600x256
4=1024x768x256
5=640x350x256
6=1280x1024x256
*)
{$F+} {Debe ser una llamada FAR (lejana)}
function DetectVGA256 : Integer;
var Vid : Integer;

begin
DetectVGA256 := 3;
end;
{$F-}

procedure modografico; {Pone el modo grafico}
begin
GraphDriver := InstallUserDriver('SVGA256',@DetectVGA256); {Instalar SVGA265.BGI}
GraphDriver := Detect; {Detecta si hay una placa VGA}
InitGraph(GraphDriver,GraphMode,''); {Inicia el modo grafico}
GrErr := GraphResult; { Preservar n£mero de error devuelto }
if GrErr AND $80 = $80 then
GrErr := GrErr OR $ff00;
if GrErr <> grOK then { hubo error? }
begin
Writeln('Graphics error: ', GraphErrorMsg(GrErr)); {Muestra mensage de error (ingl‚s)}
Halt(1); {Parar todo}
end;
end;

begin
clrscr; {Borra pantalla modo texto}
assign(f,archivo); {Asigna nombre fisico a logico}
reset(f); {Abre el archivo para lectura (debe existir!)}
read(f,bmp); {Lee los 3 encabezados de una sola vez}
close(f); {Cierra el archivo}

with bmp do {Con los encabezados...}
begin {... mostrar los datos mas relevantes}
writeln('BM?=',fileheader.byte1,fileheader.byte2);
writeln('Tama¤o=',fileheader.fsize);
writeln('Data Offset=',fileheader.dataoffset);
writeln('-------------------------------------');
writeln('Tama¤o Infoheader=',infoheader.infosize);
writeln('Ancho=',infoheader.ancho,' pixels');
writeln('Alto=',infoheader.alto,' pixels');
writeln('Planos=',infoheader.planos);
writeln('Resolucion=',infoheader.resolucion,' bits');
write('Compresion=',infoheader.compresion);
case infoheader.compresion of
0:writeln(' Sin Compresion');
1:writeln(' RLE 8 bits?');
2:writeln(' RLE 4 bits?');
end;
writeln('Tama¤o de la Imagen=',infoheader.imagesize);
writeln('Ancho en Pxl/m=',infoheader.anchopixelpormetro:5:3);
writeln('Alto en Pxl/m=',infoheader.altopixelpormetro:5:3);
writeln('Colores usados=',infoheader.coloresusados);
writeln('Colores Importantes=',infoheader.coloresimportantes);
end;
if readkey=#27 then halt(1); {Si se presiona ESC parar todo}
{Saltar encabezados}
assign(data,archivo); {Asigno nombre fisico a logico del area de datos}
reset(data); {Abrir archivo para lectura (debe existir!)}
seek(data,bmp.fileheader.dataoffset); {Saltar los encabezados y parar al inicio del area de datos}
{Fin saltar encabezado}

modografico; {Voy a modo grafico 800x600x256}

{Cargar paleta de colores}
for i:=0 to 255 do
with bmp.paleta[i] do {Con el mapa de colores...}
begin {Calcular colores (de 8 bits a 6 bits}
pal256[i,0]:=rojo shr 2; {Desplazar 2 bits a la derecha}
pal256[i,1]:=verde shr 2;
pal256[i,2]:=azul shr 2;
end;

SetVGAPalette256(pal256); {Cargar la placa VGA con la paleta de colores almacenada en el BMP}

y:=bmp.infoheader.alto-1; {resto uno al alto}
x:=1; {empiezo en la linea de pixels 1}
repeat {repetir (1)...}
repeat {repetir (2)...}
read(data,buf); {leo un byte o color del pixel actual}
putpixel(x,y,buf); {pongo el pixel en pantalla}
inc(x); {sumo la posicion del pixel en uno}
until (x>bmp.infoheader.ancho) or keypressed; {(2)... hasta que no haya mas pixels en la linea o se presione una tecla}
x:=1; {vuelvo al inicio de la linea}
dec(y); {decremento la linea}
until (y = 0) or keypressed; {(1)...hasta que no haya mas lineas o se presione una tecla}
close(data); {Cerrar archivo de datos}
readkey; {Parar hasta que se presione cualquier tecla}
closegraph; {Salir del modo grafico}
end.

{Por los dos ciclos repeat se puede deducir que en el BMP la imagen se almacena
invertida, es decir la parte alta de la imagen est  al final del archivo
y la parte baja al principio del area de datos}
{AVISO: el BMP debe ser como maximo de 800x600 y debe estar en formato
BMP Windows RGB, no funciona con formato RLE o compatible OS/2!}
{SVGA256.BGI por Jordan Hargrafix 1994 (thanx!)}
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

RE:ayuda con programiita en pascal

Publicado por oriol (1 intervención) el 03/06/2009 23:41:45
hola, esta aplicacion con un copy/paste me produce varios errores, soy novato en programacion y estoy haciendo un programa de final de curso necesitaria poner un bmp en el fondo, gracias
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