현재 DirectShow를 이용해서 주기적으로 그림파일을 저장하는 프로그램을 만들고 있습니다.
샘플그래버로 raw데이터를 받아와 직접 Graphics::TBitmap에 넣은뒤 TJPEGImage로 TBitmap을 불러온뒤 jpg로 저장시키고 있습니다.
여기서 이미지에 시간정보를 추가하려고 하는데 직접 생성한 TBitmap에 Canvas->TextOut을 이용하여 출력하면
점점 메모리 사용율이 커집니다.
TextOut을 하는 곳을 주석 처리하면 메모리 증가는 보이지 않습니다.
증가시 상태를 확인해보면 GDI 헨들이 간간히 2나 1씩 증가하면서 메모리 사용율도 같이 올라가고 있습니다.
코드가드는 따로 못잡는것 같습니다.
이후 코드 입니다.
void t_cam::bmp_add_time(Graphics::TBitmap *bmp, TFont *font){
AnsiString time = FormatDateTime("hh:mm:ss", Now());
int x=5;
int y=6;
//포문 첫줄이 이상하게 나오는 군요. bmp->Canvas->Brush->Style = bsClear; 입니다.
for(int i=1; iCanvas->Brush->Style = bsClear;
bmp->Canvas->Font->Name = font->Name;
bmp->Canvas->Font->Size = font->Size +1;
bmp->Canvas->Font->Style = TFontStyles() << fsBold;
bmp->Canvas->Font->Color = clWhite;
bmp->Canvas->TextOut(i*font->Size -1, 4, time.SubString(i,1));
bmp->Canvas->Font->Size = font->Size;
bmp->Canvas->Font->Style = TFontStyles();
bmp->Canvas->Font->Color = clBlack;
bmp->Canvas->TextOut(i*font->Size, 5, time.SubString(i,1));
}
}
//함수끝
해당 함수 호출전 비트맵과 폰트는 생성,
호출후 삭제하고 있습니다.
|