Учебные материалы по математике | Работа с растровыми изображениями | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Работа с растровыми изображениями


Курсоры

Курсоры-это специальные растровые изображения, связанные с местоположением указателя мыши. Размер курсора зависит от разрешающей способности экрана и обычно составляет 32х32 пикселя. Изображение курсора хранится в виде двух масок(называемых AND и XOR), позволяющих сделать курсор«прозрачным». Курсоры обычно хранятся в файлах с расширением CUR или совместно с другими ресурсами в файле с расширением RES. Базовый курсор, который будет использоваться для окон данного класса, задается при создании класса функцией: LoadCursor(ByValhInstanceAsLong, ByVallpCursorNameAsLong) AsLong,

гдеhInstance — это экземпляр программы класса окна. При использовании базовых курсоров этот параметр должен быть равен 0.

lpCursorName-это идентификатор курсора из файла ресурса.

Обычно курсор типа IDC_WAIT (песочные часы) используется для указания на операцию, которая требует времени выполнения;

IDC_IBEAM –для операций редактирования текста; IDC_SIZEALL –при редактировании графических изображений.

Например, WC. hCursor= LoadCursor(0, IDC_NO)’ илиIDC_CROSS С помощью свойства MousePointer объекта Screen можно устанавливать в рабочей области окна новый курсор.

Если возникает необходимость использовать внешний курсор, хранящийся в файле с расширением CUR, то можно воспользоваться функцией LoadCursorFromFile.

Курсоры, хранимые в ресурсах, и базовые курсоры удалять из памяти не нужно. Курсоры могут быть или одноцветными, или цветными, статическими или «живыми»(анимационными). Тип курсора, используемого в отдельной компьютерной системе, зависит от системного дисплея. Старые дисплеи типа VGA не поддерживают цветные или «живые» указатели.

98.Работа с растровыми изображениями. Иконки.

Иконки используются для отображения окна в закрытом состоянии представляют собой не большое графическое изображение. При заполнении структуры WNDCLASSEX полю hIcon присваивается иконка размером 32×32 пикселя, а полю hIconSm-иконка 16×16 пикселей. Как и курсоры, иконки содержат две маски, что позволяет регулировать их прозрачность. Они могут храниться в файлах с расширением ICO либо в файлах с расширением RES. Иконка, которая должна использоваться во всех окнах класса, загружается одной из функций: LoadIcon, ExtractIcon, LoadResPicture. Синтаксис первых двух функций следующий.LoadIcon(ByValhInstanceAsLong, ByVallpIconNameAsLong) AsLong,

ExtractIcon(ByValhInstAsLong, ByVallpszExeFileNameAsString, ByValnIconIndexAsLong) AsLong, гдеlpIconName-именованный или числовой идентификатор базовой иконки;

hInst—этот аргумент может быть только App. hInstance;

lpszExeFileName-имя файла, из которого извлекаются иконки: исполнимый файл(exe), библиотека(dll) или отдельный ico-файл;

nIconIndex—номер извлекаемой иконки, или-1 для получения числа иконок в файле.

Если иконка базовая, то первый параметр у функции LoadIcon должен быть равен нулю. В среде Windows определены следующие базовые иконки: IDI_APPLICATION=0,IDI_EXCLAMATION= 1,IDI_QUESTION = 2, IDI_ASTERISK=3, IDI_HAND=4.

Кстати, функция ExtractIcon может загружать не только иконки, но и курсоры (для Windows они равнозначны).В программе можно создать собственную иконку функцией CreateIcon, а после е использования удалить функцией DeleteObject.

Для отображения в рабочей области окна иконки или курсора используется одна из следующих функций: DrawIcon(ByValhdcAsLong, ByValxLeftAsLong, ByValyTopAsLong, ByValhIconAsLong) AsLong,DrawIconEx(ByValhdcAsLong, ByValxLeftAsLong, ByValyTopAsLong, ByValhIconAsLong, ByValcxWidthAsLong, ByValcyHeightAsLong, ByValistepIfAniCurAsLong, ByValhbrFlickerFreeDrawAsLong, ByValdiFlagsAsLong) AsLong, гдеhDC—дескриптор контекста устройства, на котором будет выведена иконка. Если вывод иконки осуществляется на форму, то свойство AutoRedraw=True, а после вывода иконки нужно перерисовать объект методом Refresh; xLeft, yTop-координаты, в которые будет выведена иконка;

