Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2015, 11:34   #1
ropblHbl4
 
Регистрация: 22.02.2015
Сообщений: 3
По умолчанию вывести *pcx попиксельно на форму

Доброго времени суток, уважаемые форумчане.
При работе с pcx изображением столкнулся с проблемой его декодирования. Само задание состоит в том, что необходимо считать информацию и пикселях изображения в массив, затем из массива вывести каждый пиксель на форму с помощью функции RGB. Алгоритм кодирования RLE вроде бы прост и понятен. Но я не смог разобраться как именно хранятся байты с информацией о цвете пикселя. Не понимаю что такое "строка разверстки". Привожу нерабочий вариант программы и ошибку, которую она выдает.
Заранее благодарен за помощь. Хотелось бы именно разъяснения по данному вопросу, а не ссылку на информацию о pcx, ибо я не совсем понимаю эту информацию.

Код:
fname:= opendialog1.FileName;
assignfile(f1, fname);
reset(f1, 1);
count:= pos('.pcx', fname);
if count > 0 then
begin
 seek(f1, 1);
 blockread(f1, maspixels, 11);
 versionpcx:= maspixels[1]; //версия файла
 coded:=  maspixels[2]; //закодирована ли информация
 bpp:= maspixels[3]; //bit per pixel
 w:= ((maspixels[9] shl 8) or maspixels[8]) - ((maspixels[5] shl 8) or      maspixels[4]) +1;
 h:= ((maspixels[11] shl 8) or maspixels[10]) - ((maspixels[7] shl 8) or   maspixels[6]) +1;

 seek(f1, 65);
 blockread(f1, maspixels, 3);
 nplanes:= maspixels[1];
 bpl:= (maspixels[3] shl 8) or maspixels[2];

 seek(f1, 128);
 x:=1; y:=1;
 while not eof(f1) do
 begin
 blockread(f1, maspixels, 1);
 if ((maspixels[1] and $C0) = $C0) then
 begin
 count:= (maspixels[1] and $3F);
 blockread(f1, maspixels, 1);
 for x:= 1 to count do
    begin
    matrixpcx[y]:= maspixels[1];
    inc(y);
    end
 end
else
    begin
    matrixpcx[y]:= maspixels[1];
    inc(y)
    end
end
   end
else showmessage('Неверный формат') end;
[IMG][/IMG]

Последний раз редактировалось ropblHbl4; 22.02.2015 в 21:46.
ropblHbl4 вне форума Ответить с цитированием
Старый 22.02.2015, 13:25   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Поищите бесплатную библиотеку GraphicEx.
С её помощью можно работать с РСХ, как с обычным ВМР.
Кстати, она с исходниками...
(Код на форуме оформляется при помощи тега, см. значок # в шапке окна редактирования)
kropotkina-alice вне форума Ответить с цитированием
Старый 22.02.2015, 21:58   #3
ropblHbl4
 
Регистрация: 22.02.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Поищите бесплатную библиотеку GraphicEx.
С её помощью можно работать с РСХ, как с обычным ВМР.
Кстати, она с исходниками...
(Код на форуме оформляется при помощи тега, см. значок # в шапке окна редактирования)
Спасибо за ответ. Я так понимаю, данная библиотека позволяет примерно то же, что и Bitmap для BMP? Вся проблема в том, что подобными "облегчителями" жизни пользоваться мне не позволяют (делаю ргз в универе). Помощь требуется в реализации данной задачи стандартными средствами.

Цитата:
(Код на форуме оформляется при помощи тега, см. значок # в шапке окна редактирования)
Впервые здесь. Всё исправил)
ropblHbl4 вне форума Ответить с цитированием
Старый 22.02.2015, 22:22   #4
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Я недаром обратила ваше внимание, что GraphicEx поставлялась с исходниками.
То есть там можно кое-что подсмотреть
З.Ы.
А вот тут и вовсе о попиксельном выводе на экран:
http://forum.vingrad.ru/sources/topic-157332.html

Последний раз редактировалось kropotkina-alice; 22.02.2015 в 22:26.
kropotkina-alice вне форума Ответить с цитированием
Старый 22.02.2015, 22:51   #5
ropblHbl4
 
Регистрация: 22.02.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Я недаром обратила ваше внимание, что GraphicEx поставлялась с исходниками.
То есть там можно кое-что подсмотреть
З.Ы.
А вот тут и вовсе о попиксельном выводе на экран:
http://forum.vingrad.ru/sources/topic-157332.html
Спасибо. Буду пробовать). Тему пока не закрываю, может кто-то сталкивался с подобной задачей, и может помочь с кодом..
ropblHbl4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести данные клавиатуры на форму Svetlana750231 Общие вопросы Delphi 7 25.12.2011 22:43
Преобразовать 256-цветный PCX файл в 16-цветный PCX файл r_yevgeniy Общие вопросы C/C++ 0 23.10.2011 09:33
как вывести спектр на форму? Roof Общие вопросы Delphi 4 27.07.2008 17:41
Нужно решить и объяснить задачу "В режиме точечной графики попиксельно вывести фразу" Eyeless Фриланс 3 10.01.2008 10:56