C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[69695] Canvas->TextOut관련 질문입니다.
주누 [junesaku] 2610 읽음    2013-06-24 14:44
저번에 질문 올렸다가 다른 문제인줄 알고 다른 문제인것 같습니다 라고 적었습니다만..

사용 IDE 는 BCB6.0 Ent입니다.

COM과 관련된 누수로 파악하고 이리저리 하다가 못찾고 ATL이 사용 가능하다는 것을 알아내서
CComPtr로 모든 관련 객체를 자동 해제 되게 만들어도
발생하여서 디버깅 하다보니 다시 원 위치로 돌아 갔습니다.

해당 함수는 메인 쓰레드와는 별개의 다른 쓰레드내부에서 생성한 윈도우 멀티미디어 타이머가 호출하며.
DirectShow의 SampleGrabber로 받아온 현재 캠 데이터를 받아서 Graphics::TBitmap으로 만든뒤
좌상단에 현재 시간 정보를 적는 함수입니다.
두번 TextOut하는 이유는 글자색과 배경색이 같으면 글자가 안보이기에 일단 임시로 넣은 그림자가 한번 들어간다고 생각하시면 됩니다.
XY좌표를 각각 1씩 줄이고 크기를 1늘이고 굵게 설정을 해준 배경을 먼저 쓰고 이후 실제 표현한 글을 적은것입니다.


void t_cam::bmp_add_time(Graphics::TBitmap *bmp, TFont *font){
    AnsiString time = FormatDateTime("hh:nn:ss", Now());
    
    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));
    }
}



아예 함수의 TextOut부분만 뺄경우 따로 GDI헨들이 크게 증가 하지 않지만
(프로그램이 유동적으로 비트맵같은 이미지등을 생성했다가 지웠다가 해서 좀 변합니다. 캠 두개면 대충 110개 미만의 헨들을 가집니다.)
TextOut부분만 들어가면 틈틈히 GDI헨들이 증가하고
한 12시간 정도 작동하다가 뻗습니다.

+ -

관련 글 리스트
69695 Canvas->TextOut관련 질문입니다. 주누 2610 2013/06/24
69696     자답... 주누 1786 2013/06/24
69697         Re:자답... 장성호 1934 2013/06/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.