![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не работает большой Image [D5]
Jimmy © (2006-08-14 00:42:00)Когда в пустуй проект вставляю Image, то он позволяет делать свои размеры 5000х5000 пикселей и затем рисовать на нем. А когда пытаюсь это сделать в своем графическом редакторе с кучей разных объектов, то даже при попытке установить размеры Image'а 2200х2200 выдается ошибка "Не хватает ресурсов" на строке Image1.Canvas.Pen.Color:=clWhite. Подскажие как быть. Заранее спасибо.
Stexen (2006-08-15 09:43:00) [1]Ну вот тот же фотошоп изначально разрабатывался под маки, в которых было очень плохо реализована работа с файлом подкачки, ввиду чего, он работает со своими файлами подкачки...
А с выводом наооборот ничего сложного нет, просто выводишь ту чусть картинки которая тебе нужна и все, для начала ты просто разберись например с форматом bmp и непосредственно считывай те части из файла которые тебе нужны...
ну и с CreateFileMapping тоже бы не помешало... :)
Мефисто (2006-08-14 21:14:00) [2]
> 2. Тот же фотошоп вроде так и делает: если рисунок большой
> он часто обращается к диску. Вопрос в том КАК организовать
> работу с рисунком, если в памяти хранится только его часть?
>
Файл проецируемый в физическую память (посик по: CreateFileMapping).
> 3. Заметил интересную вещь: если громадных Image-ей несколько,
> но с предельно допустимыми размерами, то ошибки нет!
Повторим еще раз. Ресурсы не резиновые... :)
> Как выводить рисунок на экран?
Всмысле? не понял вопроса.
> И как сохранять в файл?
Зависит от реализации всего этого действа в целом. Изучив работу с проекцией файлов в физическую память, можно будет и сохранить нужную часть в файл. Если погуглить, то по CreateFileMapping можно найти немало статей.
Jimmy (2006-08-14 20:23:00) [3]1. Если работать с Bitmap:=TBitmap.Create; то он ведет себя также как и Image: при тех же самых размерах выдает ту же ошибку. Это не выход.
2. Тот же фотошоп вроде так и делает: если рисунок большой он часто обращается к диску. Вопрос в том КАК организовать работу с рисунком, если в памяти хранится только его часть?
3. Заметил интересную вещь: если громадных Image-ей несколько, но с предельно допустимыми размерами, то ошибки нет! Если пойти по этому пути (все изображение хранить например на 4-х image-х а не на одном), то тогда возникает всего несколько вопросов. Как рисовать на них - понятно. Как выводить рисунок на экран? И как сохранять в файл? Очень хотелось бы услышать Ваши советы по этим двум вопросам. Если можно поподробнее.
Мефисто (2006-08-14 19:44:00) [4]
> Stexen (14.08.06 17:52) [3]
Конечно зло :) Это поймут, кто более менее представляет механизмы работы TImage, для начинающих это упрощенка для отрисовывания на канве TBitmap т.к. отрисовка OnPaint некоторых начинающих вгоняет в ступор (или некоторые вообще не знают для чего оно надо).
Stexen (2006-08-14 17:59:00) [5]2Jimmy
> Но как тогда быть с отсутствующим свойством Picture, которое
> нужно для SaveToFile, и чем заменить
> Form1.Image2.Picture.Assign(Form1.Image1.Picture.Bitmap);
> , Stretch ?
Bitmap.SaveToFile;
или читаем мануал по разным форматам графических файлов...
///
Var
Tmp: TBitmap;
begin
Tmp := TBitmap.Create;
Tmp.Width := Form1.Image1.Picture.Bitmap.Width;
Tmp.Height := Form1.Image1.Picture.Bitmap.Height;
BitBlt(ля ля ля); //не помню параметры на память, но в мануале точно есть.
end;
Stretch --> StretchBlt;
Вот и не надо ничего юзать от image
Stexen (2006-08-14 17:54:00) [6]2Jimmy
У тебя же все равно все изображение не влазит на экран, так что выводи(храни в памяти) только то, что видит пользователь
Stexen (2006-08-14 17:52:00) [7]Вставь памяти в комп по больше :)
2Мефисто
Только в дельфийском тбитмапе каждая точка описывается integer'ом,по-моему, так что в памяти это будет занимать
5000*5000*32 :) а вообще использовать timage, если о нем идет речь, зло!!!
Jimmy (2006-08-14 15:23:00) [8]PaintBox действительно не выдает такой ошибки! По крайней мере пока.
Особо еще не тестировал. Но как тогда быть с отсутствующим свойством Picture, которое нужно для SaveToFile, и чем заменить
Form1.Image2.Picture.Assign(Form1.Image1.Picture.Bitmap);, Stretch ?
Мефисто (2006-08-14 13:00:00) [9]
> Подскажие как быть.
Не хавать ресурсов. Отрисовывать на TGraphicControl компанентах (например TPainBox).
> Image, то он позволяет делать свои размеры 5000х5000
Я так полагаю увеличиваются размеры TBitmap. Получаем приблизительно следующее: 5000х5000х24bit т.е. 3 байта на одну точку. Щитаем, сколько минимум скушается ресурсов?