Помощь - Поиск - Пользователи - Календарь
Полная версия: Вставка картинок в Pascal
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Katja
Подскажите пожалуйста, как вставить bmp картинку в Borland Pascal
Altair
Стандартных процедур в Паскале нет, надо использовать специальные модули, такие модули можно найти в интернете, даже на этом форуме я выкладывал модуль
BMP в разделе "Тестовый форум" тема TEST с автором Oleg_z
Чтобы использовать этот модуль, его надо откомпилировать,
(COMPILE->Destination disk, COMPILE->COMPILE), а в своей программе
в сроке USES прописать его, тогда станет доступна процедура
SBMI(FILEname:string; X,Y:Word; FDR:Integer),
где FILEname - путь к BMP файлу,
X,Y -координаты экрана, начиная с которых надо выводить рисунок( т.е если X=0, Y=0, то рисунок будет выведен в верхнем левом углу)
FDR - число показывающая смещение цвета, если вам нужно вывести рисунок такой, какой он виден в PAINT , то FDR равен 0
-----------------------------
Если вас интерисует структура BMP фала, то такую информацию легко найти
в интеренте:
http://www.wotsit.org - там есть описание многих типов файлов
CJ
Качай с моего сайта модуль для работы с bmp и никаких проблем!
яЕПЦХЕМЙН юМРНМ
help me ъ ОПХДСЛЮК ЙПСРНИ ЛЕРНД ЯФЮРХЪ ЦПЮТХВЕЯЙНИ ХМТНПЛЮЖХХ. еЯКХ ОНКСВХРЯЪ РН НМ ОЕПЕОКЧМЕР БЯЕ ЦХТШ, ДФЕОЕЕЦХ Х Р. Д. оПХ ЩРНЛ ОПНЖЕМР ОНРЕПХ ХМТНПЛЮЖХХ 0 ОПНЖЕМРНБ. бНГЛНФМН Ъ Х НЬХАЮЧЯЭ, МН ОПЕДБЮПХРЕКЭМШЕ ПЮЯЯВЕРШ ОНЙЮГЮКХ, ВРН РЮЙ ХЛЕММН Х АСДЕР.
ъ ГМЮЧ delphi мн ъ ме гмюч йюй напюрхрэяъ й йюфдни рнвйе BMP ТЮИКЮ, Х ЙЮЙ ОНРНВЕВМН ЯНГДЮРЭ МНБШИ ТЮИК..
онлн-н-н-н-цхре!!
sergienkoanton@mail.ru
APAL
Перевожу:
Цитата
help me Я придумал крутой метод сжатия графической информации. Если получится то он переплюнет все гифы, джепееги и т. д. При этом процент потери информации 0 процентов. Возможно я и ошибаюсь, но предварительные рассчеты показали, что так именно и будет.
Я знаю delphi НО Я НЕ ЗНАЮ КАК ОБРАТИТЬСЯ К КАЖДОЙ ТОЧКЕ BMP файла, и как поточечно создать новый файл..
ПОМО-О-О-О-ГИТЕ!!
sergienkoanton@mail.ru
Altair
Ачто за кодировка?
APAL, ты у нас прямо перекодировщик

Антон, а про метод сжатия можно подробнее?

(юМРНМ=Антон) smile.gif
APAL
Цитата(Oleg_Z @ 21.10.04 12:46)
Ачто за кодировка?
APAL, ты у нас прямо перекодировщик

KOI

Так показал Штирлиц вер.4
Altair
А у меня 4.01 версия... smile.gif У меня тоже. (APAL)
кстати КОИ - международный сетевой стандарт, не понимаю, почему весь рунет почти на вин кодироке...
xds
Прошу прощения за оффтоп, даже БК-001x использует КОИ8-Р smile.gif
P@sh@
яЕПЦХЕМЙН юМРНМ
BMP-файл состоит из трех основных блоков: заголовок, палитра, массив пикселей. в заголовке задаются размеры, цветность. если цвет 24 или 32 бита, то палитра не нужна и массив будет не из байтов-номеров цветов, а из самих цветов, 3х или 4х-байтовых... с 15/16-битным цветом вроде бы и так и так можно делать, хотя по идее тоже без палитры должно быть, не знаю...

проще всего сделать с 32-битным цветом:
Код
var  data: array of TColor; //или просто of integer
    //это будет массив точек

    head: TBMPHeader; //это заголовок файла, структуру не помню, поищи на форуме

загружаешь данные из файла:
Код
 blockread(f,head,sizeof(head));
 setlength(data,head.Height,head.Width);
 blockread(f,data,head.Height*head.Width*4);

