netlib.narod.ru< Назад | Оглавление | Далее >

Подробнее о классе Image

Класс 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 программы заполняет миниатюрами всю клиентскую область (или страницу принтера).


Рис. 11.13.

Метод 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< Назад | Оглавление | Далее >

Сайт управляется системой uCoz