[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{
>Does anyone know of any way to display a single screen of Graphics on EGA
>640x350 mode *quickly*. It can be VGA as well; I'm just trying to display t
>screen *fast* from a disk File. I know, I could have used the GIF or PCX
This would restore a .PIC format File, uncompressed, For 320x200x256
mode $13, With a prepended 256*3 Byte palette entry header. It should
work- I just wrote this code yesterday to display some unknown .PIC
Files.
}
Program dispic;
Const
maxpicsize = 320*200;
Type
pbuf = ^abuf;
abuf=Array[1..maxPICSIZE] of Byte;
palbuf = ^apalbuf;
apalbuf=Array[1..256*3] of Byte;
headerbuf=^aheaderbuf;
aheaderbuf=Array[1..32] of Byte;
Var
f : File;
i : Byte;
buf : pbuf;
pal : palbuf;
header : headerbuf;
hsize,vsize,picsize,headersize,palettesize:Word;
_r,_g,_b,
cr : Byte;
nr,ctr : Word;
fs,overflow : LongInt;
Filename : String;
Procedure setcolreg(p:Pointer;start,num:Word);
begin
Asm
mov ah,10h
mov al,12h { seg block of color Registers }
mov bx,start
mov cx,num
mov dx,Word ptr p+2 { get high Word of p (seg) }
mov es,dx
mov dx,Word ptr p { get low Word of p (ofs) }
int $10
end;
end;
Procedure stop(s:String);
begin
Writeln(s);
halt;
end;
begin
Writeln('DISPIC v0.01á (c)1993 Brian Pape/Jagaer Technologies'+#10#13);
Writeln(maxavail,' Bytes available.');
if paramcount < 1 then
stop('no .PIC File specified.');
Filename := paramstr(1);
assign(f,Filename);
{$I-} reset(f,1); {$I+}
if ioresult <> 0 then
begin
Writeln('File '+Filename+' not found.');
halt;
end;
new(header);
Writeln(maxavail,' Bytes available after header allocate.');
palettesize := sizeof(pal^);
headersize := sizeof(header^);
if Filesize(f) < headersize+palettesize then stop('invalid .pic File.');
blockread(f,header^,headersize,nr);
if nr < sizeof(headersize) then
stop('insufficient header information.')
else
Writeln('header: ',nr,' Bytes read.');
hsize := (Word(header^[4]) shl 8) or header^[3];
vsize := (Word(header^[6]) shl 8) or header^[5];
picsize := (Word(header^[14]) shl 8) or header^[13];
Writeln('picsize: ',picsize,' Bytes.');
if picsize > maxpicsize then
begin
picsize := maxpicsize;
Writeln('picture size read overflow. resetting to maxpicsize.');
end;
dispose(header);
new(pal);
Writeln(maxavail,' Bytes available after palette allocate.');
blockread(f,pal^,palettesize,nr);
if nr < palettesize then
stop('insufficient palette information.')
else
Writeln('palette: ',nr,' Bytes read.');
new(buf);
Writeln(maxavail,' Bytes available after buffer allocate.');
{$I-} blockread(f,buf^,sizeof(buf^),nr); {$I+}
if ioresult <> 0 then;
Writeln('picture: ',nr,' Bytes read.');
Writeln('hsize: ',hsize);
Writeln('vsize: ',vsize);
Writeln('press enter.');
readln;
close(f);
Asm
mov ah,00
mov al,$13
int $10
end;
move(buf^,ptr($a000,0)^,nr);
setcolreg(pal,0,256);
dispose(buf);
dispose(pal);
readln;
Asm
mov ah,00
mov al,03
int $10
end;
end.
{
> Hello is somebody there that knows how to use pictures that I
> made in Deluxe paint (.lbm)
First, convert the LBM File to a SCI using For instance VPIC.
I assume you are using VGA/MCGA 320x200x256.. In Case you don't,
this won't work...:
}
Uses
Crt;
Var
SCIFile : File;
r, g, b : Byte;
i : Integer;
VideoM : Byte Absolute $A000:0000;
begin
Asm
mov ax,0013h
int 10h
end;
Assign(SCIFile, 'MYSCI.SCI'); { Put your own Filename there }
Reset(SCIFile, 1);
For i := 0 to 255 do begin
Port[$3C8] := i;
BlockRead(SCIFile,r,1);
BlockRead(SCIFile,g,1);
BlockRead(SCIFile,b,1);
Port[$3C9] := r;
Port[$3C9] := g;
Port[$3C9] := b; { Set palette }
end;
BlockRead(SCIFile,VideoM,64000);
Repeat Until Port[$60] = 1; { Wait For ESC }
Asm
mov ax,0003h
int 10h
end;
end.
{
> I am looking to create a simple utility to report the size, color, etc
> of GIFs.
}
Program GI;
Uses
Dos;
Procedure ExtractGIFInfo (Name : String);
Const
ColorRez : Array[1..8] of Byte=(1,3,7,15,31,63,127,255);
Type
GifSigRec = Array[1..6] of Char;
ScreenDiscRec = Record
Width,
Height:Word;
GenInfo:Byte;
end;
Var
F : File;
Sig : GIFSigRec;
Screen : ScreenDiscRec;
Result : Word;
Diver,
X : Byte;
Y : LongInt;
DirInfo : SearchRec;
Ratio : Byte;
Res : Word;
RReal : Real;
begin
Assign(F, Name);
Reset(F, 1);
BlockRead(F, Sig, SizeOF(Sig), Result);
BlockRead(F, Screen, SizeOf(Screen), Result);
Close(F);
If (Sig[1] + Sig[2] + Sig[3] <> 'GIF') Then
begin
WriteLn('Not a Valid .GIF File!');
Exit;
end;
For X := 1 to 6 do
Write(Sig[X]);
Write(', ', Screen.Width, 'x', Screen.Height, 'x');
Screen.GenInfo := (Screen.GenInfo and 7) + 1;
Res := ColorRez[Screen.GenInfo] + 1;
WriteLn(Res);
end;
Var
Count : Byte;
begin
If ParamCount >= 1 then
For Count := 1 to ParamCount do
ExtractGIFInfo (ParamStr(Count))
else
WriteLn(' Use a Filename geek!');
end.
Had the PCX info:
ZSoft .PCX File HEADER ForMAT
Byte Item Size Description/Comments
0 Manufacturer 1 Constant Flag, 10 = ZSoft .pcx
1 Version 1 Version inFormation
0 = Version 2.5 of PC Paintbrush
2 = Version 2.8 w/palette inFormation
3 = Version 2.8 w/o palette inFormation
4 = PC Paintbrush For Windows(Plus For Windows
Uses Ver 5)
5 = Version 3.0 and > of PC Paintbrush and
PC Paintbrush +, includes Publisher's Paintbrush
2 Encoding 1 1 = .PCX run length encoding
3 BitsPerPixel 1 Number of bits to represent a pixel (per
Plane)- 1, 2, 4, or 8
4 Window 8 Image Dimensions: Xmin,Ymin,Xmax,Ymax
12 HDpi 2 Horizontal Resolution of image in DPI*
14 VDpi 2 Vertical Resolution of image in DPI*
16 Colormap 48 Color palette setting, see Text
64 Reserved 1 Should be set to 0.
65 NPlanes 1 Number of color planes
66 BytesPerLine 2 Number of Bytes to allocate For a scanline
plane. MUST be an EVEN number. Do not
calculate from Xmax-Xmin.
68 PaletteInfo 2 How to interpret palette- 1 = Color/BW, 2 =
Grayscale (ignored in PB IV/ IV +)
70 HscreenSize 2 Horizontal screen size in pixels.
New field found only in PB IV/IV Plus
72 VscreenSize 2 Vertical screen size in pixels.
New field found only in PB IV/IV Plus
74 Filler 54 Blank to fill out 128 Byte header. Set all
Bytes to 0
notES:
All sizes are measured in ByteS.
All Variables of SIZE 2 are Integers.
*HDpi and VDpi represent the Horizontal and Vertical resolutions
which the image was created (either Printer or scanner); i.e. an
image which was scanned might have 300 and 300 in each of these
fields.
{
> Does anyone have the format structure For PCX format? I had it
> once but I lost it... It had a header (big surprise), and used
> run-length compression (HAHAHAHAHA!!!!), but it seems the easiest major
> format to code.
Here's the header, I haven't fooled much With coding/decoding PCX
but if I remember right (At least For 256c images) the run
length-Byte is up to 64 since the most-significant bits signify the
end of a line in the image. And in 256c images, the last 768 Bytes
should be the palette.
}
PCXHeader = Record
Signature : Char;
Version : Char;
Encoding : Char;
BitsPerPixel : Char;
XMin,YMin,
XMax,YMax : Integer;
HRes,VRes : Integer;
Palette : Array [0..47] of Byte;
Reserved : Char;
Planes : Char;
BytesPerLine : Integer;
PaletteType : Integer;
Filler : Array [0..57] of Byte;
end;
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]