Растровые изображения, пиктограммы и метафайлы, страница 16

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

int. Число установленных строк развертки. В случае возникновения ошибки возвращаемое значение — 0.

Включаемый файл

wingdi.h

См. также

CreateDIBitmap, GetDIBits, SetDIBits, StretchDIBits

Пример

В следующем примере (рис. 13.15) при обработке сообщения WM_CREATE загружаются изображение DIB и входы палитры. После получения сообщения   WM_PAINT происходит вывод изображения DIB обычных размеров с использованием функции SetDIBitsToDevice и вывод изображения с размерами, составляющими 200% отобычных размеров, с помощью функции StretchDIBits.

SetEnhMetaFilleBits                       • Windows 98   • Windows 2000*

Описание

Функция SetEnhMetaFileBits позволяет создать в памяти расширенный метафайл из указанных данных. Если в приложении больше не нужен дескриптор расширенного метафайла, этот дескриптор должен быть удален путем вызова функции DeleteEnhMetaFile. Указанная функция не может применяться с данными метафайла в формате Windows 3.x. Для таких метафайлов должна применяться функция SetWinMetaFileBits.

Синтаксис

HENHMETAFILE SetEnhMetaFileBits( UINT cbBuffer, CONST BYTE* IpData )

Параметры cbBuffer

UINT. Размер в байтах данных, указанных параметром IpData.

lpData

CONST BYTE*. Указатель на буфер, который содержит данные расширен ного метафайла. Данные должны быть представлены в том же формате, в ка ком они были получены из функции GetEnhMetaFileBits.

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

HENHMETAFILE. Дескриптор расширенного метафайла, записанного в память. В случае возникновения ошибки возвращаемое значение — NULL.

Включаемый файл

wingdi.h

См. также

GetEnhMetaFileBits, DeleteEnhMetaFile

Пример

См. пример для функции GetEnhMetaFileBits.

SetMetaRgn                              • Windows 98   • Windows 2000

Описание

Функция SetMetaRgn позволяет определить пересечение текущей областт отсечения контекста устройства (определенную пересечением его обласп отсечения и метаобласти) с текущей метаобластью и сохранить результс рующую область в качестве новой метаобласти для контекста устройств Область отсечения переустанавливается на пустую область. Перед вызово этой функции в приложении необходимо сохранить контекст устройства помощью функции SaveDC.

Синтаксис

int SetMetaRgn( HDC hDC)

Параметры hDC

HDC. Контекст устройства, для которого необходимо установить метаоб ласть.

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

int. В случае успешного выполнения — новая структура области отсеченш Она может иметь любое из значений, перечисленных в табл. 13.20.

Таблица 13.20. Возвращаемые значения функции SetMetaRgn

Значение

Описание

COMPLEXREGION

Область состоит из нескольких прямоугольных областей.

ERROR

Произошла ошибка (предыдущая область отсечения не затронута).

NULLREGION

Область пуста.

SIMPLEREGION

Область состоит из одного прямоугольника.

Включаемый файл

wingdi.h

См. также

GetMetaRgn, SelectClipRgn

Пример

В следующем примере функции GetMetaRgn и SetMetaRgn применяются для изменения метаобласти во время вывода метафайла. Когда пользователь выбирает пункт меню Test!, размер декремента увеличивается на 10 единиц длины в горизонтальном и вертикальном направлениях. В результате, когда пользователь выбирает пункт меню Test!, метафайл каждый раз масштабируется в меньшую сторону на 10 единиц длины.

См.    \local-aources\chapl3\13-26. txt

SetStretchBltMode                       • Windows 98   • Windows 2000

Описание

Функция SetStretchBltMode устанавливает режим растяжения растрового изображения для контекста устройства. Режим растяжения определяет, как будет происходить удаление пикселей при уменьшении размеров растрового изображения. При увеличение размеров растрового изображения просто происходит добавление соответствующих пикселей между существующими. Режим растяжения становится свойством контекста устройства и остается в силе до тех пор, пока не будет удален контекст устройства или установлен новый режим растяжения. Выбор наиболее благоприятного режима растяжения зависит от вида сжимаемого растрового изображения. Изображения с несколькими тонкими линиями будут обрабатываться наиболее эффективно в режиме STRETCH_ANDSCANS. Изображения с несколькими жирными линиями будут обрабатываться более эффективно в режиме STRETCH_ORSCANS. Для обычных цветных изображений можно использовать режим STRETCH_DELETESCANS.

Синтаксис

int SetStretchBHMode( HDC hDC, int nStretchMode )

Параметры hDC

HDC. Обозначает контекст устройства.

nStretchMode

int. Новый режим растяжения. Этот параметр может иметь одно из значений, перечисленных в табл. 13.21.

Таблица 13.21. Значения параметра nStretchMode функции SetStretchBltMode

Значение

Описание

STRETCH_ANDSCANS

Выполнить логическую операцию AND с использованием значений цвета для удаленных и существующих пикселей. Если растровое изображение представляет собой монохромное растровое изображение, этот режим сохраняет черные пиксели за счет белых пикселей. Это значение определено также как  BLACKONWHITE.

STRETCH_DELETESCANS

Удалить пиксели. Этот режим предусматривает уничтожение всех удаленных строк пикселей без попыток сохранить их информацию. Это значение определено также как  COLORONCOLOR.

STRETCH_HALFTONE

Отобразить пиксели из прямоугольной области источника в блоки пикселей прямоугольной области назначения. Среднее значение цвета по всему блоку пикселей назначения аппроксимирует цвет пикселей источника. Это значение определено также как  HALFTONE. После настройки режима растяжения STRETCH_HALFTONE в приложении необходимо вызвать функцию SetBrushOrgEx для установки начала координат кисти; в ином случае возникает ошибка, связанная с неправильным выравниванием кисти

