Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Графика    >>    getimage
   
 
 Формат представления GETIMAGE в памяти   Виктор Вагнер 15.03.1994

Описание структуры для сохранения участка экрана процедурой GetIMage



2k 
 

From: Vitus B. Wagner <vitus@agropc.msk.su> Subj: Формат GetImage (для тех BGI о которых я знаю) Organization: Agroecological problems Center MAlex@jvd.simbirsk.su (Malinovskiy Alex) 15 Mar 1994 wrote: > Subject: Help ! Фоpмат пpедставления GetImage в памяти. > > Я тут немного pешил заняться гpафикой на PASCALе и >может кто подскажет фоpмат пpедставления GetImage в >памяти и адpес видеопамяти. Oleg Ponomarev <oleg@msp.vaz.togliatti.su> отвечал: > На сколько я помню, формат такой : > 1. первые два слова - размер по X и по Y > 2. Собственно имидж (величина его по X д.б. выравнена на границу байта, > т. е., например, если мы берем имидж с X=4, Y=1, то не используемые > биты в байте будут забиты нулями -> ****0000 > 3. Два ахинейских байта. Для чего они нужны я, в свое время, так и не > разобрался. Паскаль сует туда что-то непохожее на случайное, но это > что-то не оказывает, IMHO, не какого влияния на PutImage. > > Содержание собственно имиджа зависит от типа видеоадаптора и видеорежима, > с Геркулесом и CGA все просто, *по-моему*, просто берется соответсвующий > кусок видеопамяти, с EGA (640x350x16) и VGA (640x480x16) немного сложней, > имидж храниться по слоям, а что получится с VGA 320x200 при 256 цветах я > даже не знаю. > >> адpес видеопамяти. > Кажись $A000:$0000 > > Надеюся, что чем-то помог > Олег Пономарев > >(848-2) 39-07-60 (work), (848-2) 37-10-30 (home) Известно, что размер структуры требуемой для сохранения участка экрана процедурой GetIMage равен Число_точек* Log (Число цветов) /8 +6 (Проблема округления см. ниже) 2 Как используются лишние 6 байт: 4 из них - заголовок структуры XSize:Integer; YSize:Integer; При этом для большинства BGI -драйверов XSize=X2-X1 , т.е. на 1 меньше, чем реальный размер сохраненной области. Единственное известное мне исключение - VGA256.BGI у которого XSize=X2-X1+1 YSize по-моему у всех драйверов Y2-Y1, во всяком случае это нетрудно проверить, а мне в исходники своих процедур, генерирующих данные для PutImage лезть лень. Далее идут n байтов данных, организованных в соответствии со структурой видеопамяти данного режима Hercules и Cga 640x200 - 1 бит на пиксел, каждая строка начинается с нового байта, а в конце последнего - ряд неиспользуемых бит (от 0 до 7) CGA 320x200 - 2 бита на пиксел, неисп. бит в конце строки не более 6 EGA,VGA 16 цветов (EGAVGA.VGA, VESA16.BGI) 1 бит на пиксел, каждой строке экрана соответствуют 4 строки в образе, по одной на битовую плоскость. В каком порядке расположены битовые плоскости - не помню, но в PCX формате они строго наоборот. то есть последовательно записываются байты первой плоскости первой строки ......... четвертой плоскости первой строки первой плоскости второй строки ..... четвертой плоскости последней строки 256-цветные режимы (VGA256.BGI, VESA256.BGI) Самое простое - байт на пиксел. Неиспользуемых бит egro нет. Внутри каждой строки первый байт - самый левый, внутри байта самый левый - старший бит. Как устроен Image в режиме EGA 640x350x4 не знаю, но думаю, что так же, как и в 640х350х16, только битовых плоскостей две. В конце структуры есть еще два байта. Зачем они нужны - не знаю. Раньше думал, что контрольная сумма, но многолетний опыт показал, что от их значения работа PutImage никак не зависит. Надеюсь, что мои скромные советы Вам пригодятся. Vitus Wagner. Origin: SoftWeyr