41228

Восьмиточечная графика

Лекция

Информатика, кибернетика и программирование

Графика, выводимая с помощью матричных ПУ, представляется в виде отдельных точек, формирующих изображение. Графическое изображение ПУ выводит построчно, обычно строки графики расположены вплотную друг к другу. Графическая строка состоит из вертикальных колонок. Высота колонки может быть 8, 9 или 24 точки.

Русский

2013-10-23

1.09 MB

0 чел.

Графика

Графика, выводимая с помощью матричных ПУ, представляется в виде отдельных точек, формирующих изображение. Графическое изображение ПУ выводит построчно, обычно строки графики расположены вплотную друг к другу. Графическая строка состоит из вертикальных колонок. Высота колонки может быть 8, 9 или 24 точки.

Восьмиточечная графика

Восьмиточечная графика может печататься как на 9- так и на 24-точечных принтерах. В графических данных каждая колонка строки описывается одним байтом. В 9-точечном принтере каждому биту байта, описывающего колонку, соответствует одна игла: старшему биту — верхняя (первая), младшему — нижняя (восьмая). Если соответствующий бит равен единице, то печатается точка, в противном случае — нет. Десятичное значение байта графических данных, задающего колонку, можно получить суммируя "веса", приведенные в табл.

Таблица 5.5. Распределение игл в 9-точечных устройствах для 8-точечной графики

Номер иглы

Бит

«Вес»

Номер иглы

Бит

«Вес»

1

7

128

5

3

8

2

6

64

6

2

4

3

5

32

7

1

2

4

4

16

8

0

1

Рис.  Связь между точечными данными и задействованием иголок в печатающей головке

Если бит содержит " 1 ", то активизируется соответствующая иголка печатающей головки.

Имеются, например, следующие данные:

Поле с "." означает "1", а свободные поля - "0".

При эмуляции 24-игольчатыми принтерами режимов 8-точечной графики данные задаются точно так же, как и для 9-игольчатых принтеров. Распределение иголок (т.е. соответствие иголок битам) в этом случае в Epson-ориентированных принтеров и ПУ семейства Proprinter отличается. Первые используют каждую третью иглу, начиная с верхней, а вторые используют иглы по особой схеме, приведенной в табл. 5.6.

Таблица 5.6. Распределение игл в 24-точечных устройствах семейства Proprinter при эмуляции 8-точечной графики

Номер иглы

Бит байта данных

Номер иглы

Бит байта данных

1

2

3

4

5

6

7

8

9

Бит 7

Бит 7

Бит 7 & Бит 6 Бит 6

Бит 6

Бит 5

Бит 5

Бит 5 & Бит 4 Бит 4

11

12

13

14

15

16

17

18

9

Бит 3

Бит 3

Бит 3 & Бит 2 Бит 2

Бит 2

Бит 1

Бит 1

Бит 1 & Бит 0 Бит 0 Бит 0

10

Бит 4

20

Бит 0

   

В 8-точечной графике существует восемь режимов, отличающихся горизонтальной плотностью и скоростью печати (см. табл. 5.7).

Таблица .       Режимы 8-точечной графики

Режим

Максимальное число колонок в строке длиной

Код

Плотность, (точка/дюйм)

8 дюймов

13 дюймов

0

Одинарная (60)

480   

810

1

Двойная (120)

960

1620

2

Двойная с высокой скоростью (120)

960

1620

3

Четырехкратная (240)

 

1920

3240

4

Плотность ЭЛТ I (80)

640

1080

5

Одинарная плотность графопостроителя (72)

 576

972

6

Плотность ЭЛТ II (90)

     720

 990

7

Двойная плотность графопостроителя (144)

1152

1944

* В этих режимах печать соседних точек невозможна. Если эти точки встречаются в описании   графического изображения, то они исключаются автоматически.

Команды 8-точечной графики имеют следующий формат:

ESC <тип графики> n1 n2 <данные>

где <тип графики> — определяет горизонтальную плотность графического изображения и скорость печати; n1 и n2 число колонок графики, вычисляемое по формуле 256*n2 + n1; <данные> — байты, описывающие колонки в графической строке.

С помощью команды этого формата можно выбрать четыре типа графики, <тип графики> - { К | L | Y | Z }:

ESC К — графика одинарной плотности;

ESC L — графика двойной плотности;

ESC Y — графика двойной плотности на высокой скорости;

