Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Graphics.doc
Скачиваний:
20
Добавлен:
16.11.2019
Размер:
3.1 Mб
Скачать

Обрезка изображения по границам области обрезки

Одним из свойств класса Graphics является область обрезки. Все операции рисования, выполняемые объектом Graphics, ограничиваются областью обрезки данного объекта Graphics. Для установки границ области обрезки служит метод SetClip.

Пример

В следующем примере создается контур, состоящий из одного многоугольника. Затем конструируется область на основе созданного ранее контура. Область передается методу SetClip объекта Graphics, а затем отображаются две строки.

Обрезанные строки показаны на следующем рисунке.

-----

Компиляция кода

Предыдущий пример предназначен для работы с Windows Forms, для него необходим объект PaintEventArgs e, передаваемый в качестве параметра обработчику события PaintEventHandler.

Using Image Encoders and Decoders in Managed GDI+

The System.Drawing namespace provides the Image and Bitmap classes for storing and manipulating images. By using image encoders in GDI+, you can write images from memory to disk. By using image decoders in GDI+, you can load images from disk into memory. An encoder translates the data in an Image or Bitmap object into a designated disk file format. A decoder translates the data in a disk file to the format required by the Image and Bitmap objects.

GDI+ has built-in encoders and decoders that support the following file types:

  • BMP

  • GIF

  • JPEG

  • PNG

  • TIFF

GDI+ also has built-in decoders that support the following file types:

  • WMF

  • EMF

  • ICON

How to: List Installed Encoders

You may want to list the image encoders available on a computer, to determine whether your application can save to a particular image file format. The ImageCodecInfo class provides the GetImageEncoders static methods so that you can determine which image encoders are available. GetImageEncoders returns an array of ImageCodecInfo objects.

Example

The following code example outputs the list of installed encoders and their property values.

Применение кодировщиков и декодеров изображений в управляемом GDI+

В пространстве имен System.Drawing имеются классы Image и Bitmap, которые служат для хранения изображений и управления ими. С помощью кодировщиков изображений GDI+ можно сохранять изображения из памяти на диск. С помощью декодеров изображений GDI+ можно загружать изображения с диска в память. Кодировщик выполняет трансляцию данных в объекте Image или Bitmap в формат файла для сохранения на диске. Декодер выполняет трасляцию данных в файле на диске в формат, который требуется для работы объектов Image и Bitmap.

В GDI+ имеются встроенные кодировщики и декодеры, поддерживающие следующие типы файлов:

  • BMP

  • GIF

  • JPEG

  • PNG

  • TIFF

В GDI+ также имеются встроенные декодеры, поддерживающие следующие типы файлов:

  • WMF

  • EMF

  • ICON

Получение списка установленных кодировщиков

Иногда требуется получить список установленных на компьютере кодировщиков, чтобы понять, может ли приложение сохранять изображение в виде файла того или иного формата. У класса ImageCodecInfo имеются статические методы GetImageEncoders, позволяющие получить список доступных кодировщиков изображений. Метод GetImageEncoders возвращает массив объектов ImageCodecInfo.

Пример

Следующий пример кода возвращает список установленных кодировщиков и значения их свойств.

private void GetImageEncodersExample(PaintEventArgs e)

{

// Get an array of available encoders.

ImageCodecInfo[] myCodecs;

myCodecs = ImageCodecInfo.GetImageEncoders();

int numCodecs = myCodecs.GetLength(0);

// Set up display variables.

Color foreColor = Color.Black;

Font font = new Font("Arial", 8);

int i = 0;

// Check to determine whether any codecs were found.

if (numCodecs > 0)

{

// Set up an array to hold codec information. There are 9

// information elements plus 1 space for each codec, so 10 times

// the number of codecs found is allocated.

string[] myCodecInfo = new string[numCodecs * 10];

// Write all the codec information to the array.

for (i = 0; i < numCodecs; i++)

{

myCodecInfo[i * 10] = "Codec Name = " + myCodecs[i].CodecName;

myCodecInfo[(i * 10) + 1] = "Class ID = " +

myCodecs[i].Clsid.ToString();

myCodecInfo[(i * 10) + 2] = "DLL Name = " + myCodecs[i].DllName;

myCodecInfo[(i * 10) + 3] = "Filename Ext. = " +

myCodecs[i].FilenameExtension;

myCodecInfo[(i * 10) + 4] = "Flags = " +

myCodecs[i].Flags.ToString();

myCodecInfo[(i * 10) + 5] = "Format Descrip. = " +

myCodecs[i].FormatDescription;

myCodecInfo[(i * 10) + 6] = "Format ID = " +

myCodecs[i].FormatID.ToString();

myCodecInfo[(i * 10) + 7] = "MimeType = " + myCodecs[i].MimeType;

myCodecInfo[(i * 10) + 8] = "Version = " +

myCodecs[i].Version.ToString();

myCodecInfo[(i * 10) + 9] = " ";

}

int numMyCodecInfo = myCodecInfo.GetLength(0);

// Render all of the information to the screen.

int j = 20;

for (i = 0; i < numMyCodecInfo; i++)

{

e.Graphics.DrawString(myCodecInfo[i],

font,

new SolidBrush(foreColor),

20,

j);

j += 12;

}

}

else

e.Graphics.DrawString("No Codecs Found",

font,

new SolidBrush(foreColor),

20,

20);

}

Compiling the Code

This example requires:

  • A Windows Forms application.

  • A PaintEventArgs, which is a parameter of PaintEventHandler.

-------