Вниз
Скачать: CL | DM;

Проблема с TBitmap   Найти похожие ветки 

← →
Priest   (2009-06-23 17:52) [0]

Есть у меня процедура вида
TSampleGrabber.GetBitmap(Bitmap:....)
Получает битмап и записывает в него изображение с УСБ видеокамеры. И этой процедуре есть строчки вида

BitmapHandle := CreateDIBSection(0, PBitmapInfo(BIHeaderPtr)^,
                                        DIB_RGB_COLORS, DIBPtr, 0, 0);
..................................
hr := SampleGrabber.GetCurrentBuffer(BufferLen, DIBPtr);
........................................................................
Bitmap.Handle := BitmapHandle;


Получается, что в DIBPtr выделяется память а затем у меня происходит утечка, т.к.  я вызываю TSampleGrabber.GetBitmap несколько раз. Как корректно очистить  этот указатель?


← →
Игорь Шевченко ©   (2009-06-23 19:47) [1]

мало строчек для ответа на вопрос


← →
Sapersky   (2009-06-24 14:39) [2]

Получается, что в DIBPtr выделяется память а затем у меня происходит утечка

Предположительно или точно происходит?
По-моему TBitmap.SetHandle должен прибить предыдущий битмап по его хэндлу (указатель для этого необязательно иметь), так что ничего не утечёт. Другое дело, что нет особого смысла перевыделять битмап для каждого кадра. Может, получать картинку прямо в TBitmap, ну там на первом кадре установить ему размеры на основе BIHeaderPtr и потом подсовывать вместо DIBPtr Bitmap.Scanline[Height-1].


← →
Priest   (2009-06-24 15:15) [3]

ПРоблема в следующем. Вызываю TSampleGrabber.GetBitmap(Bitmap:....) если при вызове процедуры не происходит ошибок (нехватка памяти), то в конце работы с Битмапом я вызываю


procedure ClearBitmap(B:TBitmap);
 begin
  if not B.HandleAllocated then Exit;
  B.Dormant;
  B.FreeImage;
  DeleteObject(B.Handle);
  B.ReleaseHandle;
 end;

Эта последовательность очищает битмап. НО если происходит ошибка нехватки памяти, то на строчке B.Dormant; у меня происходит исключение и в памяти остаётся картинка. Затем я считываю повторно и всё нормально вывожу. НО в памяти так и не могу удалить предыдущее изображение. ЧТо делать?


← →
Sapersky   (2009-06-24 15:48) [4]

Не знаю, не разбираюсь я в TBitmap и не понимаю, зачем все эти пляски с бубном. FreeImage разве не достаточно?
Но в любом случае лучше заранее выделить битмап (см. [2]) для всех кадров, чем выделять/освобождать каждый кадр.



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
4-1215102058
NIZAM
2008-07-03 20:20
2009.08.23
ОТКРЫРЬ ПАПКУ С ЗАДАННЫМ ФАЙЛОМ


2-1245751544
vvrz
2009-06-23 14:05
2009.08.23
Как сохранить строку с двойным апострофом


15-1245614869
Ebulfez
2009-06-22 00:07
2009.08.23
Kak shifrovat moy proqram


15-1245665286
Style
2009-06-22 14:08
2009.08.23
php mssql


15-1245443402
Юрий
2009-06-20 00:30
2009.08.23
С днем рождения ! 20 июня 2009 суббота




   Наверх