|
Программирование >> Программирование с использованием ajax
Пример демонстрирует также создание объекта StringFormat, который позволяет прорисовывать текст, выровненный по правому краю и по центру. В GDI+ выравнивание текста по правому краю носит название Far (По дальнему краю), а по левому - Near (По ближнему краю). StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Far; И, наконец, мы выполняем прорисовку фрагмента многострочного текста. С использованием интерфейса GDI+ это чрезвычайно просто. Достаточно указать прямоугольник, ширина которого меньше длины строки (выраженной в пикселях), а высота достаточна для прорисовки нескольких строк. В данном случае высота прямоугольника в три раза превышает высоту шрифта. Прорисовка с использованием изображений Изображения находят много применений в интерфейсе GDI+. Конечно, можно рисовать изображения в окнах приложения, но можно также создать кисть (TextureBrush), содержащую изображение, и рисовать формы, которые затем будут залиты этим изображением. На основе кисти TextureBrush можно создать перо и рисовать линии, используя выбранное изображение. Кисть TextureBrush можно передать при прорисовке текста, в результате чего текст будет прорисовываться с выбранным изображением. Класс Image определен в пространстве имен System. Drawing. Иногда изображение, которое нужно создать, очень сложно и причудливо, и его прорисовка занимает значительное время даже на современных быстрых компьютерах. Наблюдение за тем, как графическое изображение выползает на экран по мере прорисовки - не самое приятное занятие. Примеры таких типов приложений - картографические приложения и сложные приложения CAD/CAM. Рассматриваемая технология вместо прорисовки непосредственно в окне использует прорисовку в изображении, по завершении которой выполняется прорисовка изображения в окне. Эта технология называется двойной буферизацией. Некоторые другие графические технологии применяют прорисовку по слоям, когда вначале выполняется прорисовка фона, затем прорисовка объектов поверх него и, наконец, прорисовка текста поверх объектов. Если эта прорисовка осуществляется непосредственно на экране, пользователи будут наблюдать эффект мерцания. Двойная буферизация устраняет его. Пример использования двойной буферизации будет рассмотрен немного позже. Сам класс Image является абстрактным. Он имеет два производных класса: Bitmap и Metafile. Класс Bitmap представляет изображение общего назначения, обладающее свойствами высоты и ширины. В примерах этого раздела применяется класс Bitmap. Мы загрузим изображение Bitmap из файла и выполним его рисование. На его основе мы также создадим кисть, воспользуемся ею, чтобы создать перо для рисования линий, и затем применим кисть для прорисовки текста. Класс Metafile рассматривается в конце главы при кратком ознакомлении с расширенными возможностями интерфейса GDI+. Для объектов image всегда вызывайте метод Dispose Помните, что для создаваемых объектов Image важно вызывать метод Dispose () либо применять блоки using. В противном случае приложение может истощать ресурсы Windows. Существует несколько возможных источников растровых изображений. Растровое изображение можно загрузить из файла, создать его из другого существующего изображения или же создать в виде пустого растрового изображения, поверх которого можно выполнять рисование. Изображение в файле может храниться в формате JPEG, GIF или BMP. Следующее практическое занятие демонстрирует чтение изображения из файла его рисование в окне. IfpaicniMecKoe заияти Чтение и рисование изображения Следующий очень простой пример считывает изображение из файла и выполняет его рисование в окне. 1. Создайте новое Windows-приложение по имени Drawlmage в каталоге С:\ BegVCSharp\Chapter33. 2. В своем классе Forml объявите приватную переменную для хранения изображения после его чтения из файла. После объявления переменной компонентов добавьте следующее объявление объекта the Image: partial class Forml : Form { private Image the Image; 3. Измените конструктор, как показано ниже: public Forml() { InitializeComponent (); SetStyle(ControlStyles.Opaque, true); thelmage = new Bitmap( Person.bmp ) ; 4. Теперь добавьте в свой класс метод OnPaintEvent (): protected override void OnPaint(PaintEventArgs e) Graphics g = e.Graphics; g.Drawlmage(thelmage, ClientRectangle); 5. Освободите объект Image, хранящийся в переменной-члене класса. Измените метод Dispose () класса формы. Обратите внимание, что в среде Visual Studio 2008 метод Dispose () определен в файле Forml. Designer .cs. Простейший способ открытия файла - щелчок на кнопке Show All Files (Показать все файлы) в панели инструментов в верхней части окна Solution Explorer. Эта функция имеет следующий вид: protected override void Dispose ( bool disposing ) { if (disposing) { thelmage.Dispose(); if (disposing & & (components != null)) { components.Dispose() ; base.Dispose(disposing); Прежде чем запускать этот пример, необходимо получить ВМР-файл Person.bmp и поместить его в каталог DrawImage\bin\Debug. Файл Person.bmp можно найти в загружаемом коде; также можно воспользоваться другим имеющимся в наличии растровым изображением - но в этом случае не забудьте изменить строку thelmage = new Bitmap( Person.bmp ); добавленную на шаге 3, чтобы указанное в ней имя файла соответствовало нужному растровому изображению. Если теперь запустить скомпилировать и запустить этот код, он создаст изображение, показанное на рис. 33.12. □ Рис. 33.12. 4menu£ и рисовани£ изображения Описание полученных результатов в конструкторе выполняется создание экземпляра объекта Bitmap и его присваивание объявленной переменной Image. Затем в методе OnPaint () мы выполняем рисование изображения. При рисовании изображения мы передаем Rectangle в качестве одного из аргументов метода Draw Image (). Если размеры изображения не соответст вуют размерам прямоугольника, переданного методу Draw Image (), GDI+ автоматически изменяет размеры изображения, чтобы оно помещалось в указанном прямоугольнике. Чтобы предотвратить изменение размеров изображения интерфейсом GDI+, передайте методу Drawlmage () размеры изображения, полученные из свойств Width и Height. Рисование с использованием текстурной кисти Теперь создадим кисть TextureBrush на основе только что использованного изображения и рассмотрим три различных примера ее применения: □ рисование эллипса; □ создание пера; □ прорисовка текста. Следующее практическое упражнение мы начнем с кода, созданного в предыдущем примере, и внесем в него несколько изменений.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |