| YY : Integer; { координата текущей точки }

| BEGIN

| CByte := 0; { начальное значение байта }

| for Bit := 0 to 7 do begin { цикл: 8 точек вдоль оси Y }

| YY := Y+Bit; { координата точки по оси Y }

| Р := GetPixel(X, YY); { цвет в этой точке }

| if (YY<=Y2) and (P<>bk1) and (P<>bk2) { Если цвет видимый, }

| then Inc( CByte, Bits[Bit] ); {то запомнить точку }

| end; {for}

| ConstructByte := Cbyte { 8 битов (точек) построены }

| END;

| PROCEDURE Doline; { вывод одной строки на печать }

| VAR

| XPixel : Integer; { текущая координата точки по X }

| PrintByte : Byte; { байт, кодирующий 8 пикселов }

| BEGIN

| if Mode=1 { включение графической печати: }

| then Write( Lst, #27'L' )

| else Write( Lst, #27'*', Chr(Mode) );

| Write(Lst,Chr(n1),Chr(n2)); { посылка длины строки }

| for XPixel:=X1 to X2 do begin { цикл по строке растра }

| PrintByte := ConstructByte( XPixel, ScanLine );

| if Inverse then PrintByte:=not PrintByte; {инверсия }

| Write(Lst,Chr(PrintByte)); { печать кодового байта }

| end; {for}

| Write( Lst, #10 ) { посылка кода перевода строки }

| END;

| LABEL

| Quit; { метка выхода при нажатии Esc }

| BEGIN

| Mode := Mode mod 7; { настройка режима печати Mode: }

| if Mode in [0,5] then Mode := 4;

| Write(Lst,#27'3' #24); { межстрочный интервал 24/256 }

| n1 := Lo(Succ(X2-X1)); { Определение количества точек }

| n2 := Hi(Succ(X2-X1)); { на одной строке печати }

Рис. 19.27 (продолжение)

- 450 -

| ScaneLine := Y1; {стартовая строка растра }

| while ScanLine(Y2 do

| begin {цикл по растру экрана }

| if KeyPressed and (ReadKey=#27) {Нажата клавиша Esc? }

| then Goto Quit; {если да, то выход… }

| DoLine; {печать порции: 8 линий растра }

| Inc(ScanLine, 8) {следующая порция линий растра }

| end; {while}

| Quit: {метка выхода при нажатии Esc }

| Write(Lst, #27#2) {восстановление режима печати }

| END;

| {$I initgraf} {блок инициализации графики }

| BEGIN {ПРИМЕР ВЫЗОВА ПРОЦЕДУРЫ}

| GrInit; {инициализация графики }

| SetFillStyle(HatchFill, Blue); {установка типа заливки }

| FillEllipse(300, 100, 100, 50); {заливка области-эллипса }

| CopyToPRN(0, 0, GetMaxX, GetMaxY, Black, False, 1);

| CloseGraph {закрытие режима графики }

| END.

Рис. 19.27 (окончание)

Показанная процедура будет работать во всех графических режимах адаптеров на принтерах, воспринимающих систему команд принтера EPSON.

19.6.1.2. управление пикселями. Оно заключается в возможности назначить цвет любому пикселю экрана. Процедура

PutPixel(x, y : Integer; Color : Word)

зажигает на экране с координатами (X, Y) пиксел цвета Color. На применении этой процедуры построен пример на рис. 19.28.

| Graph, CRT {понадобится модуль CRT }

| {$I initgraf.pas} {процедура инициализации }

| CONST

| minx = 290; miny = 70; {левый верхний угол области }

| maxx = 350; maxy = 130; {правый нижний угол области }

| Nx = Succ(maxx-minx); {ширина области в пикселах }

| Ny = Succ(maxy-miny); {высота области в пикселах }

Перейти на страницу:

Поиск

Похожие книги