Описание формата pcx и некоторых утилит pc paintbrush




НазваниеОписание формата pcx и некоторых утилит pc paintbrush
страница2/3
Дата конвертации18.12.2012
Размер32.63 Kb.
ТипРеферат
1   2   3

Замечание переводчика
---------------------
Два замечания по поводу 256-цветной палитры.
Во-первых, между пунктами 1 и 2 приведенной инструкции я добавил бы следующий: "Прочитать в заголовке поле Bits per pixel. Если оно равно 8, 256-цветная палитра должна быть.".
Смысл очевиден.
Во-вторых, в настоящее время довольно широкое распро- странение получил пакет программ .PCX Programmer's Toolkit фирмы Genus Microprogramming. В этом пакете (по крайней мере в известных мне версиях) принят способ хранения 256-цветной палитры несколько отличный от того, что был описан выше.
Отличие состоит в том, что палитре предшествует байт с десятичным значением 10 (вместо 12), а значения цветовых компонент занимают младшие 6 битов в каждом из байтов цветовой тройки (т.е. изменяются от 0 до 63, как это принято в VGA BIOS).

Информация о цветовой палитре CGA

Для стандартной платы IBM CGA битовый набор для определения палитры более сложен. Используется только первый байт тройки. Первая тройка содержит только первый байт с осмысленным значением, который определяет цвет фона. Чтобы определить цвет фона, нужно значение этого байта (беззнаковое) разделить на 16. В результате будет получено значение в диапазоне 0-15, которое и определяет цвет фона.
Вторая тройка содержит осмысленное значение первого байта, которое определяет значение палитры для трех оставшихся цветов. PC Paintbrush поддерживает для этих цветов 8 возможных палитр CGA, и, поскольку значение байта может быть от 0 до 255, его следует разделить на 32 (см. схему, приведенную ниже).

Taблица цветов для CGA
Байт #16 в заголовке
Цвет фона определяется 4 старшими битами.
Байт #19 в заголовке
Используются только 3 старших бита, остальные 5 игнорируются. Первые три бита обозначаются как C, P, I.
Их интерпретация:
C: разрешение color burst - 0 = color; 1 = monochrome P: палитра - 0 = желтая; 1 = белая I: яркость - 0 = малая; 1 = повышенная.

Замечание переводчика
---------------------
Как видите, исходный документ умалчивает о том, в каких случаях информацию в заголовке файла следует трактовать как палитру CGA. Не исключено, что ветвление следует вести по полю Version заголовка.

Формат матричного шрифта PC Paintbrush

Матричный символьный шрифт запоминается в очень простом формате. Формат этих символов следующий:

Заголовок (2 байта)
ширина шрифта db 0a0h + ширина символов (в точках) высота шрифта db высота символов (в точках) Ширина символов (256 байтов)
ширина символов db 256 dup(ширина каждого символа + 1) Изображения символов
(остаток файла)

Символы запоминаются в порядке кодов ASCII и их может быть до 256. Каждый символ выравнивается слева на границу символьный блок и содержит одинаковое число байтов.

Байты организованы как N цепочек, где каждая цепочка соответствует одной строке символа.

Например, каждый символ в шрифте размером 5x7 требует 7 байтов. Шрифт размера 9x14 использует 28 байтов на символ (два байта на строку по 14 наборов). Допускается создание шрифтов любого размера, при условии, что размер файла не превышает 10K.

Примеры программ на C

Приведенный ниже набор программ на C предназначен для чтения из PCX файла.

/* Данная процедура читает из файла один блок закодированных данных из файла и запоминает повторитель count и байт данных data. Результат:
0 = данные прочитаны
EOF = данных нет (вышли за пределы файла) */ encget(pbyt, pcnt, fid)
int *pbyt; /* сюда писать байт данных */ int *pcnt; /* сюда писать повторитель */ FILE *fid; /* ссылка на файл изображения */
{
int i;

*pcnt = 1;
if(EOF == (i = getc(fid))) return(EOF);

if(0xc0 == (0xc0 & i)) {
*pcnt = 0x3f&i;
if(EOF == (i=getc(fid))) return(EOF);
}

*pbyt = i;

return(0);
}

/* Это фрагмент программы, использующей encget. Она читает файл целиком и запоминает результат декодирования в (большом) буфере, на который ссылается переменная "bufr".
"fp" - это ссылка на файл с изображением */

