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;


 

А также другие работы, которые могут Вас заинтересовать

44946. Организация вычисляемого перехода 41.46 KB
  Вычисляемый переход осуществляется при помощи команды ddwf PCF которая формально описывается так: сложить содержимое регистров W и PC с сохранением результата сложения в регистре PC имеется ввиду младший байт счетчика команд с названием PCL. Для вычисляемого перехода адрес в PC на момент исполнения команды ddwf PCF является как бы начальной точкой отсчета т. число находящееся в регистре W на момент исполнения команды ddwf PCF которое и будет приращением счетчика команд PC.
44947. Динамическая индикация 59.87 KB
  Для краткости эти регистры обозначим под названиями LED с соответствующей нумерацией. Например если результат измерения подсчета нужно вывести на индикацию как 4 разрядное десятичное число то двоичный результат измерения “прогоняется†через двоично-десятичное преобразование о нем позднее в итоге которого результат измерения помещается в младшие полубайты 4х регистров LED от LED0 до LED3.0 MHz ; DtL equ 0Ch DtH equ 0Dh D_H equ 0Eh D_L equ 0Fh Step equ 1Bh Led0 equ 1Ch Led1...
44949. Работа с EEPROM памятью данных 61.93 KB
  Поставим перед собой достаточно простую и конкретную задачу (что-то типа задания на первоначальную разработку). Допустим, что в ходе исполнения программы нужно изменить (модифицировать) содержимое пяти ячеек EEPROM памяти, начиная с адреса 7. Для простоты модификации (и для обеспечения наглядности наблюдения за происходящими в EEPROM памяти изменениями) к первому числу (по адресу 7) необходимо добавить 1...
44950. Однокристальные микроконтроллеры серии PIC 231 KB
  Микроконтроллеры семейств PIC (Peripheral Interface Controller) компании Microchip, обладающие особой популярностью, построены на основе передовых технологий микроконтроллеров. Им свойственны следующие особенности: электрически программируемые пользователем ППЗУ, минимальное энергопотребление, высокая производительность, хорошо развитая RISC-архитектура
44952. Автоколебательный мультивибратор 33.87 KB
  Проанализируем нашу программу, реализующую функцию автоколебательного мультивибратора, с одним выходом. Форма сигнала меандр (скважность, т.е. отношение периода к длительности импульса – 2). Под этот выход можно назначить любой из выводов порта А или В...
44953. Устройство формирования сигнала тонального вызова 87.52 KB
  Полупериоды формируем используя €œзакольцовку рабочей точки программы в подпрограммах задержки по аналогии с программой Multi. К моменту начала составления текста программы желательно определиться с как можно большим количеством исходных данных. Так как программа должна исполняться непрерывно то в случае нахождения устройства в режиме ожидания включения на передачу рабочая точка программы должна €œзакольцеваться€ до последующего нажатия на кнопку в какой-нибудь подпрограмме. Часто такого рода закольцовки осуществляют в...
44954. Сканирование с прерыванием 110.21 KB
  Определимся с терминологией применяемой при описании программы работы устройства. Для удобства объяснения и восприятия целесообразно разделить рабочую часть программы на две части. Условимся называть группу команд в которой осуществляется сканирование каналов на наличие сигнала прерывания “основным телом†программы а часть которая отрабатывается после ухода в прерывание как подпрограмму прерывания. Следовательно речь идет о необходимости “ухода†рабочей точки программы на время наличия сигнала прерывания в подпрограмму...