ESC Z — графика четырехкратной плотности.

Var

Graph_type  :  char;

Procedure  Print_Graph;

var  i,j  :  Integer;

begin

  write( Lst,   ‘--------------------------- ESC ',Graph_type);

writeln( Lst,   ‘---------------------------‘);

writeln( Lst);

for i:=l  to  5  do

begin

write(Lst, #27,  Graph_type,#80, #0):

for  j:=l  to 80 do write(Lst, #255);

writeln(Lst);

end;

for i:=l  to 3 do

begin

write(Lst,  #27, Graph_type, #240, #0):

for j:= 1 to 30 do

write(Lst, #$18, #$3C, #$7E, #&FF, #&FF, #&7E, #&3C, #&18);

writeln(lst);

end:

for i:=l  to 5 do

begin

write(Lst, #27, Graph_type, #10,#0,#34, #80, #138, #0);

write(Lst, #134,#0,#138,#80,#34,#0., ' ');

end;

writeln(Lst):

writeln(Lst, #0, #10):

end;

begin

Graph_type:='K';

Print_Graph:

Graph_type:='L':

Pr1nt_Graph;

Graph_type:='Y':

Pnnt_Graph:

Graph_type:='Z';

Print_Graph;

end;  


Точечный режим ESC К

Этот режим позволяет выводить на начать точечные данные с нормальной плотностью и числом позиций печати не более 480. Указанный режим устанавливается при вводе кодовой последовательности

ЕSС К n1 n2,

где К соответствует коду 7510, а n1 и n2 – коды, соответствующие количеству точечных данных (позиций) в строке. При заданном количестве N точечных данных (позиций) в строке n1=Nmod256, n2=Nint(N/256), т.е. n1 равно остатку, а n2 - целой части от деления N на 256. По окончании точечного режима принтер автоматически возвращается в текстовый режим.

Пример       N=240  или  128+64+32+16

n1=240,  n2=0;

N=480=224+256*1  ,    n1=480-256=224,  n2=1,  

Максимальное количество точечных позиций, печатаемых при нормальной плотности в одной строке, составляет 480. Когда общее количество точечных данных в строке больше 480, то все избыточные данные игнорируются.

Если передается больше графических данных, чем специфицировано в общем количестве N, то принтер автоматически переключается на текстовый режим.

В одной строке разрешается чередовать данные в текстовом и точечном режимах. Необходимо только принять во внимание максимальное количество печатных точек в строке. Установленные вид шрифта и ширина символов сохраняются.

В 24-игольчатых принтерах семейства Proprinter эти четыре режима реализуются командой формата:

ESC "[g" c1 c2 m <данные>,

где c1 и c2 — соответственно младший и старший байты счетчика, содержащего число байт графических данных плюс один, a m — код режима, О <= т <= 3 (см. табл. 5.7).

Для выбора всех режимов графики используется универсальная команда формата:

ESC "*" m n1 n2 <данные>

где m — код режима, 0 <= т <= 7 (см. табл. 5.7); n1, n2 — младший и старший байты числа колонок графики, вычисляемое по формуле 256*n2 + n1; <данные> — байты, описывающие колонки в графической строке.

const

Arr_Mode : array [0..7] of integer = (240.480,480,960,320.288,360.576);

var

i : byte;

Procedure Graph (Mode : byte; 1 : integer);

var i : Integer;

begin

write(Lst, ‘------------------------------- ESC * ',Mode);

writeln(Lst, ------------------------------- ‘);

writeln(Lst);

write(Lst, #27, '*', chr(Mode),chr(1 mod 256), chr(1 div 256));

for i:=l  to 1 do write(Lst, chr(i mod 128 +128));

writeln(Lst, #10, #10);

end;

begin

for i:=0 to 7 do Graph(i, Arr_Mode[i]);

end;

В устройствах RAVI-8010, D100-E, NR-15 режим двойной плотности графопостроителя не реализован. В устройствах ЕС7245 и ЕС7144 этот режим реализован на полускорости, поэтому печать соседних точек исключена. В принтерах фирмы Epson режим двойной плотности графопостроителя реализован на скорости меньшей, чем полускорость.

В 24-игольчатых принтерах (LQ-250+, Proprinter X24, Proprinter XL24) при эмуляции 8-точечной графики отсутствуют плотности графопостроителя (режимы 5 и 7, см. табл. 5.7).

Существует команда переназначения режима графики. Эта команда позволяет переназначать режимы, задаваемые с помощью отдельных команд 8-битовой графики, на любой из режимов графики, реализованных в устройстве:

ESC <тип графики> m

где <тип графики> - { 'К' | 'L' | 'Y' | 'V };   т — код режима, O <= m <=7.

После переназначения графики с помощью команды ESC ? при выборе режима, на который была переназначена графика другой плотности, будет устанавливаться переназначенный режим.

var i,j : integer;

begin

for i:=0 to 7 do begin

write(Lst,  'Плотность К на ',i,'  ‘#27, '?K',  chr(i));

write(Lst,  #27, 'K' ,#240, #0);

for j:=l to 80 do write(Lst,  #255, #0, #0);

writeln (Lst);

end;

end:

Девятиточечная графика

В 9-игольчатых принтерах существует возможность использования всех 9 игл для печати графических изображений с помощью команды ESC "^". Формат команды:

ESC "^" т n1 n2 <данные>

где m определяет плотность печати (0 — одинарная, 1 — двойная); n1 и n2 определяют общее число колонок так же, как для 8-точечной графики.

При задании 9-точечной графики число байт графических данных должно быть равно числу колонок, умноженному на два, так как каждая колонка описывается в этом случае двумя байтами: в первом байте содержится информация о 8 верхних иглах (они описываются как для 8-точечной графики), а в старшем бите второго байта — о нижней девятой игле.

var

i, j : integer;

с : char;

begin

for 1:=1 to 5 do begin

for j:=0 to 1 do begin

write(Lst, #27, ‘^’, chr(j), #10, #0, #0, #128, #l, #128);

write(Lst, #2, #l28, #4, #128, #8, #128, #16, #28, #32);

write(Lst, #128, #64, #128, #128, #128, #0, #0):

end;

end;

write1n(Lst, #10):

end:

5.2.3. Двадцатичетырехточечная графика

При работе с 24-точечной графикой число байт в графических данных равно числу колонок, умноженному на три. Для каждой колонки иглы с 1 по 8 описываются первым байтом, с 9 по 16 — вторым и с 17 по 24 — третьим (табл. 5.8).

Таблица 5.8. Распределение игл при печати 24-битовых графических образов

Номер иглы

Бит

Вес

Номер иглы

Бит

“Bec”

1, 9. 17

2, 10, 18

3, 11, 19

4, 12, 20

7

6

5

 4

128

64

32

16

5, 13, 21

6, 14, 22

7, 15, 19

8, 16, 24

3

2

1

0

8

4

2

1

В 24-игольчатых принтерах 8-точечная и 24-точечная графика реализуется одними и теми же командами: командой графики ESC "*" (Epson, IBM-G, IBM-P) или командой ESC "[g- (IBM-P).

В 24-игольчатых принтерах Proprinter X24 и Proprinter XL24 основным способом печати графических изображений является печать с адресацией всех точек — АРА-графика (АРА — All Point Adressable). Для перехода к этому способу печати необходимо поставить специальный микропереключатель устройства в положение, соответствующее АРА-графике. Восьмиточечная графика отображается с помощью 20 иголок печатающей головки по схеме, приведенной в табл. 5.6.

В табл. 5.9 приведены значения параметра m для режимов 24-точечной графики. При этом коды 8 — 12 соответствуют команде ESC "[g", а остальные — команде ESC "*".

В устройствах Proprinter X24 и Proprinter XL24 для доступа к режимам 4, б и 32 — 40 (см. табл. 5.9) необходимо поставить указанный микропереключатель в положение, соответствующее альтернативной графике (т.е. не АРА-графике, а графике, принятой в Epson-ориентированных системах).

Таблица 5.9. Режимы 24-битовой графики

Код Код

Плотность,

точка/дюйм

                            Название режима

8

9

11

12

32

33

38

39

40

60

120

180

360

60

120

90

180

360

Высокое разрешение для ESC "К"

Высокое разрешение для ESC "L"

Высокое разрешение для тройной плотности

Высокое разрешение для шестикратной плотности

Высокое разрешение для ESC "К"

Высокое разрешение для ESC "L"

ЭЛТ III

Высокое разрешение для тройной плотности

Высокое разрешение для шестикратной плотности

В цветном принтере фирмы IBM существует возможность устанавливать масштабный коэффициент для графических изображений. Допускается установка коэффициентов 1:1 и 5:6, при этом по умолчанию принтером используется коэффициент 5:6, который соответствует масштабному коэффициенту дисплея. Эта возможность позволяет копировать графический экран без искажения.

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


5.2.4. Сочетание команд программирования графического изображения с другими командами

Команды графики могут поступать, чередуясь с другими командами. Не только в одном тексте, но и в одной строке могут печататься несколько графических изображений с одной или разными плотностями. Графические изображения сочетаются с текстом, выводимым в разных режимах печати.

Число посылаемых графических данных должно точно соответствовать числу данных, зарезервированному в используемой графической команде. Если графических данных послано больше, то избыточная часть их будет восприниматься принтером как коды символов. Если же графических данных послано меньше, то принтер остановится и будет ждать недостающие данные. В последней ситуации устройство ЕС7245 оказываются чувствительным к нажатию кнопок, a FX-800 — нет.

Если задаваемое графическое изображение выходит за пределы строки, то оставшаяся часть должна игнорироваться устройством.

Обычно графическая картинка состоит из нескольких графических строк, расположенных вплотную друг за другом. Поэтому при работе с графикой необходимо изменить межстрочный интервал или передвигать бумагу с помощью команды прямой подачи бумаги (ESC "J").

var

i, j : integer;

begin

write(Lst, #27, 'A'.#7);

for j : = 1 to 2 do

begin

write(Lst, #27, 'L', #55.M);

for i : = 1 to 44 do write(Lst,   #0);

for 1 : = 45 to 55 do write(Lst, #255);

writeln(Lst);

end;

write (Lst, #27,'L', #65, #0);

for i := 1 to 34 do write(Lst, #0);

for i : = 35  to 65 do write(Lst,  #170);

writeln(Lst);

for j := 1 to 2 do

begin

write(Lst, #27, 'L', #75, #0);

for i := 1 to 24 do write(Lst, #0);

for i := 25 to 75 do write(Lst, #255);

write(Lst, #l3);

end;

write1n(Lst);

write(Lst, #27, 'K', #43, #0);

for i := 1 to 7 do write(Lst,  #0);

for 1 := 8 to 25 do write(Lst,  #85, #170);

writeln(Lst);

for j := 1 to 2 do

begin

write(Lst, #27,'L', #100, #0);

for i := 1 to 100 do  write(Lst, #255);

write(Lst, #13);

end;

writeln(Lst);

write(Lst, #27, 'K', #50, #O};

for i := 1 to 50 do write(Lst, #255);

end;

В устройствах RAVI-8010, RAVI-8010M, ЕС7245, EC7144 печать графических изображений производится только в одном направлении — слева направо, что связано с точностью печати.

Сочетание графической и символьной информации в одной строке значительно снижает скорость печати в принтерах FX-800 и FX-1000, это снижение связано с тем, что при переключении с символьной информации на графическую и наоборот происходят торможение и разгон печатающей головки. В устройствах ЕС7245 и EC7144 такие переключения практически не снижают скорости печати.

Печатающие устройства FX-800 и FX-1000 игнорируют сочетания ряда управляющих команд принтера с командами графики.

var

1 : integer;

begin

write(Lst, 'abcdefghijkimn'); {символы}

write(Lst, #27,'K', #30, #O): {графика}

for i := 1 to 15 do write(Lst, #170, #74);

write(Lst, '1234567890'); {символы}

write(Lst, #24); {отмена строки}

write(Lst, #27,'K', #30, #0); {графика}

for i := 1 to 15 do write(Lst, #255,#74);

write(Lst, #24); {отмена строки} end;

При чередовании в строке символов с графическими изображениями выравнивание (кроме выравнивания по левому полю) в принтерах FX-800, FX-1000, LQ-2500+ может быть выполнено некорректно.

После распечатки данных, предшествующих команде возврата на шаг BS, каретка сдвигается влево на ширину графического изображения.

var

i, j: integer;

begin

write(Lst, #27,'A', #7);

for j := 1 to 5 do begin

write(Lst, #27,'IC', #30, #0);

for 1:= 1 to 30 do write(Lst, #170};

write(Lst, #27, 'L', #60, #0);

for i:= 1 to 60 do write(Lst,  #170);

write(Lst, #8);

write(Lst, #27,'K', #60, #0);

for i := 1 to 60 do write(Lst, #85);

writeln(Lst);

end;

end;