Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вывод большого битмапа [D7, WinXP]


alsov ©   (2005-06-09 11:20:00) 

Приветствую Мастера

Не получается загрузить в битмап расунок размером 4000х4000.
Помниться была тема, но найти не смог.

Подскажите реализацию
Заранее благодарен


Amoeba   (2005-06-09 17:23:00) [1]

Вышлю завтра. Это дело у меня лежит дома.


alsov   (2005-06-09 16:35:00) [2]

адрес без подчеркивания


alsov   (2005-06-09 16:33:00) [3]

/Если интересно, могу выслать мылом./

Буду весьма признателен. Вышлите пожалуйста на _alsov@bk.ru


Amoeba   (2005-06-09 16:07:00) [4]

Вообще-то с такими большими изображениями рекомендуется работать без загрузки в битмап и, соответственно без использования TImage, а путем отрисовки из MemoryMappedFile средствами API на PainBox. Демонстрационный пример (даже с Zoom'ом) есть в книжке Дарахвелидзе и Маркова. Если интересно, могу выслать мылом.


alsov   (2005-06-09 15:11:00) [5]

Не проходит
Мне кажется вся проблема в том что все находится в длл.
Попробовал сделать ехешником - все работает.

Щас написал длл и запихнул туда форму кодом

var
 bmp: TBitmap;
begin
 bmp := TBitmap.Create;
 bmp.Height := 8000;
 bmp.Width := 8000;

 imgCartogram.Picture.Graphic := bmp;
 


Не работает - вылетает пресловетая ошибка о недостатке ресурсов


-=XP=-   (2005-06-09 13:15:00) [6]

Image.Picture.LoadFromFile(<FileName>);
Image.Stretch := true;
Image.Align := alClient;
Image.Autosize := false;


На Zoom Out:
Image.Align := alNone;
Image.SetBounds(Image.Left, Image.Top, Image.Width div 2, Image.Height div 2);


На Zoom In:
Image.Align := alNone;
Image.SetBounds(Image.Left, Image.Top, Image.Width * 2, Image.Height * 2);


На Fit:
Image.Align := alClient;

Сетку отрисовывать в Image.Paint. В противном случае Stretch будет удалять некоторые линии.


alsov   (2005-06-09 12:46:00) [7]

значитса так
если в двух словах
есть картинка в бд (файл)
надо выводить картинку в имедж с дорисовкой на ней сетки (с определенными параметрами)

делаю так
гружу картинку в переменную
вавожу её в размер имежджа (copyrect на image.picture.bmp)
рисую на имедже сетку.

при реализации столкнулся с проблемой, когда изменяешь размер формы (на форме клиентом имейдж) размер битмапа на котором рисуешь не изменяется - решил изменять его руками

сейчас делаю zoom
т.к. надо сделать быстро решил сделать "влоб"
положил имейдж на скроллбокс и зменяю размер имейджа
как тока размер переваливает за 2500х2500 то вылетает ошибка


-=XP=-   (2005-06-09 12:36:00) [8]

Это вообще что? Для какой прикладной задачи?
Поясните, а то мне кажется, что решение у Вас не оптимальное.


alsov   (2005-06-09 12:31:00) [9]

У меня ругань при изменении разеров битмапа Image

Есть процедурка


procedure Draw(ClientRect:TRect; PaintBmp: TBitmap);
begin
 {различные проверки}

 PaintBmp.Height := ClientRect.Bottom;
 PaintBmp.Width := ClientRect.Right;
 {почему то при изменении размеров Image размер его пикчера не меняется, поэтому такие две строки}

 {преобразование размеров Rect для вывода}

 PaintBmp.Canvas.StretchDraw(PictureRect{Rect для вывода}, PictureBmp {загруженная картинка (маленькая) для прорисовки});
end;



эту процедурку вызываю при изменении размеров формы (соответственно и имайджа)

Draw(img.ClientRect, img.Picture.Bitmap);


Значит это все в длл

В ехешнике в начале написал
{$MAXSTACKSIZE 100000000}


TUser   (2005-06-09 12:28:00) [10]

> -=XP=- ©   (09.06.05 12:15) [7]

И из файла тоже грузится весьма быстро, WinXP, D7, C733, RAM 512M.


-=XP=-   (2005-06-09 12:15:00) [11]

У меня с нуля работает:

var
 BMP: TBitmap;
begin
 BMP := TBitmap.Create;
 BMP.PixelFormat := pf24bit;
 BMP.Width := 8000;
 BMP.Height := 8000;
 Image1.Picture.Graphic := BMP;
end;


Программа при этом 190 МБ памяти использует.
Приведите свой код.


alsov   (2005-06-09 12:08:00) [12]

не помогло


-=XP=-   (2005-06-09 11:58:00) [13]

Или


alsov   (2005-06-09 11:57:00) [14]

дело в том что у меня дллка,
{$MAXSTACKSIZE 100000000} устанавливать в ней или в загружающим её ехешнике?


-=XP=-   (2005-06-09 11:56:00) [15]

{$MAXSTACKSIZE 100000000}
program YourProgramName;


alsov   (2005-06-09 11:39:00) [16]

EOutOfResources 'Недостаточно памяти для обработки команды'


-=XP=-   (2005-06-09 11:34:00) [17]

Не получается загрузить в битмап расунок размером 4000х4000.

И в чем это проявляется?


Наверх

Титульная страница Поиск, карта сайта Написать письмо