Форум: "WinAPI";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Вниз
Потеря графических ресурсов в TBITMAP Найти похожие ветки
← →
MrAngel (2002-11-18 12:01) [0]Ребята я использую класс TBitmap и при рисовании его на форме при помощи BitBlt или Canvas.Draw иногда теряется изображение с TBitmap. Кстати если попробовать при этом записать TBitmap.SavetoFile вылетает ошибка Out Of Resources, но только после того как пропадёт изображение.
Может кто знает почему так....
← →
LongIsland (2002-11-18 12:08) [1]Можно попробовать Bitmap.PixelFormat:=pf24bit;
← →
MrAngel (2002-11-18 12:11) [2]У меня уже сразу при загрузке изображения делается 24 битный формат...
← →
LongIsland (2002-11-18 12:16) [3]В смысле?
← →
MrAngel (2002-11-18 12:20) [4]Ну после загрузки делаю Bitmap.PixelFormat:=pf24bit;
← →
LongIsland (2002-11-18 12:23) [5]А код можешь привести?
← →
MrAngel (2002-11-18 12:31) [6]Код примерно такой...
var mas:array [0..100] of TBitmap
procedure load;
var i:integer;
begin
for i:=0 to 100 do
begin
mas:=TBitmap.Create;
mas.LoadFromFile("......\asd\asd"+IntToStr(i)+".bmp");
mas.PixelFormat:=pf24bit;
end;
end;
procedure draw(index);
begin
Canvas.Draw(0,0,mas[index]);
end;
Сначала естественно вызываю load затем рисую картинку с нужным индексом draw(index)
Ето я привёл слишком упрощённый код в моей программе - на самом деле листинг занимает на много больше места... т.к. картинки загружаются терез поток в массив, кот затем обрабатывается в главном модуле программы...
Но главную идею я привёл...
Кстати рисование картинок происходит один за другим быстро может изза этого пропажа данных у меня???
← →
LongIsland (2002-11-18 12:50) [7]А если попробовать CopyRect?
← →
MBo (2002-11-18 13:09) [8]1)Рисуй в обработчике OnPaint
2) Одна переменная для кучи объектов - старая ссылка постоянно теряется, утечка памяти и "пропажа данных "
← →
han_malign (2002-11-18 13:26) [9]for i:=0 to 100 do
begin
mas [i]:=TBitmap.Create;
mas [i].LoadFromFile("......\asd\asd"+IntToStr(i)+".bmp");
mas [i].PixelFormat:=pf24bit;
end;
это во первых
Во вторых 100 битмапок для одного приложения это очень много, ресурсов вполне может не хватить, обычно это делается глифами, то есть все изображения лежат в одной битмапке и при работе вырезаются из нужного места (1 системный объект вместо 100), по этому принципу работает ImageList, но только для изображений одинакового размера.
← →
k (2002-11-18 20:06) [10]недавно вычитал, что общее количество графических дескрипторов (hdc, brushes, pens и тп) не может превышать 16384
← →
MrAngel (2002-11-19 15:32) [11]LongIsland © (18.11.02 12:50) Спасибо за идею - попробую...
MBo © (18.11.02 13:09)
1 Я так и делаю
2 Теряются только данные - возможно не графические а какойнибудь дескриптор, т.к. Width и Height сохраняют свои значения.
han_malign © (18.11.02 13:26) В своё время приложение делало около 1000 картинок - ситуация была такая же.
To ALL - Дело в том что пропажа данных идёт после прорисовки картитнки в первый раз на HDC и без разницы что я использую или BitBlt или Draw(X,Y:Integer;G:TGraphic)...
Тут недавно нашёл в TBitmap.Dormant/// В хелпе на аеглийском говорится типа она помогает избежать пропажу данных при прорисовке - однако у меня ничего не получилось - и даже вроде бы прорисовка стала работать медленней.
Короче крыша едет... :-)
← →
Игорь Шевченко (2002-11-19 15:42) [12]k © (18.11.02 20:06)
Воистину не может
← →
MrAngel (2002-11-25 13:18) [13]Ребята ну неужели ни кто не знает ответа?
← →
Игорь Шевченко (2002-11-25 14:16) [14]Так вроде уже ответ сказали - некорректная работа с ресурсами GDI
← →
k (2002-11-25 15:16) [15]я бы убрал
mas[i].PixelFormat:=pf24bit;
зачем? растр из файла загружен, формат пикселя там определен..
>Игорь Шевченко © (19.11.02 15:42)
это очень легко проверить (правда сам пока я этого не делал, поверил наслово)
берешь и создаешь в большом цикле дескрипторы
боьлше 8192 создать в одном процессе не удасться , а в системе (на базе НТ) мах - 16384.
а книга фундаментальная Фень-Юань, толстенная...:)
← →
Игорь Шевченко (2002-11-25 15:34) [16]k © (25.11.02 15:16)
Угу. Хорошая книга. На сон грядущий сотню-другую страниц прочитаешь - день прожит не зря :-)
← →
apay (2002-11-26 01:12) [17]попробуй вставлять mas[?].Dormant, Dormant вроде высвобождает ресурсы GDI.
← →
MrAngel (2002-12-06 14:39) [18]уже пробовал
← →
Danlicha (2002-12-06 14:48) [19]Однозначно "PixelFormat := pf24bit" надо убрать.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c