Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.011 c
6-62680
NickolayLI
2002-11-13 14:59
2003.01.20
Broadcast


14-62761
LongIsland
2003-01-04 14:03
2003.01.20
Координаты окружности


1-62648
lamak
2003-01-08 18:44
2003.01.20
Отображение файла в 16-тиричной системе


1-62660
Johnny
2003-01-09 22:53
2003.01.20
TImage:вопросик


1-62566
Kaylie
2003-01-11 13:18
2003.01.20
Создание компонент





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский