Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Вставка картинок в Pascal

Автор: Katja 2.04.2004 17:32

Подскажите пожалуйста, как вставить bmp картинку в Borland Pascal

Автор: Altair 2.04.2004 19:10

Стандартных процедур в Паскале нет, надо использовать специальные модули, такие модули можно найти в интернете, даже на этом форуме я выкладывал модуль
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 13.04.2004 2:39

Качай с моего сайта модуль для работы с bmp и никаких проблем!

Автор: яЕПЦХЕМЙН юМРНМ 21.10.2004 15:36

help me ъ ОПХДСЛЮК ЙПСРНИ ЛЕРНД ЯФЮРХЪ ЦПЮТХВЕЯЙНИ ХМТНПЛЮЖХХ. еЯКХ ОНКСВХРЯЪ РН НМ ОЕПЕОКЧМЕР БЯЕ ЦХТШ, ДФЕОЕЕЦХ Х Р. Д. оПХ ЩРНЛ ОПНЖЕМР ОНРЕПХ ХМТНПЛЮЖХХ 0 ОПНЖЕМРНБ. бНГЛНФМН Ъ Х НЬХАЮЧЯЭ, МН ОПЕДБЮПХРЕКЭМШЕ ПЮЯЯВЕРШ ОНЙЮГЮКХ, ВРН РЮЙ ХЛЕММН Х АСДЕР.
ъ ГМЮЧ delphi мн ъ ме гмюч йюй напюрхрэяъ й йюфдни рнвйе BMP ТЮИКЮ, Х ЙЮЙ ОНРНВЕВМН ЯНГДЮРЭ МНБШИ ТЮИК..
онлн-н-н-н-цхре!!
sergienkoanton@mail.ru

Автор: APAL 21.10.2004 15:38

Перевожу:

Цитата
help me Я придумал крутой метод сжатия графической информации. Если получится то он переплюнет все гифы, джепееги и т. д. При этом процент потери информации 0 процентов. Возможно я и ошибаюсь, но предварительные рассчеты показали, что так именно и будет.
Я знаю delphi НО Я НЕ ЗНАЮ КАК ОБРАТИТЬСЯ К КАЖДОЙ ТОЧКЕ BMP файла, и как поточечно создать новый файл..
ПОМО-О-О-О-ГИТЕ!!
sergienkoanton@mail.ru

Автор: Altair 21.10.2004 15:46

Ачто за кодировка?
APAL, ты у нас прямо перекодировщик

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

(юМРНМ=Антон) smile.gif

Автор: APAL 21.10.2004 16:16

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

KOI

Так показал Штирлиц вер.4

Автор: Altair 21.10.2004 16:36

А у меня 4.01 версия... smile.gif У меня тоже. (APAL)
кстати КОИ - международный сетевой стандарт, не понимаю, почему весь рунет почти на вин кодироке...

Автор: xds 21.10.2004 17:07

Прошу прощения за оффтоп, даже БК-001x использует КОИ8-Р smile.gif

Автор: P@sh@ 22.10.2004 14:30

яЕПЦХЕМЙН юМРНМ
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 23.10.2004 12:04

Цитата(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@ 26.10.2004 14:20

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

Автор: murphy 27.12.2004 1:52

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 27.12.2004 2:16

Бмп разные бывают, может этот модуль не все правильно воспринимает. Скажем, не читает информацию (описание) в начале файла, а сразу выводит "мясо" на экран. Попробуй нарисовать простейший бмп из 2-3 вертикальных полосок в разных графических редакторах и разных форматах.

Автор: murphy 27.12.2004 3:59

Шо я только не пробовал. :p6:
sad.gif sad.gif sad.gif sad.gif
:ypr:

Автор: Altair 27.12.2004 19:46

Дык надо графический драйвер нестандартный - VESA256 или SVGA256
(в тесовом форуме все есть)

Автор: murphy 28.12.2004 0:16

Oleg_Z
Скачал VESA256

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

Код

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


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

З.Ы. я не совсем с дровами разобрался

Автор: volvo 28.12.2004 0:21

murphy
Я же, по-моему, в тестовом форуме давал:

Код
var dg, dm: integer;
...
gd:=installuserdriver('VESA256',nil);
initgraph(gd,gm,'');
if graphresult <> grok then halt;
...

Автор: murphy 28.12.2004 0:33

volvo

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

Offtop
У volvo класный аватар :D

Автор: murphy 28.12.2004 0:41

только у меня прога сразу вылетает когда запускаю

Автор: Altair 28.12.2004 0:58

убери вот эту строчку:

Код
if graphresult <> grok then halt;
...

Автор: murphy 28.12.2004 3:32

В том то и дело что убирал 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 28.12.2004 4:14

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 28.12.2004 4:19

Цитата
Чем компилируешь?

TP 7.1

ошибка graphics error (30)

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

всунул

но тоже самое blink.gif

Автор: Guest 30.06.2005 0:10

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

Автор: volvo 30.06.2005 0:14

http://forum.pascal.net.ru/index.php?showtopic=4533&view=findpost&p=38204

закрыто.
Тема разобранна до мелочей на форуме... Oleg_Z