Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно убить TBitmap ?


dimushkin ©   (2003-05-30 09:46:00) 

BM:=TBitmap.Create;
BM.Height:=36;
BM.Width:=36;

...

BM.Free;

казалось бы все правильно НО через определенное колличесво таких вот манипуляций возникает ошибка... такое чувство что паять то освобождается а ресурсы GDI текут...

может кто сталкивался?


panov   (2003-06-03 11:42:00) [1]

>Evgeny © (03.06.03 06:09)

Это не усложнение.
Приведен лишь пример кода из Help.

90% вопросов отпадет, если немного подольше, нежели пара минут, поискать в справке Delphi.


Evgeny   (2003-06-03 06:09:00) [2]

>panov © (01.06.03 23:13)
Ну и зачем в данном случае так усложнять?
Автор так и не привел код, а вы ломаете копья. Может быть он давно все сделал вот и не отзывается.


VMcL   (2003-06-02 02:34:00) [3]

По-вашему в Borland идиоты?

>>Fenik © (31.05.03 11:37)<< правильно написал


panov   (2003-06-01 23:13:00) [4]


procedure TForm1.Button1Click(Sender: TObject);

var
BitMap1,BitMap2 : TBitMap;
MyFormat : Word;
begin
BitMap2 := TBitMap.Create;
BitMap1 := TBitMap.Create;
try
BitMap1.LoadFromFile("c:\Program Files\common Files\Borland Shared\Images\Splash\256color\factory.bmp");
BitMap2.Assign(BitMap1); // Copy BitMap1 into BitMap2
BitMap2.Dormant; // Free up GDI resources
BitMap2.FreeImage; // Free up Memory.
Canvas.Draw(20,20,BitMap2); // Note that previous calls don"t lose the image

BitMap2.Monochrome := true;
( 80,80,BitMap2)


procedure TForm1.Button1Click(Sender: TObject);

var
BitMap1,BitMap2 : TBitMap;
MyFormat : Word;
begin
BitMap2 := TBitMap.Create;
BitMap1 := TBitMap.Create;
try
BitMap1.LoadFromFile("c:\Program Files\common Files\Borland Shared\Images\Splash\256color\factory.bmp");
BitMap2.Assign(BitMap1); // Copy BitMap1 into BitMap2
BitMap2.Dormant; // Free up GDI resources
BitMap2.FreeImage; // Free up Memory.
Canvas.Draw(20,20,BitMap2); // Note that previous calls don"t lose the image

BitMap2.Monochrome := true;
Canvas.Draw(80,80,BitMap2);
BitMap2.ReleaseHandle; // This will actually lose the bitmap;
finally
BitMap1.Free;
BitMap2.Free;
end;
end;


Плохой человек   (2003-06-01 15:40:00) [5]

> ОШИБКА НЕ В БИТМАПЕ А В НЕХВАТКЕ РЕСУРСОВ КОМПА.
ЧТО БЫ НЕ ВОЗНИКАЛО ЭТОЙ ОШИБКА НУЖНО
( BM)

>ОШИБКА НЕ В БИТМАПЕ А В НЕХВАТКЕ РЕСУРСОВ КОМПА.
ЧТО БЫ НЕ ВОЗНИКАЛО ЭТОЙ ОШИБКА НУЖНО
if Assigned(BM) then BM.Destroy
ИЛИ
if Assigned(BM) then BM:=NIL;

BM.Free именно это и делает и именно этим и отличается от BM.Destroy.


Song   (2003-06-01 15:11:00) [6]

2WInAPi Lamer (01.06.03 14:48)
О как :)


WInAPi Lamer   (2003-06-01 14:48:00) [7]

ОШИБКА НЕ В БИТМАПЕ А В НЕХВАТКЕ РЕСУРСОВ КОМПА.
ЧТО БЫ НЕ ВОЗНИКАЛО ЭТОЙ ОШИБКА НУЖНО
if Assigned(BM) then BM.Destroy
ИЛИ
( BM)

ОШИБКА НЕ В БИТМАПЕ А В НЕХВАТКЕ РЕСУРСОВ КОМПА.
ЧТО БЫ НЕ ВОЗНИКАЛО ЭТОЙ ОШИБКА НУЖНО
if Assigned(BM) then BM.Destroy
ИЛИ
if Assigned(BM) then BM:=NIL;


Fenik   (2003-05-31 11:37:00) [8]

У меня прекрасно работает:

Bitmap := TBitmap.Create;
try
...
finally
Bitmap.Free;
end;


Evgeny   (2003-05-31 07:41:00) [9]

Без исходного кода, трудно что-либо сказать, но возможно возникает ситуация когда освобождения битмапа не происходит. Если процесс динамический и часто повторяемый, то вот она и потеря ресурсов.


Плохой человек   (2003-05-30 22:17:00) [10]

У меня похожее было. Я бы на вашем месте ещё перед этим делом делал бы FreeImage.


AlexT1000   (2003-05-30 15:28:00) [11]

дело не в битмапе. ищи ошибку в другом месте своей проги


Дмитрий К.К.   (2003-05-30 15:23:00) [12]

Про try-finally-end не слыхал?


pasha676   (2003-05-30 12:39:00) [13]

Может надо
Bitmap.Free;
Bitmap:=nil;

Хотя лично мне кажется что ошибка не в битмапе.


dimushkin   (2003-05-30 10:39:00) [14]

BM.FREE есть не что иное как :
if Assigned(BM) then BM.Destroy;

кстати так у меня в проге BM и убивается
:-(


Might   (2003-05-30 10:31:00) [15]

Можно попробовать:
BM.Destroy


Наверх

Титульная страница Поиск, карта сайта Написать письмо