for(int x = 0; x ‹ obj.Length; x++) {
LinearGradientMode temp = (LinearGradientMode)obj.SetValue(x);
theBrush = new LinearGradientBrush(r, Color.GreenYellow, Color.Blue, temp);
// Вывод имени из перечня LinearGradientMode.
g.DrawString(temp.ToString, new Font("Times New Roman", 10), new SolidBrush(Color.Black), 0, yOffSet);
// Закраска прямоугольника подходящей кистью.
g.FillRectangle(theBrush, 150, yOffSet, 200, 50);
yOffSet += 80;
}
}
На рис. 20.17 показан результат.
Рис. 20.17. Градиентная кисть за работой
Исходный код. Проект GradientBrushes размещен в подкаталоге, соответствующем главе 20.
Визуализация изображений
К этому моменту вы знаете, как работать с тремя из четырех главных типов GDI+: шрифтами, перьями и кистями. Заключительным типом, который мы с вами рассмотрим в этой главе, будет класс Image (изображение) и связанные с ним подтипы. Абстрактный тип System.Drawing.Image определяет ряд методов и свойств, хранящих различную информацию о том изображении, которое этот тип представляет. Например, для представления размеров изображения класс Image предлагает свойства Width, Height и Size. Другие свойства позволяют получить доступ к палитре изображения. Описания базовых членов класса Image приведены в табл. 20.8.
Таблица 20.8. Члены типа Image
Члены | Описание |
---|---|
FromFile | Статический метод, создающий объект Image из указанного файла |
FromStream | Статический метод, создающий объект Image из указанного потока данных |
Height Width Size HorizontalResolution VerticalResolution | Свойства, возвращающие информацию о размерах данного объекта Image |
Palette | Свойство, возвращающее тип данных ColorPalette, который представляет палитру, используемую для данного объекта Image |
GetBounds | Метод, возвращающий объект Rectangle, который представляет текущие размеры данного объекта Image |
Save | Метод, сохраняющий в файл данные, содержащиеся в производном от Image типе |
Поскольку экземпляр абстрактного класса Image нельзя создать непосредственно, обычно непосредственно создается экземпляр типа Bitmap. Предположим, что у нас есть некоторый класс Form, отображающий три точечных рисунка в области клиента. Указав для каждого из типов Bitmap подходящий файл изображения, просто отобразите их в обработчике события Paint, используя метод Graphics.DrawImage.
public partial class MainForm: Form {
private Bitmap[] myImages = new Bitmap[3];
public MainForm {
// Загрузка локальных изображений.
myImages[0] = new Bitmap("imageA.bmp");
myImages[1] = new Вitmap("imageB.bmp");
myImages[2] = new Bitmap("imageC.bmp");
CenterToScreen;
InitializeComponent;
}
private void MainForm_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Qraphics;
// Визуализация изображений.
int yOffSet = 20;
foreach (Bitmap b in myImages) {
g.DrawImage(b, 10, yOffSet, 90, 90);
yOffSet += 100;
}
}
}
Замечание. Файлы *.bmp, которые используются в этом примере, должны находиться в той же папке, где находится само приложение (или должны быть "жестко" указаны пути, по которым эти изображения можно найти). Соответствующая проблема будет обсуждаться в этой главе чуть позже.
На рис. 20.18 показан соответствующий вывод.
Рис. 20.18. Визуализация изображений
Наконец, необходимо отметить, что, несмотря на имя Bitmap, этот класс может содержать изображения, сохраненные в любом из целого ряда форматов (*.tif, *.gif, *.bmp и т.д.).
Исходный код. Проект BasicImages размещен в подкаталоге, соответствующем главе 20.