netlib.narod.ru | < Назад | Оглавление | Далее > |
Класс Image включает несколько дополнительных методов, предоставляющих ограниченные возможности сохранения и манипуляции изображениями.
Методы Save класса Image (выборочно)
void Save(string strFilename, ImageFormat if) |
void Save(Stream stream, ImageFormat if) |
Метод Save не работает с объектами Image, загруженными из метафайла или хранящимися в битовой карте в памяти. Кроме того, нельзя сохранить изображение в формате метафайла или битовой карты в памяти.
Следующие два метода предоставляют возможности изменения размера, а также вращения и переворота изображения соответственно.
Методы класса Image (выборочно)
Image GetThumbnailImage(int cx, int су, Image.GetThumbnailImageAbort gtia, IntPtr pData) |
void RotateFlip(RotateFliptype rft); |
Метод GetTbumbnailImage создает миниатюры — уменьшенные изображения, позволяющие приложениям представлять их содержимое пользователю, экономя время и место. Тем не менее метод GetTbumbnailImage фактически является универсальной функцией изменения размера изображения. Картинку можно как увеличить, так и уменьшить. Последние два аргумента указывают функцию обратного вызова, но им можно задать значения null и 0, что не скажется на работе метода. Следующая программа создает миниатюру, размещаемую в квадрате со стороной 64 пиксела.
Thumbnail.cs
//------------------------------------------ // Thumbnail.cs (C) 2001 by Charles Petzold //------------------------------------------ using System; using System.Drawing; using System.Windows.Forms; class Thumbnail: PrintableForm { const int iSquare = 64; Image imageThumbnail; public new static void Main() { Application.Run(new Thumbnail()); } public Thumbnail() { Text = "Thumbnail"; Image image = Image.FromFile("..\\..\\..\\Apollo11FullColor.jpg"); int cxThumbnail, cyThumbnail; if (image.Width > image.Height) { cxThumbnail = iSquare; cyThumbnail = iSquare * image.Height / image.Width; } else { cyThumbnail = iSquare; cxThumbnail = iSquare * image.Width / image.Height; } imageThumbnail = image.GetThumbnailImage(cxThumbnail, cyThumbnail, null, (IntPtr) 0); } protected override void DoPage(Graphics grfx, Color clr, int cx, int cy) { for (int y = 0; y < cy; y += iSquare) for (int x = 0; x < cx; x += iSquare) grfx.DrawImage(imageThumbnail, x + (iSquare - imageThumbnail.Width) / 2, y + (iSquare - imageThumbnail.Height) / 2, imageThumbnail.Width, imageThumbnail.Height); } }
Метод DoPage программы заполняет миниатюрами всю клиентскую область (или страницу принтера).
Метод GetThumbnailImage создает новое изображение, a RotateFlip — изменяет существующее. Он принимает единственный аргумент — член перечисления RotateFlipType.
Перечисление RotateFlipType
Член | Значение | Результат |
RotateNoneFlipNone Rotate180FlipXY |
0 | |
Rotate90FlipNone Rotate270FlipXY |
1 | |
Rotate180FlipNone RotateNoneFlipXY |
2 | |
Rotate270FlipNone Rotate90FlipXY |
3 | |
RotateNoneFlipX Rotate180FlipY |
4 | |
Rotate90FlipX Rotate270FlipY |
5 | |
Rotate180FlipX RotateNoneFlipY |
6 | |
Rotate270FlipX Rotate90FlipY |
7 | |
В перечислении 16 элементов, но только 8 уникальных значений, влияющих на изображение. Четыре из этих восьми элементов меняют местами значения свойств Width и Height объекта Image.
Если вам нужно повернуть или перевернуть изображение и одновременно сохранить исходную копию оригинального объекта Image, применяйте метод Clone.
Image imageCopy = (Image)image.Clone();
netlib.narod.ru | < Назад | Оглавление | Далее > |