![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вывод большого битмапа [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.
И в чем это проявляется?