Поделиться через


Метод CBaseControlVideo.GetStaticImage

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Чистый виртуальный метод, который переопределяет производные классы.

Синтаксис

virtual HRESULT GetStaticImage(
   long *pBufferSize,
   long *pDIBImage
) = 0;

Параметры

pBufferSize

Указатель на размер выходного буфера.

pDIBImage

Указатель на выходной буфер.

Возвращаемое значение

Возвращает значение HRESULT .

Комментарии

Через интерфейс IBasicVideo приложение может запросить, чтобы ему была предоставлена копия текущего изображения в буфере памяти (некоторые отрисовщики могут возвращать E_NOTIMPL, если они не поддерживают его). Производный класс определяет способ извлечения изображения. Когда приложение вызывает CBaseControlVideo::GetStaticImage, оно вызывает этот чистый виртуальный метод, который производный класс должен переопределить для его реализации. Это также вызывается функцией-членом CBaseControlVideo::GetCurrentImage .

Класс предоставляет вспомогающую функцию-член CBaseControlVideo::CopyImage, которая может получить образец, содержащий изображение, а функция-член копирует соответствующий его раздел (на основе текущего исходного прямоугольника) в выходной буфер, предоставленный приложением.

В следующем примере демонстрируется реализация этой функции-члена в производном классе. В этом примере m_pRenderer содержит объект класса, производного от CBaseVideoRenderer.

// Return a copy of the current image in the video renderer
HRESULT CVideoText::GetStaticImage(long *pBufferSize,long *pDIBImage)
{
    // Get any sample the renderer may be holding.

    IMediaSample *pMediaSample = m_pRenderer->GetCurrentSample();
    if (pMediaSample == NULL) {
        return E_UNEXPECTED;
    }

    // Call the base class helper method to do the work.

    HRESULT hr = CopyImage(pMediaSample,       // Buffer containing image
                      &m_pRenderer->m_mtIn,    // Type representing bitmap
                      pBufferSize,             // Size of buffer for DIB
                     (BYTE*) pDIBImage);       // Data buffer for output

    pMediaSample->Release();
    return hr;
}

Требования

Требование Значение
Заголовок
Ctlutil.h (включая Streams.h)
Библиотека
Strmbase.lib (розничные сборки);
Strmbasd.lib (отладочные сборки)

См. также раздел

Класс CBaseControlVideo