CDrawImage 클래스

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

클래스는 CDrawImage 비디오 렌더러 필터에 대한 그리기를 관리하는 도우미 클래스입니다. 모든 그리기 작업은 GDI를 사용하여 수행됩니다. 이 클래스는 DirectDraw를 사용하여 렌더링을 지원하지 않습니다. 클래스를 CDrawImage 사용하려면 소유 필터도 비디오 창을 관리하는 CBaseWindow 클래스를 사용해야 합니다. CDrawImage 생성자는 CBaseWindow 개체에 대한 포인터를 사용합니다.

다음 다이어그램은 사용자 지정 비디오 렌더러 필터에서 이 클래스를 사용하는 기본 방법을 보여줍니다.

cdrawimage를 사용하는 사용자 지정 비디오 렌더러

이 클래스를 사용하려면 다음을 수행합니다.

Allocators

이전 다이어그램에 표시된 필터는 사용자 지정 할당자 클래스 인 CImageAllocator를 사용합니다. 이 할당자는 GDI CreateDIBSection 함수를 사용하여 공유 메모리에 DIB를 만듭니다. 할당자가 만든 샘플은 CImageSample 개체입니다.

필터가 연결에 대한 할당자를 소유하는 경우 미디어 샘플은 CImageSample 개체가 됩니다. 이 경우 CDrawImage 개체는 BitBlt 또는 StretchBlt 를 사용하여 그리기를 최적화할 수 있습니다. 그렇지 않으면 느린 SetDIBitsToDevice 또는 StretchDIBits 함수를 사용해야 합니다. 더 빠른 옵션은 CDrawImage::SlowRender 메서드에 의해 느린 옵션인 CDrawImage::FastRender 메서드에 의해 구현됩니다. (이름에도 불구하고 특히 최신 하드웨어에서는 SlowRender에서 큰 성능이 저하되지 않을 수 있습니다.)

팔레트

FastRender 메서드가 그리기에 사용되고 이미지가 팔레트가 설정된 경우 필터는 다음과 같이 팔레트를 관리해야 합니다.

  • CImageSample 클래스에는 DIBDATA 구조에 저장된 색상표 버전 번호가 포함되어 있습니다. 할당자가 샘플을 만들 때 값이 초기화됩니다.
  • CDrawImage 클래스에는 팔레트 버전 번호도 포함되어 있으며, 이 번호는 만들 때 초기화됩니다.
  • 미디어 형식이 새 palettized 형식으로 변경될 때마다 CDrawImage::IncrementPaletteVersion을 호출합니다. 이 메서드는 CDrawImage 개체의 색상표 버전 번호를 증분합니다. 필터가 CImagePalette 클래스를 사용하여 팔레트 정보를 관리하는 경우 미디어 형식이 변경되면 CImagePalette::P reparePalette 를 호출하면 됩니다. PreparePalette 메서드는 필요한 경우에만 팔레트 버전을 증가합니다.
  • FastRender 메서드는 CDrawImage 팔레트 버전을 샘플의 팔레트 버전과 비교합니다. 샘플의 버전 번호가 CDrawImage 버전 번호보다 뒤쳐지면 FastRender 메서드는 CDrawImage::UpdateColourTable을 호출합니다. UpdateColourTable 메서드는 GDI SetDIBColorTable 함수를 사용하여 디바이스 컨텍스트에서 색 테이블을 설정합니다. 또한 샘플의 팔레트 버전이 현재 버전 번호로 업데이트됩니다.
  • 핀이 다시 연결되면 필터는 CDrawImage::ResetPaletteVersion 을 호출하여 팔레트 버전을 다시 설정해야 합니다. 핀 다시 연결 시 할당자는 모든 샘플을 다시 할당합니다.
보호된 멤버 변수 Description
m_bStretch 대상 창에 맞게 비디오 이미지를 확장해야 하는지 여부를 나타냅니다.
m_bUsingImageAllocator 핀 연결의 할당자가 CImageAllocator 개체인지 여부를 나타냅니다.
m_EndSample 가장 최근 샘플의 중지 시간을 지정합니다.
m_hdc 소유 창의 디바이스 컨텍스트에 대한 핸들입니다.
m_MemoryDC 소유 창의 메모리 디바이스 컨텍스트에 대한 핸들입니다.
m_PaletteVersion 색상표가 변경되는 시기를 추적하는 데 사용됩니다.
m_pBaseWindow 소유하는 CBaseWindow 개체에 대한 포인터입니다.
m_pMediaType 현재 미디어 형식에 대한 포인터입니다.
m_SourceRect 그리기의 원본 사각형을 지정합니다.
m_StartSample 가장 최근 샘플의 시작 시간을 지정합니다.
m_TargetRect 그리기의 대상 사각형을 지정합니다.
Protected 메서드 Description
DisplaySampleTimes 비디오 이미지 위에 미디어 샘플의 타임스탬프를 그립니다.
FastRender BitBlt 또는 StretchBlt 함수를 사용하여 비디오 이미지를 그립니다.
SetStretchMode 비디오 이미지를 확장해야 하는지 여부를 계산합니다.
SlowRender SetDIBitsToDevice 또는 StretchDIBits 함수를 사용하여 비디오 이미지를 그립니다.
UpdateColourTable 색 테이블을 새 색상표로 업데이트.
Public 메서드 Description
CDrawImage 생성자 메서드입니다.
Drawimage 비디오 창에 비디오 프레임을 그립니다.
DrawVideoImageHere 미디어 샘플에서 지정된 디바이스 컨텍스트로 이미지를 그립니다.
GetPaletteVersion 팔레트 버전을 검색합니다.
GetSourceRect 현재 원본 사각형을 검색합니다.
GetTargetRect 현재 대상 사각형을 검색합니다.
IncrementPaletteVersion 색상표 버전을 증분합니다.
NotifyAllocator 연결에 CDrawImage 대한 할당자가 CImageAllocator 개체인지 여부를 개체에 알릴 수 있습니다.
NotifyEndDraw 지원되지 않습니다.
NotifyMediaType 개체에 현재 미디어 형식을 알 수 있습니다.
NotifyStartDraw 지원되지 않습니다.
ResetPaletteVersion 팔레트 버전을 다시 설정합니다.
ScaleSourceRect 네이티브 비디오 크기와 미디어 형식 형식 간에 차이가 있는 경우 지정된 원본 사각형의 크기를 조정합니다. 가상.
SetDrawContext 그리기에 사용되는 디바이스 컨텍스트를 설정합니다.
SetSourceRect 원본 사각형을 설정합니다.
SetTargetRect 대상 사각형을 설정합니다.
UsingImageAllocator 현재 할당자가 CImageAllocator 개체인지 여부를 나타냅니다.

요구 사항

요구 사항
헤더
Winutil.h(Streams.h 포함)
라이브러리
Strmbase.lib(소매 빌드);
Strmbasd.lib(디버그 빌드)