Пример:

Компьютерная графика. Полигональные модели о

UL

Рассмотрим, как формируются байты для этой команды. Так как ширина изображения равна 10, то отсюда nl = 10 % 256, п2 = 10/256. Для формирования первого байта, описывающего изображение, возьмем первый столбец из 8 пикселов и закодируем его битами: точке поставим в соответствие 1, а пустому месту - 0. Получившиеся биты запишем сверху вниз. При этом получается двоичное число 00100010, десятичное значение которого равно 34. Второй столбец кодируется набором бит 01010000 с десятичным значением 80. Проведя аналогичные расчеты, получим, что для печати этого изображения на принтер необходимо послать следующие коды: 27, 75, 10, 0, 34, 80, 138, 0, 143, 0, 138, 80, 34, 0.

Для вывода на принтер изображения высотой больше 8 пикселов оно предварительно разбивается на полосы высотой по 8 пикселов.

Ниже приводится пример программы, копирующей изображение экрана на 9-игольчатый матричный принтер.

// File Examplel .срр #include <bios.h> #include <conio.h> #include <graphics.h> #include <process.h> #include <stdio.h>

int port = 0; //use LPT1:
inline int print ( char byte )
{
return biosprint ( 0, byte, port);
}
void printScreenFX (int x1, int y1, int x2, int y2 ) {
int numPasses = ( y2 » 3 ) - ( y1 » 3 ) + 1;
int numCols =x2-x1 + 1;
int byte;
print (V );

for (int pass = 0, у = y1; pass < numPasses; pass++, у += 8) {

print ('\x1B'); print (V);
print ( numCols & OxFF ); print ( numCols » 8 );
for (int x = x1; x <= x2; x++ ) {
byte = 0;

for (int i = 0; i < 8 && у + i <= y2; i++ ) if ( getpixel ( x, у + i) > 0 ) byte |= 0x80 » i;

print ( byte );
}
print ('\x1B'); print ('J');

4. Работа с основными графическими устройствами

print (24 ); print (V );
}
}
main () {
int driver = DETECT;
int mode; int res;
initgraph ( &driver, &mode,""); if ((res = graphresult ()) != grOk )
{
printf(H\nGraphics error: %s\n", grapherrormsg (res )); exit (1 );
}
line ( 0, 0, 0, getmaxy ()); line ( 0, getmaxy (), getmaxx (), getmaxy ()); line (getmaxx (), getmaxy (), getmaxx (), 0 ); line (getmaxx (), 0, 0, 0 );

⇐ Предыдущая| |Следующая ⇒