[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]
{
> I wrote a computer Program that produces 8 bit 480 x 640 hi res images,
> and I would like to know if anyone is familiar With a routine that can
> print these images out on a Printer.
> The preferable Printer For the task is a HP LaserJet II.
>
> I would like to be able to tell the LaserJet exactly which pixel dots
> to print, and I don't mind if I have to give bit information to the
> Printer line-by-line.
>
Below is some (old) code to make a screendump in Graphics mode, for
both HP laser II and Epson. I haven't tested this For SVGA, but if
you give MaxX and MaxY the right values, I can't see where it would
go wrong.
Jan Barendregt
}
Uses
Graph,
Dos,
Printer;
Const
d = 'l';
Var
MaxX, MaxY : Integer;
Procedure dump;
Var
ymax,
bbyt,
b2 : Byte;
psf : File of Byte;
regs : Registers;
Procedure out(ch : Char);
begin
regs.ax := ord(ch);
regs.dx := 0;
intr($17, regs);
end;
Procedure hplaser;
Var
b,
reg,
kol : Word;
begin
assign(psf, 'lpt1');
reWrite(psf);
Write(lst, chr(27), 'E');
Write(lst, chr(27), '*t100R', chr(27), '*r0A');
For reg := 0 to maxx do
begin
Write(lst, chr(27), '*b', (maxy + 1) div 8, 'W');
For kol := ((maxy + 1) div 8) - 1 downto 0 do
begin
bbyt := 0;
For b := 0 to 7 do
begin
if getpixel(reg, kol * 8 + b) = 0 then
b2 := 0
else
b2 := 1;
bbyt := bbyt or (b2 shl b);
end;
out(chr(bbyt));
end;
end;
Write(lst, chr(27), '*rB');
Write(lst, chr(12));
Write(lst, chr(27), 'E');
close(psf);
end;
Procedure epson;
Var
k, j, i : Byte;
Function xget(x, y : Integer) : Byte;
begin
regs.ah := $0D;
regs.cx := x;
regs.dx := y;
intr(16, regs);
xget := regs.al;
end;
begin
out(chr($1B));
out(chr($33));
out(chr($18));
out(chr($0D));
out(chr($0A));
For j := 0 to (maxy shr 3) do
begin
out(chr($1B));
out(chr($4C));
out(chr((maxx + 1) mod 256));
out(chr((maxx + 1) div 256));
For i := 0 to maxx do
begin
bbyt := 0;
For k := 0 to 7 do
if (xget(i, (j shl 3) + k) <> 0) then
bbyt := bbyt or (128 shr k);
out(chr(bbyt));
end;
out(chr(13));
out(chr(10));
end;
end;
begin
MaxX := GetMaxX;
MaxY := GetMaxY;
if d = 'l' then
hplaser
else
epson;
end;
Var
Gd, Gm,
Radius : Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, 'e:\bp\bgi');
For Radius := 1 to 5 do
Circle(100, 100, Radius * 10);
Readln;
Dump;
CloseGraph;
end.
[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]