Расширение имени файла | .pcx |
---|---|
Тип интернет-СМИ | image/vnd.zbrush.pcx , image/x-pcx (устарело) [1] |
Разработано | Корпорация ZSoft |
Первоначальный выпуск | 1985 ( 1985 ) |
Последний релиз | 5 1991 ( 1991 ) |
Тип формата | Формат растрового изображения без потерь |
PCX , сокращение от PiCture eXchange , — формат файла изображения, разработанный ныне несуществующей корпорацией ZSoft из Мариетты, штат Джорджия , США . Это был собственный формат файла для PC Paintbrush , который стал одним из первых широко принятых стандартов обработки изображений DOS , хотя с тех пор его сменили более сложные форматы изображений, такие как BMP , JPEG и PNG . Файлы PCX обычно хранят изображения с индексацией палитры в диапазоне от 2 или 4 цветов до 16 и 256 цветов, хотя формат был расширен для записи изображений с истинным цветом (24 бита). [2]
PCX был разработан на раннем этапе разработки оборудования для отображения на ПК, и большинство поддерживаемых им форматов больше не используются. В таблице ниже приведен список наиболее часто используемых форматов PCX. Современные программы редактирования изображений могут не читать файлы PCX, соответствующие старому оборудованию.
Глубина цвета | Самолеты | Количество цветов |
---|---|---|
4 | 1 | 16 цветов из палитры |
8 | 1 | 256 цветов из палитры |
8 | 1 | 256 оттенков серого |
4 | 4 | 4096 цветов с 16 уровнями прозрачности |
8 | 3 | 16,7 миллионов, 24-битный «истинный цвет» |
8 | 4 | 16,7 млн с 256 уровнями прозрачности |
1 | 1 | 2 цвета, монохромный (1-бит) (Win 3.1 Paintbrush) |
1 | 4 | 16 цветов RGBi (4-бит) в 4 плоскостях (Win 3.1 Paintbrush) |
PCX поддерживается распространённым программным обеспечением для обработки изображений, включая ACDSee , FastStone , GIMP , ImageMagick , IrfanView , LView , Netpbm , PaintShop Pro , Photoshop , Visio , PMview , XnView и GraphicConverter . [3] [4] В версии 2.1.4 FFmpeg мог кодировать и декодировать форматы пикселей PCX rgb24, rgb8, bgr8, rgb4_byte, bgr4_byte, gray, pal8 и monob . [5]
Существует многостраничная версия PCX, используемая некоторыми программами компьютерной факсимильной связи и управления документами, с расширением файла .dcx
. Файл DCX состоит из заголовка, представляющего набор следующих файлов PCX. [6]
Файлы PCX были разработаны для использования на IBM-совместимых ПК и всегда используют порядок байтов little endian . Файл PCX состоит из трех основных разделов в следующем порядке
Заголовок файла PCX содержит байт идентификатора (значение 10), номер версии, размеры изображения, 16 цветов палитры, количество цветовых плоскостей, глубину цвета каждой плоскости и значение метода сжатия. Номера версий PCX находятся в диапазоне от 0 до 5, что изначально обозначало версию программы PC Paintbrush, использованной для создания файла PCX. В заголовке всегда есть место для 16 цветов, хотя количество используемых цветов зависит от глубины цвета изображения. [ необходимо пояснение ] Заголовок состоит из 18 полей: [7] [2]
Смещенный шестигранник | Смещение дек. | Размер | Цель |
---|---|---|---|
00 | 0 | 1 байт | Поле фиксированного заголовка, имеющее шестнадцатеричное 0x0A значение (= 10 в десятичном формате). |
01 | 1 | 1 байт | Номер версии, относящийся к выпуску программного обеспечения Paintbrush, который может быть:
|
02 | 2 | 1 байт | Метод, используемый для кодирования данных изображения. Может быть:
|
03 | 3 | 1 байт | Количество бит, составляющих одну плоскость. Чаще всего 1, 2, 4 или 8. |
04 | 4 | 2 байта | Минимальная координата x положения изображения. |
06 | 6 | 2 байта | Минимальная координата Y положения изображения. |
08 | 8 | 2 байта | Максимальная координата x положения изображения. |
0А | 10 | 2 байта | Максимальная координата Y положения изображения. |
0С | 12 | 2 байта | Горизонтальное разрешение изображения в DPI. |
0Э | 14 | 2 байта | Вертикальное разрешение изображения в DPI. |
10 | 16 | 48 байт | Палитра EGA для 16-цветных изображений. |
40 | 64 | 1 байт | Первое зарезервированное поле, обычно равное нулю. |
41 | 65 | 1 байт | Количество цветовых плоскостей, составляющих данные пикселей. Чаще всего выбирается 1, 3 или 4. |
42 | 66 | 2 байта | Количество байтов одной цветовой плоскости, представляющих одну строку развертки. |
44 | 68 | 2 байта | Режим, в котором следует трактовать палитру:
|
46 | 70 | 2 байта | Горизонтальное разрешение экрана исходной системы. |
48 | 72 | 2 байта | Вертикальное разрешение экрана исходной системы. |
4А | 74 | 54 байта | Второе зарезервированное поле, предназначенное для будущих расширений и обычно имеющее значение ноль байтов. |
Все файлы PCX используют одну и ту же схему сжатия, а значение сжатия всегда равно 1. Никакие другие значения не определены, и нет никаких несжатых файлов PCX. Один источник утверждает, что 0 (несжатый) допускается , но не так много программного обеспечения поддерживает это . [8]
Данные изображения PCX хранятся в строках или строках сканирования в порядке сверху вниз. Если изображение имеет несколько плоскостей, они хранятся плоскостью внутри строки, так что за всеми красными данными для строки 0 следуют все зеленые данные для строки 0, затем все синие данные, затем альфа-данные. Этот шаблон повторяется для каждой строки, как показано в следующей таблице:
Ряд 0 | РРРРРРР |
ГГГГГГГГ | |
ББББББББ | |
ААААААААА | |
Ряд 1 | РРРРРРР |
ГГГГГГГГ | |
ББББББББ | |
ААААААААА | |
Ряд 2 и т.д. | .... |
Если изображение содержит менее 8 бит на пиксель, каждая строка дополняется до следующей четной границы байта. [7] Например, если изображение имеет 1 плоскость 1-битных данных (монохромных) шириной 22 пикселя, каждая строка будет иметь длину 4 байта, имея 32 бита на строку с 10 неиспользуемыми битами.
Данные изображения PCX сжимаются с помощью кодирования длины серии (RLE), простого алгоритма сжатия без потерь , который сворачивает серию из трех или более последовательных байтов с идентичными значениями в двухбайтовую пару. Два самых значимых бита байта используются для определения того, представляют ли данные данные один пиксель заданного индекса палитры или значения цвета, или пару RLE, представляющую серию из нескольких пикселей одного значения:
Из-за использования двух старших битов в качестве флагов значения пикселей от 192 до 255 (с уже установленным старшим битом) должны храниться в паре байтов RLE, даже если они встречаются только один или два пикселя подряд, тогда как индексы цветов от 0 до 191 могут храниться напрямую или в парах байтов RLE (в зависимости от того, что более эффективно с точки зрения пространства); следовательно, фактическая степень сжатия может быть оптимизирована с помощью правильной сортировки записей палитры, хотя это невозможно, когда файл должен делить свою цветовую палитру с другими изображениями. Например, палитра может быть оптимизирована с наиболее часто используемыми цветами, находящимися в позициях палитры от 0 до 191, а наименее распространенные цвета — в оставшейся четверти палитры.
Еще одна неэффективность алгоритма RLE заключается в том, что можно хранить фрагменты длиной 0, что допускает наличие пробелов в файле. Это позволило распаковывать файлы PCX немного быстрее [ как? ] на процессорах, для которых он изначально предназначался. [ противоречиво ]
Алгоритм сжатия PCX требует очень мало мощности процессора или памяти для применения, что было серьезной проблемой для компьютерных систем, когда он был разработан. Алгоритмы сжатия, используемые в новых форматах изображений, более эффективны при сжатии изображений, таких как фотографии, а также сглаженная или иная сложная графика.
В заголовке файла PCX есть место для 16-цветной палитры. Когда стало доступно 256-цветное VGA-оборудование, в файле PCX не хватило места для палитры; даже 54 неиспользованных байта после заголовка было бы недостаточно. Выбранное решение состояло в том, чтобы поместить палитру в конец файла вместе с байтом-маркером для подтверждения ее существования.
Если файл PCX имеет палитру из 256 цветов, он находится в 768 байтах от конца файла. В этом случае значение в байте, предшествующем палитре, должно быть 12 (0x0C). Палитра хранится как последовательность троек RGB; ее полезная длина определяется количеством цветов в изображении. Значения цветов в палитре PCX всегда используют 8 бит, независимо от битовой глубины изображения.