hIcon-дескриптор прорисовываемой иконки; cxWidth, cyHeight-размеры прорисовываемой иконки; istepIfAniCur-этот параметр указывает на номер кадра, если Вы загрузили анимированный курсор; hbrFlickerFreeDraw-дескриптор кисти для перерисовки значка. По документации, если этот параметр не опущен, то он должен снизить мерцание при прорисовке; diFlags—флаги прорисовки, которые могут иметь следующие значения: DI_NORMAL = 3 –прорисовка иконки полностью;

DI_IMAGE = 2 –прорисовка XOR-маски(изображение на черном фоне);DI_MASK = 1 –прорисовка AND-маски(черно-белый негатив). Для выделения иконки из exe-файла используется функция: ExtractAssociatedIcon(ByValhInstAsLong, ByVallpIconPathAsString, lpiIconAsLong) AsLong, гдеlpIconPath—путь к exe-файлу с иконками; lpiIcon—номер иконки в файле.

99.Работа с растровыми изображениями. Bitmap-растры.

В среде Windows существует специальный тип ресурсов — растровые изображения(BitMap-растры). Они используются в двух случаях:

•для создания собственных кистей на основе BitMap-растров и заполненияими фона фигур;

•для отображения графических изображений, которые проще создать в графическом редакторе Imagedit. exe, загрузить их в файл ресурса, а затем использовать в проекте, чем рисовать API — функциями. Для создания кисти на основе BitMap-растра существуют два способа. Первый способ основан на получении дескриптора BitMap-растра, загруженного в файл ресурса, использует одну из функций:

LoadResPicture(ByVallpBitmapNameAsLong, vbResBitmap) AsLongилиLoadBitmap(ByValhInstanceAsLong, ByVallpBitmapNameAsLong) AsLong,где lpBitmapName—имя BitMap-растра в файле ресурса, а первый параметр в функции LoadBitmap тот же, что и функции LoadIcon.

Второй способ основан на получении дескриптора, создаваемого в программе BitMap-растра, и использует функцию:CreateBitmap(ByValnWidthAsLong, ByValnHeightAsLong, ByValnPlanesAsLong, ByValnBitCountAsLong, lpBitsAsAny) AsLong

Параметрами этой функции являются ширина и высота BitMap-растра(карты бит), число цветовых плоскостей в карте бит, число бит цвета на элемент отображения дисплея и указатель на массив двоичных чисел BitMap-растра. Дескриптор кисти, создаваемый на основе BitMap-растра (дескриптор которого возвращается одной из трех приведенных выше функций), получают функцией:CreatePatternBrush(ByValhBitmapAsLong)AsLong Далее дескриптор созданной кисти необходимо установить в контекст устройства функцией:SelectObject(ByValhdcAsLong, ByValhObjectAsLong) AsLong После того, как растровое изображение и кисть больше не будут использоваться в программе, их необходимо удалить из памяти функцией

DeleteObject(ByValhObjectAsLong) AsLong Удалять созданные объекты необходимо обязательно, так как память под BitMap-растр выделяется одна и таже вместе с программой, и наложение AND иXOR-масок предыдущего и вновь создаваемого изображений может привести к зависанию компьютера, а заливка фигур будет практически не предсказуема.

С помощью функции StretchBlt изображение можно не только сжимать, растягивать, но даже выворачивать на изнанку, задавая параметры с разными знаками. Чтобы избежать потери растрового изображения при уменьшении размера, рекомендуется использовать функцию SetStretchBltMode(ByValhdcAsLong, ByValnStretchModeAsLong) AsLong, которая устанавливает один из режимов коррекции в nStretchMode:

•WHITEONBLACK=1-cохранить белые пиксели засчет черных;

•BLACKONWHITE=2-cохранить черные пиксели за счет белых;