изменяешь заголовок head и массив data как хочешь...
запись делается аналогично с помощью blockwrite
только надо учитывать, что обычно картинка в BMP-файле хранится вверх ногами... и теоретически картинка может быть сжата (например алгоритмом RLE, это указывается в заголовке), хотя я сжатых BMP ни разу не видел
xds
Цитата(P@sh@ @ 22.10.04 10:30)
Код
var  data: array of TColor; //или просто of integer

Код

 setlength(data,head.Height,head.Width);


а) только не в BP;
б) в общем солучае SizeOf(Integer) <> 4, а SizeOf(LongInt) = 4

В BP придется так:

Код

type
 PBitmapData = ^TBitmapData;
 TBitmapData = array[0..0] of record
   r, g, b,
   Res: Byte;
 end;

var
 Data: PBitmapData;
 DataSize: Word;
 Hdr: TBitmapHdr;

...

 BlockRead(f, Hdr, SizeOf(Hdr));
 DataSize := Hdr.Width * Hdr.Height shl 2;
 GetMem(Data, DataSize);
 BlockRead(f, Data^, DataSize);

...

P@sh@
xds
а он написал, что знает Delphi, вот я и решил, что он на нем будет делать ;)
murphy
Oleg_Z

Цитата
SBMI(FILEname:string; X,Y:Word; FDR:Integer),


чего то у меня не получилось...

Код
program test;
uses bmp, graph, crt;
var gd,gm:integer;
begin
gd:=detect;
initgraph(gd,gm,'D:\TP_71\TP\bgi');
{bar(0,0,20,20);}
SBMI('D:\P.bmp', 0, 0,0 );
readkey;
end.


выводит неизвестно что... sad.gif
SKVOZNJAK
Бмп разные бывают, может этот модуль не все правильно воспринимает. Скажем, не читает информацию (описание) в начале файла, а сразу выводит "мясо" на экран. Попробуй нарисовать простейший бмп из 2-3 вертикальных полосок в разных графических редакторах и разных форматах.
murphy
Шо я только не пробовал. :p6:
sad.gif sad.gif sad.gif sad.gif
:ypr:
Altair
Дык надо графический драйвер нестандартный - VESA256 или SVGA256
(в тесовом форуме все есть)
murphy
Oleg_Z
Скачал VESA256

что мне изменить здесь
Код

gd:=detect;
initgraph(gd,gm,'D:\TP_71\TP\bgi');


чтобы работало ?
:p2:

З.Ы. я не совсем с дровами разобрался
volvo
murphy
Я же, по-моему, в тестовом форуме давал:
Код
var dg, dm: integer;
...
gd:=installuserdriver('VESA256',nil);
initgraph(gd,gm,'');
if graphresult <> grok then halt;
...
murphy
volvo

Ну да :p2: :p2: :p2:

Offtop
У volvo класный аватар :D
murphy
только у меня прога сразу вылетает когда запускаю
Altair
убери вот эту строчку:
Код
if graphresult <> grok then halt;
...
murphy
В том то и дело что убирал blink.gif

вот прога
Код

program test;
uses bmp, graph, crt;
var gd,gm:integer;
begin
{gd:=detect;
initgraph(gd,gm,'D:\TP_71\TP\bgi');
{bar(0,0,20,20);}

gd:=installuserdriver('VESA256',nil);
initgraph(gd,gm,'');
if graphresult <> grok then halt;

SBMI('D:\P2s2.bmp', 0, 0, 0 );
readkey;
end.

помогите :p2:
volvo
murphy
Чем компилируешь? У меня в ТР70 и Vesa и Svga отработали. Я делал так (Vesa - без расширения BGI)
Код

uses bmp, graph, crt;
var gd,gm, err:integer;
begin

gd:=installuserdriver('vesa256',nil);
initgraph(gd,gm,'');
err := graphresult;
if err <> grok then
  begin
    writeln('error: ', grapherrormsg(err));
    readln; halt;
  end;

SBMI('budda.bmp', 0, 0, 0);
readkey;
end.


P.S. файл Vesa.BGI должен быть в той же папке, что и программа...
murphy
Цитата
Чем компилируешь?

TP 7.1

ошибка graphics error (30)

tp 7.0 вобще не находит bmp.tpu (где бы не сувал) blink.gif

всунул

но тоже самое blink.gif
Guest
народ подскажите где можно достать этот файл ---- bmp.tpu (и вообще что еще нужно чтоб картинки грузить????) плз....... :molitva: <<Lego>>
volvo
FAQ: Модули для вывода графики

закрыто.
Тема разобранна до мелочей на форуме... Oleg_Z
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.