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

Сведения об изображении

Класс Image включает несколько свойств, предоставляющих сведения об объекте. Первыми идут три свойства, указывающие размер изображения в пикселах:


Свойства класса Image (выборочно)



Тип Свойство Доступ

Size Size Чтение
int Width Чтение
int Height Чтение


Свойства Width и Height согласуются со свойством Size. Используйте то, что больше вам подходит.

Большинство современных форматов растровых изображений также включает сведения о разрешении изображения в точках на дюйм или аналогичных метриках. Для некоторых изображений, в том числе и того, которое я использую, сведения о разрешении не имеют смысла. Вы можете увеличивать или уменьшать размер изображения, а оно останется таким же. Однако для некоторых растровых изображений (тех, в которых изображение должно соответствовать размеру отображаемого объекта) указание физического размера картинки может быть полезным.

Чем определяется разрешение? Обычно исходной программой, создавшей растровое изображение. Например, если изображение было отсканировано с разрешением 300 dpi, обрабатывающее ПО обычно задает ему это же разрешение. При создании картинки в приложении для живописи ей обычно задается экранное разрешение (предполагается, что вы создаете изображение для текущего размера экрана).

Дополнительные свойства класса Image позволяют получить горизонтальное и вертикальное разрешение объекта Image, а также итоговый метрический размер.


Свойства класса Image (выборочно)



Тип Свойство Доступ Описание

float HorizontalResolution Чтение В точках на дюйм
float VerticalResolution Чтение В точках на дюйм
SizeF PhysicalDimension Чтение В сотых долях миллиметра


Если изображение не содержит сведений о разрешении, свойства HorizontalResolution и VerticalResolution возвращают разрешение дисплея. Значение свойства PhysicalDimension (в частности потому, что в ранних версиях Windows Forms оно не работает) можно проигнорировать и вычислить метрический размер картинки самостоятельно. Так, следующие инструкции вычисляют размер в дюймах:

  float cxInches = image.Width  / image.HorizontalResolutlon;
  float cyInches = image.Height / image.VerticalResolution;

В предыдущих программах этой главы для вывода изображения использовалась такая версия метода DrawImage:

  grfx.DrawImage(image, х, у)

Она масштабирует изображение на основе его метрического размера! Именно поэтому в предыдущих программах картинка имела несколько иной размер, чем в приложениях Windows. Методы визуализации изображений мы обсудим ниже.

Еще одно свойства класса Image указывает формат пикселов. Этот формат определяет глубину цвета и то, как пикселы соответствуют цветам.


Свойства класса Image (выборочно)



Тип Свойство Доступ

PixelFormat PixelFormat Чтение


Данное свойство возвращает один из следующих элементов перечисления PixelFormat, определенных в пространстве имен System.Drawing.Imaging:


Перечисление PixelFormat (выборочно)



Член Значение

Undefined или DontCare 0x00000000
Format16bppRgb555 0x00021005
Format16bppRgb565 0x00021006
Format24bppRgb 0x00021808
Format32bppRgb 0x00022009
Format1bppIndexed 0x00030101
Format4bppIndexed 0x00030402
Format8bppIndexed 0x00030803
Format16bppArgb1555 0x00061007
Format32bppPArgb 0x000E200B
Format16bppGrayScale 0x00101004
Format48bppRgb 0x0010300C
Format64bppPArgb 0x001C400E
Format32bppArgb 0x0026200A
Format64bppArgb 0x0034400D


Число после слова Format указывает количество бит на пиксел: 1, 4, 8, 16, 32, 48 или 64. Форматы с разрядностью 1, 4 и 8 bpp являются индексированными, т.е. значения пикселов являются индексами палитры цветов. Форматы, имеющие в названии Rgb, хранят для каждого пиксела значение красной, зеленой и синей составляющих. Форматы Argb также включают альфа-канал, определяющий прозрачность. Форматы PArgb содержат значения красной, зеленой и синей составляющих с учетом альфа-значения. Может показаться, что численные значения элементов перечисления произвольны, однако, изучив их внимательнее, вы заметите определенный порядок. Возьмем, например, две крайних правых шестнадцатеричных цифры. Каждое значение уникально, начиная 0x00 (зловещее значение Undefined или DontCare) и кончая 0x0E.