STRETCH_ORSCANS

Выполнить логическую операцию OR с использованием значений цвета для удаленных и существующих пикселей. Если растровое изображение представляет собой монохромное растровое изображение, этот режим сохраняет белые пиксели за счет черных пикселей. Это значение определено также как WHITEONBLACK.

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

int. В случае успешного выполнения — предыдущий режим растяжения; в ином случае возвращаемое значение — 0.

Включаемый файл

wingdi.h

См. также

GetStretchBltMode, StretchBIt

Пример

См. пример для функции StretchBIt.

SetWinMetaFileBits                       • Windows 98   • Windows 2000

Описание

Функция SetWinMetaFileBits позволяет преобразовать метафайл из crapoi формата Windows 3.x в новый расширенный формат. Когда в приложени исчезает необходимость в использовании дескриптора расширенного мет) файла, его необходимо удалить путем вызова функции DeleteEnhMetaFil Если справочный контекст устройства не совпадает с тем контекстом уст ройства, в котором был первоначально создан метафайл, некоторые фу1 кции GDI, в которых применяются единицы длины устройства, вывод) это изображение неправильно.

Синтаксис

HENHMETAFILE SetWinMetaFileBits( UINT cbBuffer, CONST BYTE IpbBuffer, HDC hDCRef, CONST METAFILEPICT* Ipmfr )

Параметры

cbBuffer

UINT. Размер в байтах буфера, который содержит метафайл Windows 3.x

IpbBuffer

CONST BYTE*. Указатель на буфер, который содержит данные метафа{ ла Windows 3.x. Эти данные должны быть представлены в формате, возвр. щенном функцией GetWinMetaFileBits.

hDCRef

HDC. Справочный контекст устройства.

Ipmfp

CONST METAFILEPICT*. Указатель на структуру METAFILEPICT, котора содержит предложенный размер изображения метафайла и режим отобрг жения, который использовался при создании изображения. Определен» структуры METAFILEPICT приведено ниже.

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

HENHMETAFILE. В случае успешного выполнения функции возвращав мое значение — дескриптор расширенного метафайла, записанного в па мять; в ином случае возвращаемое значение — NULL.

Включаемый файл

wingdi.h

См. также

GetWinMetaFileBits, DeleteEnhMetaFile

Определение METAFILEPICTtypedef struct tagMETAFILEPICT { LONG             mm; LONG              xExt; LONG             yExt; HMETAFILE hMF; }   METAFILEPICT;

Члены mm

LONG. Режим отображения, в котором выведено изображение. Перечень допустимых режимов отображения приведен в табл. 12.24 главы 12.

xExt

LONG. Ширина метафайла изображения для всех режимов, за исключением MM_ISOTROPIC и MM_ANISOTROPIC. Для этих режимов предложенный размер содержит параметр xExt.

yExt

LONG. Высота метафайла изображения для всех режимов, за исключением MM_ISOTROPIC и MM_ANISOTROPIC. Для этих режимов предложенный размер содержит параметр yExt.

hMF

HMETAFILE. Метафайл памяти.

Пример

В следующем примере, когда пользователь выбирает пункт меню Test!, метафайл sample.wmf формата Windows 3.x преобразовывается в формат расширенного метафайла с использованием функции SetWinMetaFileBits. Метафайл Windows 3.x был сохранен в файле sample.wmf с помощью предыдущего вызова функции CopyMetaFile.

См.    \local-sources\chapl3\13-27.txt

StretchBIt                                 • Windows 98   • Windows 2000

Описание

Функция StretchBIt позволяет копировать растровое изображение из прямоугольной области источника в прямоугольную область назначения, в случае необходимости растягивая или сжимая растровое изображение согласно режиму растяжения в соответствии с размерами прямоугольной области назначения. Изображение можно перевернуть вдоль горизонтальной или вертикальной оси, используя разные знаки (положительный и отрицательный) для параметров ширины или высоты источника и назначения. Эта функция может применяться для окон, имеющих переменный размер, когда возникает необходимость увеличивать или уменьшать растровые изображения в зависимости от размеров окна. При значительном увеличении размеров растровых изображений в них могут появляться зубчатые контуры. Для больших изображений следует применять метафайлы.

Синтаксис

BOOL StretchBlt( HDC hDCDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hDCSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop )

Параметры hDCDest

HDC. Контекст устройства назначения.

nXOriginDest

int. Координата х левого верхнего угла прямоугольной области назначения (в логических единицах длины).

nYOriginDest

int. Координата у левого верхнего угла прямоугольной области назначения (в логических единицах длины).

nWidthDest

int. Ширина прямоугольной области назначения (в логических единицах длины).

nHeightDest

int. Высота прямоугольной области назначения (в логических единица; длины).

hDCSrc

HDC. Исходный контекст устройства.

nXOriginSrc

int. Координата х левого верхнего угла прямоугольной области источник; (в логических единицах длины).

nYOriginSrc

int. Координата у левого верхнего угла прямоугольной области источни] (в логических единицах длины).

nWdthSrc

int. Ширина прямоугольной области источника (в логических единице длины).

nHeightSrc dwRop

int. Высота прямоугольной области источника (в логических единицах длины) DWORD. Растровая операция, которая должна быть выполнена. Коды растровых операций перечислены в табл. 13.2.

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

BOOL. В случае успешного выполнения — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

wingdi.h

См. также

SetStretchBltMode. GetDeviceCaps, BitBlt

Пример

В примере, показанном на рис. 13.16, растровое изображение увеличивается  до  размеров   клиентской   области   с   использованием   функции StretchBlt, когда пользователь выбирает пункт меню Test!.