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

Вниз

как освободить память после вызова функции?   Найти похожие ветки 

 
Вася   (2013-10-04 14:57) [0]

после каждого вызова функции отхватывается кусок памяти
сама функция:
function set_brignes(aBitMap: TBitmap; k:integer):TBitmap;     //установка яркости
var
Count, v:integer;
pix3in: ^TRGBtriple;
pix4in: ^TRGBQuad;
pix_p:Pointer;
begin
   result:=Tbitmap.Create;
   result.Assign(aBitMap);
   Count:=aBitmap.Height*aBitmap.Width;
   result.BeginUpdate(false);
if aBitMap.pixelformat=pf32bit then
 begin
   pix_p:=result.RawImage.data;
   pix4in:=pix_p;
   repeat
   v:=pix4in^.rgbBlue+k;
   if v<0 then v:=0;
   if v>255 then v:=255;
   pix4in^.rgbBlue:=v;
   pix4in^.rgbGreen:=v;
   pix4in^.rgbRed:=v;
   inc(pix4in);
   dec(count);
   until count<=0;
 end;

if aBitMap.pixelformat=pf24bit then
 begin
   pix_p:=result.RawImage.data;
   pix3in:=pix_p;
   repeat
   v:=pix3in^.rgbtBlue+k;
   if v<0 then v:=0;
   if v>255 then v:=255;
   pix3in^.rgbtBlue:=v;
   pix3in^.rgbtGreen:=v;
   pix3in^.rgbtRed:=v;
   inc(pix3in);
   dec(count);
   until count<=0;
 end;
result.EndUpdate(false);
pix3in:=nil;
pix4in:=nil;
pix_p:=nil;
end;                


вызов ее:
image1.Picture.Bitmap.Assign(set_brignes(WorkBMP, TrackBar1.Position));

P.S. FPC 2.6


 
Sapersky   (2013-10-04 15:27) [1]

Выделять не нужно.
Сделай set_brignes(Src, Dst: TBitmap; k:integer), в Dst передавай image1.Picture.Bitmap.

Вообще, посмотрел бы ты FastLIB что ли, или ещё какую-нибудь библиотеку (Graphics32? хотя она сложновата изнутри, на мой вкус). Если уж не в смысле использовать, то хотя бы в качестве образца, как надо делать. Да и всякая яркость-контраст и проч. велосипеды там давно уже изобретены.


 
Вася   (2013-10-04 15:44) [2]


> Выделять не нужно.

Тоесть получается при
image1.Picture.Bitmap.Assign(set_brignes(WorkBMP, TrackBar1.Position)); данные не копируются, а просто указатель меняется?
Извините если вопросы идиотские, учусь :)


 
Dimka Maslov ©   (2013-10-04 15:46) [3]


>   result:=Tbitmap.Create;


Если создаёшь объект внутри функции, где ты его уничтожаешь?


 
Вася   (2013-10-04 15:52) [4]

да, действительно, каждый раз новый битмап создается, спасибо, понял



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.005 c
2-1381424131
Алла
2013-10-10 20:55
2014.08.31
StringGrid программно переместить выделение


11-1196924275
hornet
2007-12-06 09:57
2014.08.31
Как уничтожить PDataSource


15-1390229340
Пит
2014-01-20 18:49
2014.08.31
Отображаемые элементы в cxGrid


2-1380884262
Вася
2013-10-04 14:57
2014.08.31
как освободить память после вызова функции?


11-1252314935
Dy1
2009-09-07 13:15
2014.08.31
сжатие mdb