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

Вниз

Потеря графических ресурсов в 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, но только для изображений одинакового размера.


 
©   (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


 
©   (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 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.017 c
14-62725
Silentor
2003-01-03 19:48
2003.01.20
Прикол в D5


14-62855
AlexeY_R
2003-01-03 14:39
2003.01.20
КРЭК!


7-62861
symbol
2002-11-05 12:31
2003.01.20
Системный динамик


3-62403
viper
2002-12-24 12:07
2003.01.20
DBGrid


3-62393
Sergy
2002-12-25 15:09
2003.01.20
DBgrid и MultiSelect