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

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

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

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


Гость






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





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

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


Хельп! Сдача через пару дней, а у меня нифига не готово...
Методом тыка и удаления того, что относится к 256ти цветному pcx'у, в коде Дарка написал вот это:

program z1;
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 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:=detect;
InitGraph(gd, gm, '');
fsize:=filesize(f);
with pcx.palette[i] do setRGBpalette(i,red,green,blue);
{попытка объявления палитры}

seek(f,128);

InitGraph(gd, gm, '');
getmem(buf,65535);
gd:=detect;
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.


В идеале, она должна рисовать 16 цветные pcx'ы. На деле - палитру я объявляю неправильно и, почему-то, рисунка выходит два, а не один.. somebody help me please!

2GLuk
В форуме, впоиске минимум 4 символа, так, что по pcx я ничего не нашёл...
А что за архив? кинь линку, плиз.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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