DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CDrawImage [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
CDrawImage 클래스는, 비디오 렌더러 필터의 드로잉(Drawing)를 관리하는 헬퍼-클래스이다. 모든 드로잉(Drawing) 조작을 GDI 를 사용해 실행한다. 이 클래스는 DirectDraw 에 의한 렌더링을 지원 하지 않는다. CDrawImage 클래스에서는, 비디오 윈도우를 관리하는 오너 필터도 CBaseWindow 클래스를 사용하고 있을 필요가 있다. CDrawImage 생성자은,CBaseWindow 개체의 포인터를 받는다.
다음 그림은 커스텀 비디오 렌더러 필터에 있어서의 이 클래스의 바람직한 사용 방법을 나타내고 있다.
이 클래스의 사용 방법은 다음대로.
할당자
위의 그림에 나타낸 필터는, 커스텀 할당자 클래스인 CImageAllocator 를 사용하고 있다. 이 할당자는, GDI 함수 CreateDIBSection 를 사용해 공유 메모리에 DIB 를 생성 한다. 이 할당자로 생성 한 샘플은 CImageSample 개체이다.
필터가 접속을 위한 할당자를 소유하고 있는 경우, 미디어 샘플은 확실히 CImageSample 개체이다. 그 경우,CDrawImage 개체는 BitBlt 또는 StretchBlt 를 사용해 드로잉(Drawing)를 최적화할 수 있다. 그 이외의 경우는, 저속의 SetDIBitsToDevice 또는 StretchDIBits 함수를 사용해야 한다. 고속 옵션은 CDrawImage::FastRender 메서드로 처리 해, 저속 옵션은 CDrawImage::SlowRender 메서드로 처리 한다. 이름은 Slow 이지만,SlowRender 에서도 (새로운 하드웨어에서는 특히) 큰 퍼포먼스에의 영향은 없다.
팔레트
드로잉(Drawing)에 FastRender 메서드를 사용해, 이미지가 팔레트화 되고 있는 경우, 필터는 다음과 같이 팔레트를 관리할 필요가 있다.
요건
헤더 : Winutil.h 로 선언해, Streams.h 를 인클루드 한다.
라이브러리 : Strmbase.lib (리테일 빌드) 또는 Strmbasd.lib (디버그 빌드).
프로텍트 멤버 변수 | 설명 |
m_bStretch | 목적지 윈도우에 맞추어 비디오 이미지를 신축(스트레치) 할 필요가 있을지 어떨지를 나타낸다. |
m_bUsingImageAllocator | 핀 접속의 할당자가 CImageAllocator 개체일지 어떨지를 나타낸다. |
m_EndSample | 최신 샘플의 정지 타임을 지정한다. |
m_hdc | 소사용자 윈도우의 장치 문맥의 핸들. |
m_MemoryDC | 소사용자 윈도우의 메모리 장치 문맥의 핸들. |
m_PaletteVersion | 팔레트의 변화를 추적하기 위해서 사용한다. |
m_pBaseWindow | 소유하는 CBaseWindow 개체의 포인터. |
m_pMediaType | 현재의 미디어 타입의 포인터. |
m_SourceRect | 드로잉(Drawing)의 전송원직사각형을 지정한다. |
m_StartSample | 최신 샘플의 시작 타임을 지정한다. |
m_TargetRect | 드로잉(Drawing)의 목적지 직사각형을 지정한다. |
프로텍트 메서드 | |
DisplaySampleTimes | 비디오 이미지 위에 미디어 샘플의 타임 스탬프를 드로잉(Drawing) 한다. |
FastRender | BitBlt 또는 StretchBlt 함수를 사용해 비디오 이미지를 드로잉(Drawing) 한다. |
SetStretchMode | 비디오 이미지를 신축(스트레치) 할 필요가 있을지 어떨지를 계산한다. |
SlowRender | SetDIBitsToDevice 또는 StretchDIBits 함수를 사용해 비디오 이미지를 드로잉(Drawing) 한다. |
UpdateColourTable | 새로운 팔레트로 컬러 테이블을 갱신한다. |
퍼블릭 메서드 | |
CDrawImage | 생성자 메서드. |
DrawImage | 비디오 윈도우상에 비디오 프레임을 드로잉(Drawing) 한다. |
DrawVideoImageHere | 미디어 샘플로부터 지정한 장치 문맥에 이미지를 드로잉(Drawing) 한다. |
GetPaletteVersion | 팔레트의 버전을 얻어온다. |
GetSourceRect | 현재의 전송원직사각형을 얻어온다. |
GetTargetRect | 현재의 목적지 직사각형을 얻어온다. |
IncrementPaletteVersion | 팔레트의 버전을 인크리먼트(increment) 한다. |
NotifyAllocator | 접속의 할당자가 CImageAllocator 개체일지 어떨지를 CDrawImage 개체에 통지한다. |
NotifyEndDraw | 지원하지 않는다. |
NotifyMediaType | 현재의 미디어 타입을 개체에 통지한다. |
NotifyStartDraw | 지원하지 않는다. |
ResetPaletteVersion | 팔레트의 버전을 리셋 한다. |
ScaleSourceRect | 네이티브 비디오 사이즈와 미디어 타입 포맷에 상위가 있는 경우는, 지정한 전송원직사각형을 스케일링 한다. 가상. |
SetDrawContext | 드로잉(Drawing)에 사용되는 장치 문맥을 설정한다. |
SetSourceRect | 전송원직사각형을 설정한다. |
SetTargetRect | 목적지 직사각형을 설정한다. |
UsingImageAllocator | 현재의 할당자가 CImageAllocator 개체일지 어떨지를 나타낸다. |