IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> вывод на экран Pcx
Akira
сообщение 21.04.2004 21:11
Сообщение #1


Гость






Как вывести графический файлик PCX на экран?
Очень срочно надо, а то что видел почему-то не работает :-(
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
sembler
сообщение 19.05.2004 17:16
Сообщение #2





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Я сделал это! Ура! Точнее, я посоеденял куски разных кодов в один smile.gif Большущее спасибо всем, кто мне помог. Особенно Дарку, я требую, чтобы модеры вручили ему один "плюсик", а лучше не один.

Работает это в 256 цветах, на драйвере svga256.bgi. Короче всем ещё раз спасибо!

program kurswork;
uses crt, graph;
type

Tarray64k=array[0..65534] of byte;

RGB = record
Red,
Green,
Blue: Byte;
end;

header=record
Maker : Byte;
Version : Byte;
Code : Byte;
BitsPerPixel : Byte;
XLow : Word;
YLow : Word;
XHigh : Word;
YHigh : Word;
Hres : Word;
Vres : Word;
Palette : array [0..15] of RGB;
VMode : Byte;
PlaneCount : Byte;
BytesPerLine : Word;
Reserved : array [0..59] of byte;
end;

var Palette : array[0..255] of RGB;
pcx : header;
f : file;
gd,gm,i,j : integer;
x,y : word;
buf : ^Tarray64k;
fsize : longint;
c : byte;
res : word;
count : longint;
m : longint;
ex,ey : word;
l : word;
adress : string;

begin readln(adress);
assign(f,adress);
reset(f,1);
blockread(f, pcx, 128);

gd:= InstallUserDriver('SVGA256',@gd); gm:= 9;
InitGraph(gd, gm, '');

fsize:=filesize(f);
Seek(f, fsize-768);
for i:=0 to 255 do
begin
BlockRead(f, Palette[i].red, 1);
Palette[i].red:=Palette[i].red shr 2;
BlockRead(f, Palette[i].green, 1);
Palette[i].green:=Palette[i].green shr 2;
BlockRead(f, Palette[i].blue, 1);
Palette[i].blue:=Palette[i].blue shr 2;
end;
for i:=0 to 255 do
begin
port[$3C6]:= $FF;
port[$3C8]:= i;
port[$3C9]:= Palette[i].red;
port[$3C9]:= Palette[i].green;
port[$3C9]:= Palette[i].blue;
end;

seek(f,128);
getmem(buf,65535);

x:=0; y:=0; c:=0; count:=0;

for i:= 1 to (fsize div 65535)+1 do
begin
blockread(f,buf^,65535,res);
ey:=pcx.yhigh-pcx.ylow+1;
ex:=pcx.xhigh-pcx.xlow+1;
m:=0;
while (m<res) and (y<ey) do
begin
if c<>0
then
begin
for l:=1 to c do
begin
PutPixel(x,y,buf^[m]);
inc(x);
end;
inc(count,c);
c:=0;
end
else
if (buf^[m] and $c0=$c0)
then
c:=buf^[m] and $3f else
begin
PutPixel(x,y,buf^[m]);
Inc( X );
inc(count,1);
end;
inc (m);
IF X >= eX THEN
BEGIN
x:=0;
Inc( Y )
END
end;
end;
freemem(buf,65535);
close(f);

repeat;
until keypressed;
CloseGraph;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 23.07.2025 17:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"