Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Класс CDrawImage является вспомогательным классом, который управляет рисованием для фильтра отрисовщика видео. Все операции рисования выполняются с помощью GDI. Этот класс не поддерживает отрисовку с помощью DirectDraw. Класс CDrawImage требует, чтобы фильтр владельцев также использовал класс CBaseWindow , который управляет окном видео. Конструктор CDrawImage принимает указатель на объект CBaseWindow .
На следующей схеме показан предпочтительный способ использования этого класса в пользовательском фильтре отрисовщика видео.
Чтобы использовать этот класс, выполните следующие действия.
- Когда контакты подключаются, вызовите методы CDrawImage::NotifyMediaType и CDrawImage::NotifyAllocator .
- При изменении типа носителя снова вызывайте NotifyMediaType .
- Перед отрисовкой вызовите CDrawImage::SetDrawContext.
- Вызовите CDrawImage::SetSourceRect, если изменяется исходный прямоугольник, и CDrawImage::SetTargetRect, если изменяется целевой прямоугольник.
- Управление палитрой для палеттизированных изображений, как описано в разделе о палитрах ниже.
Распределители
Фильтр, показанный на предыдущей схеме, использует пользовательский класс распределителя CImageAllocator. Этот распределителя создает DIB-объекты в общей памяти с помощью функции GDI CreateDIBSection . Примеры, созданные распределителем, являются объектами CImageSample .
Если фильтр владеет распределителем для подключения, то примеры мультимедиа гарантированно будут объектами CImageSample . В этом случае объект CDrawImage может оптимизировать рисование с помощью BitBlt или StretchBlt. В противном случае он должен использовать более медленные функции SetDIBitsToDevice или StretchDIBits . Более быстрый параметр реализуется методом CDrawImage::FastRender , а более медленный — методом CDrawImage::SlowRender . (Несмотря на название, вы, вероятно, не увидите большого снижения производительности в SlowRender, особенно на новом оборудовании.)
Палитры
Если для рисования используется метод FastRender , а изображение палетизировано, фильтр должен управлять палитрой следующим образом:
- Класс CImageSample содержит номер версии палитры, хранящийся в структуре DIBDATA . Значение инициализируется, когда распределителем создается образец.
- Класс CDrawImage также содержит номер версии палитры, который инициализируется при создании.
- Всякий раз, когда тип мультимедиа меняется на новый палеттизированный формат, вызовите CDrawImage::IncrementPaletteVersion. Этот метод увеличивает номер версии палитры объекта CDrawImage . Если фильтр использует класс CImagePalette для управления данными палитры, можно просто вызывать CImagePalette::P reparePalette при изменении типа мультимедиа. Метод PreparePalette увеличивает версию палитры только при необходимости.
- Метод FastRender сравнивает версию палитры CDrawImage с версией палитры примера. Если номер версии примера отстает от номера версии CDrawImage , метод FastRender вызывает CDrawImage::UpdateColourTable. Метод UpdateColourTable задает таблицу цветов в контексте устройства с помощью функции GDI SetDIBColorTable . Кроме того, версия палитры в примере обновляется до текущего номера версии.
- Если закрепление повторно подключается, фильтр должен вызвать CDrawImage::ResetPaletteVersion , чтобы сбросить версию палитры. При повторном подключении контактов распределителя повторно выделяет все образцы.
| Защищенные переменные-члены | Описание |
|---|---|
| m_bStretch | Указывает, нужно ли растянуть видеоиними в соответствии с целевым окном. |
| m_bUsingImageAllocator | Указывает, является ли распределителем для пин-соединения объект CImageAllocator . |
| m_EndSample | Указывает время остановки последнего примера. |
| m_hdc | Дескриптор в контексте устройства окна владения. |
| m_MemoryDC | Обработка в контексте устройства памяти окна владения. |
| m_PaletteVersion | Используется для отслеживания изменения палитры. |
| m_pBaseWindow | Указатель на принадлежащий объект CBaseWindow . |
| m_pMediaType | Указатель на текущий тип носителя. |
| m_SourceRect | Задает исходный прямоугольник для рисования. |
| m_StartSample | Указывает время начала последнего примера. |
| m_TargetRect | Указывает целевой прямоугольник для рисования. |
| Защищенные методы | Описание |
| DisplaySampleTimes | Рисует метки времени примера мультимедиа поверх видеоинимка. |
| FastRender | Рисует видеоигрывание с помощью функций BitBlt или StretchBlt . |
| SetStretchMode | Вычисляет, нужно ли растянуть видеоиними. |
| SlowRender | Рисует видеоистопа с помощью функций SetDIBitsToDevice или StretchDIBits . |
| UpdateColourTable | Обновления таблицу цветов новой палитрой. |
| Открытые методы | Описание |
| CDrawImage | Метод конструктора. |
| Drawimage | Рисует видеокадр в окне видео. |
| DrawVideoImageHere | Рисует изображение из примера мультимедиа в указанный контекст устройства. |
| GetPaletteVersion | Извлекает версию палитры. |
| GetSourceRect | Извлекает текущий исходный прямоугольник. |
| GetTargetRect | Извлекает текущий целевой прямоугольник. |
| IncrementPaletteVersion | Увеличивает версию палитры. |
| NotifyAllocator | Сообщает объекту, CDrawImage является ли распределителем для соединения объект CImageAllocator . |
| NotifyEndDraw | Не поддерживается. |
| NotifyMediaType | Уведомляет объект текущего типа мультимедиа. |
| NotifyStartDraw | Не поддерживается. |
| ResetPaletteVersion | Сбрасывает версию палитры. |
| ScaleSourceRect | Масштабирует заданный исходный прямоугольник, если есть разница между собственным размером видео и форматом типа мультимедиа. Виртуальной. |
| SetDrawContext | Задает контексты устройства, используемые для рисования. |
| SetSourceRect | Задает исходный прямоугольник. |
| SetTargetRect | Задает целевой прямоугольник. |
| UsingImageAllocator | Указывает, является ли текущий распределителем объект CImageAllocator . |
Требования
| Требование | Значение |
|---|---|
| Заголовок |
|
| Библиотека |
|