while (EOF != encget(&chr, &cnt, fp)) for (i = 0; i < cnt; i++, *bufr++ = chr)


Приведенный ниже набор программ предназначен для записи
в .PCX файл.

/* Эта программа кодирует содержимое одной строки изображения и записывает его в файл */

encLine(inBuff, inLen, fp)
unsigned char *inBuff; /* указатель на строку данных */ int inLen; /* длина строки в байтах */ FILE *fp; /* указатель на запис. файл */ { /* возвращает число байтов, запис. в файл, или 0, если имела место ошибка */

unsigned char this, last;
int srcIndex, i;
register int total;
register unsigned char runCount; /* макс. значение равно 63 */

total = 0;
last = *(inBuff); runCount = 1;

for (srcIndex = 1; srcIndex < inLen; srcIndex++) { this = *(++inBuff);
if (this == last) {
runCount++; /* он кодируется */ if (runCount == 63) { if (!(i=encput(last, runCount, fp))) return(0);
total += i;
runCount = 0;
}
}
else { /* this != last */ if (runCount) {
if (!(i=encput(last, runCount, fp))) return(0);
total += i;
}
last = this;
runCount = 1;
}
} /* конец цикла */

if (runCount) { /* завершение */ if (!(i=encput(last, runCount, fp))) return(0);
return(total + i);
}

return(total);

}

/* программа для записи закодированной пары байтов (или одиночного байта, если он не кодируется) в файл */

encput(byt, cnt, fid) /* возвращает число записанных байтов или 0, если имела место ошибка */ unsigned char byt, cnt;
FILE *fid;
{
if(cnt) {
if( (cnt==1) && (0xc0 != (0xc0&byt)) ) { if(EOF == putc((int)byt, fid)) return(0); /* ошибка при записи на диск */ return(1);
}
else {
if(EOF == putc((int)0xC0 | cnt, fid)) return(0); /* ошибка при записи на диск */ if(EOF == putc((int)byt, fid)) return(0); /* ошибка при записи на диск */ return(2);
}
}

return(0);

}

Техническая информация об утилите FRIEZE

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

FRIEZE был переписан для использования в PC Paintbrush Plus, и поэтому техническая документация по нему коренным образом изменилась. Для облегчения понимания технической информации по FRIEZE, мы разбили этот раздел на две части:
один о версиях FRIEZE, предшествующих 7.00, и второй о текущей версии (начиная с 7.00).

Начиная с версии FRIEZE 7.10, он может быть позднее удален из памяти (это возвращает вам почти 85K DOS RAM, в зависимости от вашей конфигурации). Чтобы сделать это, вы можете выбрать освобождение FRIEZE из памяти в меню PCINSTAL, либо изменить в некоторый момент рабочую директорию PC PAINTBRUSH и набрать слово "FRIEZE."


Спецификация для версий FRIEZE ранее 7.00

Набор опций печати FRIEZE

FRIEZE может легко адаптироваться к неполным принтерным кабелям (в которых отсутствует линия статуса, указанная IBM) и управляет как последовательным, так и параллельным интерфейсами. Отметим также, что FRIEZE всегда использует стандартные вызовы BIOS'а, вследствие чего неответившие устройства будут находиться в режиме тайм-аута, однако можно потребовать, чтобы случаи типа отсутствия бумаги при этом игнорировались.

Синтаксис команды FRIEZE:
FRIEZE Xnaarr
Где:
X = параллельное (P) или последовательное (S) устройство,
n = номер порта,
aa = две шестнадцатиричные цифры кода, для которого возвращаемые биты вызывают аварийное завершение,
rr = две шестнадцатиричные цифры кода, для которого возвращаемые биты вызывают повтор.

Примеры:
FRIEZE P1 - использовать стандартный набор параллельного вывода, номер порта 1, маска аварийного завершения 28h, и маска повтора 01h

FRIEZE P2 - использовать принтерный порт #2

FRIEZE S1 - использовать последовательный порт #1 и протокол Xon/Xoff

FRIEZE P10028 - использовать принтерный порт #1, маску аварийного завершения 00 (ничто не воспри- нимается как ошибка) и маску повтора 28h