Две следующих цифры справа указывают число бит на пиксел: 0x01, 0x04, 0x08, 0x10, 0x18, 0x20, 0x30 или 0x40. Другие цифры — это флаги. Ниже приведены значения перечисления PixelFormat, включая Мах, которое указывает количество форматов (вместе с Undefined — 15), а также значения, описывающие флаги.


Свойства класса Image (выборочно)



Член Значение Описание

Мах 0x0000000F Количество форматов
Indexed 0x00010000 Значения пикселов являются индексами в палитре
Gdi 0x00020000 Формат Windows GDI
Alpha 0x00040000 Содержит бит или байт прозрачности
PAlpha 0x00080000 В значениях для цветов учтена прозрачность
Extended 0x00100000 Использует больше 1 байта для каждой компоненты цвета или градации серого
Canonical 0x00200000 Стандартный формат


Класс Image также имеет статические методы, позволяющие извлечь большую часть этих сведений, не углубляясь в значения разрядов.


Статические методы класса Image (выборочно)



int GetPixelFormatSize(PixelFormat pf)
bool IsAlphaPixelFormat(PixelFormat pf)
bool IsCanonicalPixelFormat(PixelFormat pf)
bool IsExtendedPixelFormat(PixelFormat pf)


Первый метод возвращает число бит на пиксел.

Если изображение индексированное (что можно определить, выполнив поразрядное логическое умножение PixelFormat и PixelFormat.Indexed), у него имеется палитра цветов. Получить палитру поозволяет свойство Palette.


Свойства класса Image (выборочно)



Тип Свойство Доступ

ColorPalette Palette Чтение/запись


Довольно странное свойство. Как видно, оно доступно для чтения и записи. Однако сам класс ColorPalette (определенный в пространстве имен System.Drawing.Image) является изолированным (sealed). Это значит, что нельзя создать его подклассы и у него нет общедоступных конструкторов, т.е. нельзя создать его экземпляры. Таким образом, получить в .NET объект ColorPalette позволяет только данное свойство класса Image.

Сам класс ColorPalette обладает двумя неизменяемыми свойствами.


Свойства класса ColorPalette (выборочно)



Тип Свойство Доступ

Color[] Entries Чтение
int Flags Чтение


Свойство Entries возвращает массив цветов, образующих палитру изображения.

Еще одно свойство класса Image указывает формат файла:


Свойства класса Image (выборочно)



Тип Свойство Доступ

ImageFormat RawFormat Чтение


Я уже упоминал класс ImageFormat. Он включает статические свойства для всех поддерживаемых форматов растровых изображений.

Свойство RawFormat класса Image довольно трудно применять. Его можно использовать только со свойством экземпляра (т.е. только с нестатическим свойством) класса ImageFormat, возвращающим глобальный уникальный идентификатор (globally unique identifier, GUID) объекта ImageFormat:


Свойство экземпляра ImageFormat



Тип Свойство Доступ

Guid Guid Чтение


Программа может только проверить, имеет ли конкретный объект Image определенный тип ImageFormat. Например, при наличии объекта Image с именем image, загруженного из JPEG-файла, выражение:

  image.RawFormat.Guid == ImageFormat.Png.Guid

возвращает false, а:

  image.RawFormat.Guid == ImageFormat.Jpeg.Guid

возвращает true. Выражение:

  image.RawFormat.ToString()

возвращает строку:

  [ImageFormat: b96b3cae-0728-11d3-9d7b-0000f81ef32e]

а выражение

  ImageFormat.Jpeg.ToString()

возвращает строку:

  Jpeg

Вот и решайте, что именно вывести пользователю!

Подробнее о других свойствах и методах класса Image мы поговорим в следующих разделах.


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

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