Кіріспе
Сурет файл форматы
the image file format
PCX (PiCture eXchange) – АҚШ-тың Джорджия штатындағы Мариетта қаласында орналасқан, қазір құлап қалған ZSoft Corporation компаниясы әзірлеген сурет файл форматы. Бұл формат PC Paintbrush бағдарламасы үшін негізгі файл форматы болды және DOS жүйесінде кеңінен қолданылатын алғашқы бейнелеу стандарттарының біріне айналды. Бірақ қазіргі таңдағыда BMP, JPEG және PNG сияқты жетілдірілген сурет форматтарымен алмастырылды. PCX файлдары көбінесе 2 немесе 4 түстен бастап 16 және 256 түске дейінгі палитралық индекстелген суреттерді сақтайды, алайда бұл формат 24 биттік түсті суреттерді жазу мүмкіндігіне де ие.
PCX кескін пішімдері
PCX компьютерлік дисплей аппараттарының дамуының басында жасалған, ал оның қолдаған көптеген форматтары қазір қолданылмайды. Төмендегі кестеде ең көп қолданылатын PCX форматтарының тізімі келтірілген. Заманауи кескінді өңдеу бағдарламалары ескі аппараттық құрылғыларға сәйкес PCX файлдарын оқуға мүмкін болмайды. + Көп қолданылатын PCX кескін форматтары Бит тереңдігі Жазылымдар Түстер саны 4 1 Палитрадан 16 түс 8 1 Палитрадан 256 түс 8 1 256 сұр түс 4 4 16 мөлдірлік деңгейімен 4096 түс 8 3 16,7 миллион, 24 бит "шынайы түс" 8 4 256 мөлдірлік деңгейімен 16,7 миллион 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 сияқты көптеген бейне өңдеу бағдарламалары қолдайды. FFmpeg 2.1.4 нұсқасы rgb24, rgb8, bgr8, rgb4 байт, bgr4 байт, сұр, pal8 және monob пиксел форматтарын кодтауға және декодтауға қабілетті. PCX-тің көп беттік нұсқасы бар, ол кейбір компьютерлік факс және құжат басқару бағдарламаларында dcx кеңейтіммен қолданылады. DCX файлы келесі PCX файлдар жиынтығын таныстыратын тақырыптан тұрады.
PCX is supported by common image processing software including ACDSee, FastStone, GIMP, ImageMagick, IrfanView, LView, Netpbm, PaintShop Pro, Photoshop, Visio, PMview, XnView and GraphicConverter. In version 2.1.4 FFmpeg could encode and decode the PCX pixel formats rgb24, rgb8, bgr8, rgb4 byte, bgr4 byte, gray, pal8, and monob. There is a multi page version of PCX, used by some computer fax and document management programs, with file extension dcx. A DCX file consists of a header introducing a set of following PCX files.
Кескін деректерінің макетін
PCX кескін деректері жоғарғыдан төменге қарай қатарларда немесе сканерлеу сызықтарында сақталады. Егер кескінде бірнеше жазықтық болса, олар қатар ішінде жазықтықтар бойынша сақталады, яғни 0-қатардағы барлық қызыл деректерден кейін 0-қатардағы барлық жасыл деректер, содан кейін барлық көк деректер, содан кейін альфа деректер орналасады. Бұл үлгі әрбір жол үшін келесі кестеде көрсетілгендей қайталанады:
+ PCX кескін деректері түс жазықтықтары бойынша реттелген 0-қатар Қызыл Қызыл Қызыл Қызыл Қызыл Қызыл Қызыл Қызыл Қызыл Жасыл Жасыл Жасыл Жасыл Жасыл Жасыл Жасыл Жасыл Жасыл Көк Көк Көк Көк Көк Көк Көк Көк Көк Альфа Альфа Альфа Альфа Альфа Альфа Альфа Альфа Альфа 1-қатар Қызыл Қызыл Қызыл Қызыл Қызыл Қызыл Қызыл Қызыл Қызыл Жасыл Жасыл Жасыл Жасыл Жасыл Жасыл Жасыл Жасыл Жасыл Көк Көк Көк Көк Көк Көк Көк Көк Көк Альфа Альфа Альфа Альфа Альфа Альфа Альфа Альфа Альфа 2-қатар т.б. Егер кескін пикселге 8 биттен аз болса, әрбір жол келесі жұп байт шекарасына дейін толтырылады. Мысалы, егер кескінде 1 биттік деректің 1 жазықтығы (монохромды) болса және ені 22 пиксел болса, әрбір жолдың ұзындығы 4 байт болады, әрбір жолда 32 бит болады, ал 10 биті пайдаланылмайды.
Кескін деректерін сығыстыру
PCX кескін деректері қарапайым жоғалтусыз сығылу алгоритмі (RLE) арқылы сығылады, ол бірдей мәндері бар үш немесе одан көп байттар тізбегін екі байттық жұпқа біріктіреді. Байттың ең маңызды екі биті берілген палитра индексі немесе түс мәнінің жалғыз пикселін, немесе бір мәнді білдіретін бірнеше пиксельді білдіретін RLE жұбын анықтау үшін қолданылады: Егер екі биті де 1 болса, байт орындалу ұзындығы ретінде қарастырылады. Бұл нақты орындалу ұзындығы үшін 6 бит қалдырады, ол 0-ден 63-қа дейінгі диапазонды құрайды. Кез келген басқа жағдайда, байт жалғыз пикселдік мән ретінде қарастырылады. Бұл #7 және #8 биттері бір уақытта 1-ге тең емес барлық мәндерді қалдырады. Бұл 192-ден төменгі барлық мәндерді бір байтқа кодтауға мүмкіндік береді. Екі ең маңызды битті флагтар ретінде пайдаланудың нәтижесінде, 192-ден 255-ке дейінгі пикселдік мәндер (олардың ең маңызды биті бұрыннан белгіленген) тіпті олар қатарынан бір немесе екі пиксел ғана кездессе де, RLE байт жұбында сақталуы керек, ал 0-ден 191-ге дейінгі түс индекстерін тікелей немесе RLE байт жұбында сақтауға болады (қайсысы кеңістік тұрғысынан тиімдірек болса); сондықтан палитра жазбаларын дұрыс сұрыптау арқылы нақты сығылу коэффициентін оңтайландыруға болады, бірақ бұл файл түс палитрасын басқа кескіндермен бөлісуі керек болған жағдайда мүмкін емес. Мысалы, палитраны палитраның 0-ден 191-ге дейінгі орындарында ең көп қолданылатын түстермен және палитраның қалған бөлігіне бөлінген ең сирек кездесетін түстермен оңтайландыруға болады. RLE алгоритмінің тағы бір кемшілігі – файлда бос орынға мүмкіндік беретін 0 ұзындығы бар бөліктерді сақтау мүмкіндігі. Бұл PCX файлдарын бастапқыда арналған процессорларда сәл жылдам декомпрессиялауға мүмкіндік берді. PCX сығылу алгоритміне процессордың өте аз қуаты немесе жады қажет, ол жобаланған кезде компьютерлік жүйелер үшін маңызды мәселе болды. Жаңа кескін форматтарында қолданылатын сығылу алгоритмдері, мысалы, фотосуреттерді және дитерленген немесе күрделі графикаларды сығылғанда тиімдірек.
If both bits are 1, the byte is interpreted as the run length. This leaves 6 bits for the actual run length value, a range of 0 63. In any other case, the byte is interpreted as a single pixel value. This leaves all values for which bit #7 and bit #8 are not 1 at the same time. This allows all values under 192 to be encoded in a single byte. Due to the use of the two most significant bits as flags, pixel values from 192 to 255 (with their most significant bit already set) must be stored in an RLE byte pair, even when they only occur one or two pixels in succession, whereas color indexes 0 to 191 can be stored directly or in RLE byte pairs (whichever is more space efficient); therefore, the actual compression ratio could be optimized with proper sorting of palette entries, though this is not feasible where the file must share its color palette with other images. For example, a palette could be optimized with the most commonly used colors occurring in palette positions 0 to 191 and the least common colors allocated to the remaining quarter of the palette. Another inefficiency with the RLE algorithm is that it is possible to store chunks with a length of 0, which allows whitespace in the file. This allowed PCX files to be decompressed slightly faster on the processors it was originally intended for. The PCX compression algorithm requires very little processor power or memory to apply, a significant concern with computer systems when it was designed. Compression algorithms used by newer image formats are more efficient when compressing images such as photographs, and dithered or otherwise complex graphics.
Түстер палитрасы
PCX файлының бас жағында 16 түстік палитраға орын қарастырылған. 256 түсті VGA жабдығы қолжетімді болған кезде, PCX файлында палитраға жеткілікті орын болмады; тіпті бас жазбадан кейінгі 54 байт та жеткіліксіз болды. Осы мәселені шешу үшін палитра файлдың соңына, оның бар екенін растау үшін маркер байтымен бірге орналастырылды. Егер PCX файлы 256 түстік палитраны қамтитын болса, ол файлдың соңынан 768 байттан кейін табылады. Мұндай жағдайда палитраның алдындағы байттың мәні 12 (0x0C) болуы керек. Палитра RGB үштіктер тізбегі түрінде сақталады; оның қолданылатын ұзындығы кескіндегі түстер санымен анықталады. PCX палитрасындағы түс мәндері бейненің бит тереңдігіне қарамастан, әрқашан 8 биттік болады.