Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Вывод большого битмапа   Найти похожие ветки 

 
alsov ©   (2005-06-09 11:20) [0]

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

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

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


 
-=XP=- ©   (2005-06-09 11:34) [1]

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

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


 
alsov ©   (2005-06-09 11:39) [2]

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


 
-=XP=- ©   (2005-06-09 11:56) [3]

{$MAXSTACKSIZE 100000000}
program YourProgramName;


 
alsov ©   (2005-06-09 11:57) [4]

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


 
-=XP=- ©   (2005-06-09 11:58) [5]

Или


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

не помогло


 
-=XP=- ©   (2005-06-09 12:15) [7]

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

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


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


 
TUser ©   (2005-06-09 12:28) [8]

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

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


 
alsov ©   (2005-06-09 12:31) [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}


 
-=XP=- ©   (2005-06-09 12:36) [10]

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


 
alsov ©   (2005-06-09 12:46) [11]

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

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

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

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


 
-=XP=- ©   (2005-06-09 13:15) [12]

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 15:11) [13]

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

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

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

 imgCartogram.Picture.Graphic := bmp;
 


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


 
Amoeba ©   (2005-06-09 16:07) [14]

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


 
alsov ©   (2005-06-09 16:33) [15]

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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
3-1116325528
Dell3r
2005-05-17 14:25
2005.06.29
Ошибка при выполении запроса


14-1117951008
Гарри Поттер
2005-06-05 09:56
2005.06.29
Костя проиграл бой.


6-1112244842
X-Disa
2005-03-31 08:54
2005.06.29
Процесс загрузки в TIdHttp.Get?


4-1114577414
Леприкон
2005-04-27 08:50
2005.06.29
Handle процесса который запустил мой процесс


1-1118133587
LOP
2005-06-07 12:39
2005.06.29
Компоненет к доступу MS Accses