•COLORONCOLOR=3 –используется для цветных графических изображений. Основное различие между функциями BitBlt, StretchBlt и методом PaintPicture в Visual Basic заключается в том, что метод можно применять только к определенному объекту(Picture, форме, принтеру), а с помощью функций BitBlt и StretchBlt можно выполнять копирование пикселей изображения в пределах рабочего стола. Их можно использовать для создания разнообразных приложений, например, программ копирования экрана, чего не позволяет метод PaintPicture.

Второй способ анимации основан на формировании изображения(образа) в окне на основе Bitmap-растра. Для этого сначала в памяти создается временный контекст функцией CreateCompatibleDc. Далее в него загружается Bitmap-растр из файла ресурса, используя функции LoadBitmapиSelectObject. Затем он копируется из временного контекста в контекст устройства экрана функцией BitBlt или StretchBlt. При этом если Вы выбрали черный цвет фона окна приемника(он имеет нулевую цветовую палитру), то это позволит Вам использовать режим vbSrcInvert в функции BitBlt или StretchBlt при наложении образа из памяти(Scr-источник) на экран(Dest-приемник) по логическому выражению ScrXorDest. Если цвет фона под образом отличен от черного, то следует скопировать его для последующего затирания образа в окне приемника, чтобы

Происходило движение. При этом напомню, что режим vbSrcAnd позволяет копировать из источника все биты, кроме белых, режим vbSrcPaint-копировать только белые биты, а режим vbSrcCopy-полностью копирует биты из источника в приемник. Осуществить перемещение графических образов можно не только из файла ресурса, но из файлов, расположенных на диске. Для этого вместо функции LoadBitmap следует воспользоваться функцией LoadPicture("Имя bmp-файла") объекта stdole.

В третьем способе анимации также, как и при использовании первого способа, графический образ создается в окне API-функциями ядра Windows, однако затем он копируется в память, откуда проецируется в окно через промежуток времени, создавая эффект движения. Чтобы поместить изображение в память, необходимо сначала создать временный контекст функцией CreateCompatibleDC и пустой BitMap-растр, совместимый с экранным контекстом, функцией CreateCompatibleBitMap(как это было показано в

Далее функцией SelectObject пустой BitMap-растр устанавливается во временном контексте, а затем в него копируется графический образ с экрана функцией BitBlt или StretchBlt. Далее происходит циклическое отображение образа из временного контекста на экране и его затирания.

Обращаю Ваше внимание, что функции mciSendString, mciExecute могут озвучивать mp3, midi, и wav-файлы, а функция sndPlaySound-лишь wav-файлы.

100.Метафайлы.

Метафайл-это закодированная последовательность вызовов API-функций. С помощью метафайла программа запоминает в памяти или в дисковом файле те действия, которые необходимо совершить для прорисовки изображения. Однажды созданный метафайл можно воспроизводить сколько угодно раз. Для создания, сохранения и использования метафайла применяются следующие функции.

1. Функция CreateMetaFile(ByVallpStringAsString) As

lpString="", то метафайл создается в оперативной памяти. После обращения к этой функции программа может работать с метафайлом как с контекстом графического устройства.

2.Функция GetMetaFile(ByVallpFileNameAsString) AsLong-открывает уже существующий метафайл и возвращает на него ссылку, если операция прошла успешно, иначе возвращает ноль.

3.Функция PlayMetaFile(ByValhdcAsLong, ByValhMFAsLong) AsLong-читает содержимое уже открытого метафайла и рисует из него изображения на контексте hDc.

5. Функция DeleteMetaFile(ByValhMFAsLong) AsLong-освобождает дескриптор метафайла. Сам метафайл при этом не разрушается и может быть вновь открыт функцией GetMetaFile. При воспроизведении метафайла записанный в него алгоритм реализуется с теми параметрами контекста устройства отображения, которые этот контекст имеет в данный момент, так как при создании метафайла ему не передаются умалчиваемые значения контекста. В связи с этим к нему нельзя применять функции, использующие информацию о параметрах контекста, такие какFrameRgn, CreateCompatibleDC, DrawIcon, FillRgn, DeleteDcи другие. При этом функция SelectObject возвращает ссылку на новый инструмент, а не на предыдущий, который автоматически уничтожается после завершения прорисовки изображения.

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020