[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]
{
Dave Foster
> Could anyone please post any routines or help on how
> to read an image into TURBO 6. I can save the image
> in any format, but i need code to be able to display
> it on the screen. Source code would be an advantage!
>
I wrote this Program For a friend to read a image into his Program, and
and I would be happy For any help on how to improve it.
}
Program Read_Image; { SRC-CODE.PAS ver 1.00 }
{-----------------------------------------------------------------------------
Program reads in a binary data File, and displays the image on the screen by
using "PutPixel" Procedure in the Graph Unit. The image can be displayed in
color, or in grey-scale by using the subroutine "Set64Gray" below.
This is a quick and dirty method to display the image using "PutPixel",
and I hope someone will be able to show us how to use the "PutImage" to
display the image quicker.
-----------------------------------------------------------------------------}
Uses
Dos, Crt, Graph;
Type
ByteArray = Array [0..175] of Byte;
Var
Gd, Gm,
m, n : Integer;
buffer : ByteArray;
f : File;
{
> Does anyone know how can I get a Graphic mode in VGA in which I
> could use 64 gray level (at least 32)? Could I keep on using the
> Graphical Procedures in Unit Graph then?
The fragment below will initialize the first 64 VGA color values to
gray scale. These colors are valid For any VGA mode (including Text),
but in most Graphics modes/devices the Borland Graph Unit limits you
to using only 16 colors.
}
Procedure Set64Gray;
{ Sets up 64 shades of gray where 0 = black, 63 = full white }
Type
CRec = Record
R, G, B: Byte;
end;
Var
Regs : Registers;
I : Integer;
G64 : Array [0..63] of CRec;
begin
{ Initialize the block of color values }
For I := 0 to 63 do
With G64[I] do
begin
R := I;
G := I; { Color is gray when RGB values are equal }
B := I;
end;
Regs.ax := $1012; { Dos Function to update block of colors }
Regs.bx := 0; { First color to change }
Regs.cx := 64; { Number of colors to change }
Regs.es := seg(G64); { Address of block of color values }
Regs.dx := ofs(G64);
intr($10, Regs);
end;
begin
Gd := detect;
initGraph(Gd, Gm, 'e:\bp\bgi');
{ Open the image File which is 250 lines, and 175 pixels per line.
Each pixel is 1 Byte, and no header data, or Record delimiters.
File is 43,750 Bytes (250 x 175) in size. Have look at the input
File using binary File viewer. }
assign(f, 'DOMINO.DAT');
reset(f, 175);
{ if you enable this, you will be able to see the image in grey-scale,
but I am not sure if it is quite right. Currently it seems to display
only few grey-scale levels instead of the full 64 levels.
}Set64Gray;
{ Method used to read the File line at a time, and Write the pixel
values to the screen. This is bit slow, and it would be lot faster
by using "PutImage" but I do not know the method For that. }
n := 1;
While not eof(f) do
begin
BlockRead(f, buffer, 1);
For m := 1 to 175 do
PutPixel(m, n, buffer[m]);
n := n + 1;
end;
close(f);
readln;
closeGraph;
end.
{
The image File "DOMINO.DAT" used in the Program "SRC-CODE.PAS".
Image File is 250 x 175 pixels (43,750 Bytes).
}
[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]