Интерпретация кодов:
Коды, возвращаемые параллельным принтером при вызове общеизвестны:
20h - отсутствие бумаги,
10h - выбран,
08h - ошибка ввода/вывода, 04h - не используется,
02h - не используется,
01h - тайм-аут.

Вызов функций FRIEZE

FRIEZE работает, используя программное прерывание номер 10h (вызов видео прерывания).

Для вызова функции FRIEZE, загрузите значение 75 (десятичное) на регистр AH, номер вызываемой функции на регистр CL и затем либо загрузите на AL аргумент функции, либо на регистры ES и BX сегмент и смещение того места, где располагаются эти аргументы, после чего вызовите прерывание
10h.

FRIEZE возвращает на AX число, которое означает код ответа: нулевое значение соответствует успешному завершению, все другие - номер ошибки. Значения других регистров не изменяются.

# Определение Аргументы 0 Печать окна AL = режим:
0 - символьный, 1 - обычный, 2 - sideways 1 Чтение окна ES:BX - строка (имя читаемого файла) 2 Запись окна ES:BX - строка (имя записываемого файла) 3 Ширина печати AL = ширине в 1/4 дюйма 4 Высота печати AL = высота в 1/4 дюйма 5 Резерв.
6 Уст. левой границы AL = левое поле в 1/4 дюйма 7 Уст. размера окна ES:BX - 4 слова в которых записаны угловые координаты окна:
Xmin, Ymin, Xmax, Ymax 8 Резерв.
9 Уст. образцов ES:BX - 16-элементный вектор байтов, содержащий цветовое соответствие между принтером и экраном.
10 Получ. образцов ES:BX - вектор из 16 байт, описанный выше 11 Уст. режима AL = номер режима 12 Резерв.
1   2   3

Похожие:

Описание формата pcx и некоторых утилит pc paintbrush iconА. Тихонов показать картинку
В статье рассмотрены графический формат pcx и средства для работы с ними на Turbo Pascal версии Приводятся листинги программ, позволяющие...
Описание формата pcx и некоторых утилит pc paintbrush iconЗдесь может быть любой текст
Описание спецификации 1 10. 1 для текстового формата файла описания теста, используемого пакетом программ Test Commander (c) Great...
Описание формата pcx и некоторых утилит pc paintbrush iconЗдесь может быть любой текст
Описание спецификации 1 10. 1 для текстового формата файла описания теста, используемого пакетом программ Test Commander (c) Great...
Описание формата pcx и некоторых утилит pc paintbrush iconИнструкция по установке изложена в файле readme doc
Изменен формат квитанции межуровневого информационного обмена в аис кадры. Обработка квитанций предыдущего формата не поддерживается....
Описание формата pcx и некоторых утилит pc paintbrush iconОписание формата ролика ks2
Ролики представляют собой текстовые файлы,написанные определенным образом. В каждой строке ролика записана команда, заставляющая...
Описание формата pcx и некоторых утилит pc paintbrush iconКраткое описание программы {{workroom: razdel3: inkscape-logo png|}}
Программа позволяет рабтать с контурами, фигурами, текстом, градиентами и импортированной графикой (поддерживается импорт большинства...
Описание формата pcx и некоторых утилит pc paintbrush iconТребуется разработать навигационную gps программу с базовой функциональностью под Windows Mobile/CE
Мат он текстовый и очень простой, его описание занимает всего 5 страниц). Требуется разработать свой защищенный бинарный формат и...
Описание формата pcx и некоторых утилит pc paintbrush iconВ этой статье описание вирусов и способы борьбы с ними: Вирус Cabir
Первый сетевой червь, распространяющийся через протокол Bluetooth и заражающий мобильные телефоны, работающие под управлением os...
Описание формата pcx и некоторых утилит pc paintbrush iconВ этой статье описание вирусов и способы борьбы с ними: Вирус Cabir
Первый сетевой червь, распространяющийся через протокол Bluetooth и заражающий мобильные телефоны, работающие под управлением os...
Описание формата pcx и некоторых утилит pc paintbrush iconФотография Артека с видом на Аюдаг. 1996г artek11. pcx
Фото на Баженовском месторождении Свердловской области на летней минералогалогической школе ekatiri jpg
Разместите кнопку на своём сайте:
txt.rushkolnik.ru



База данных защищена авторским правом ©txt.rushkolnik.ru 2012
обратиться к администрации
txt.rushkolnik.ru
Главная страница