[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]
{
For all who are interested:
}
{------------------------------------------------------------------------}
{ HOW TO READ A .BMP FILE! }
{------------------------------------------------------------------------}
procedure LoadBMP(dx:integer;dy:byte;usepal:boolean;filestr:string);
{Loads a 256-color .BMP file directly onto}
{the screen at point x,y; K.Gale, 8/23/94}
{added option to use or not use the saved palette; 8/24/94}
var
cel:text;
inchar:char;
instr:string[4];
y,r,g,b,ymax:byte;
x,xmax:integer;
const
bmpheader=18;
begin
x:=0;y:=0;
assign(cel,filestr);
reset(cel);
for x:=1 to bmpheader do
read(cel,inchar);
x:=0;
read(cel,instr);
xmax:=ord(instr[1])+(ord(instr[2])*256)
+(ord(instr[2])*256*256)+(ord(instr[3])*256*256*256)-1;
read(cel,instr);
ymax:=ord(instr[1])+(ord(instr[2])*256)
+(ord(instr[2])*256*256)+(ord(instr[3])*256*256*256)-1;
for x:=27 to 54 do
read(cel,inchar);
x:=0;
if usepal<>false then
begin
for y:=0 to 255 do
pal(y,0,0,0);
y:=0;
while x<=255 do
begin
read(cel,instr);
r:=ord(instr[3]) div 4;
g:=ord(instr[2]) div 4;
b:=ord(instr[1]) div 4;
pal(x,r,g,b);
inc(x,1)
end
end
else
for x:=0 to 255 do
read(cel,instr);
x:=0;
while (y<=ymax) do
begin
read(cel,inchar);
putpixel(dx+x,dy+(ymax-y),ord(inchar),vga);
if x<xmax then
inc(x,1)
else
begin
inc(y,1);
x:=0;
end
end;
close(cel)
end;
{------------------------------------------------------------------------}
There...
never mind the putpixel procedure call...
you DO NOT have that procedure. I use a gfx unit that
a friend of mine wrote and so, you will have to substitute
the proper procedure call for putting a pixel on the screen.
Furthermore, this will ONLY work for 256-color .BMP files.
Lastly, the "usepal" boolean switch is for those cases when
you want to preserve an already defined palette, rather than
having the .BMP re-define all of those colors.
[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]