This article has been
excerpted from book "Graphics Programming with GDI+".
Property |
Description |
Clsid |
Returns the Guid
structure that contains a GUID identifying a specific codec. |
CodecName |
Returns a string
containing the name of the codec. |
DilName |
Returns a string
containing the path name of the codec's DLL. If there is no DLL, returns
null. |
FilenameExtension |
Returns a string
containing the file name extension(s) used by the codec. The extensions
are separated by semicolons. |
Flags |
Returns a 32-bit
combination of flags from the ImageCodexFlag enumeration. |
FormatDescription |
Returns a string
describing the codec's file format. |
FormatID |
Returns a Guid
structure containing a GUID that identifies the codec's format. |
MimeType |
Returns a string
containing the codex's Multipurpose Internet Mail Extension (MIME) type. |
SignaturePatterns |
Returns a
two-dimensional array of bytes that can be used as a filter. |
SignaturePatterns |
Returns a
two-dimensional array of bytes representing the signature of the codec. |
Version |
Returns the
version number of the codec. |
In Listing 8.13, after creating an EncoderParameters object, we use the Encoder
and EncoderParameter objects to create three encoder parameters. These encoder
parameters are responsible for changing image color depth, compression, and
transformation. We use the Encoder class and set its ColorDepth property. Later
the Encoder object is used as an argument to EncoderParameter, which
subsequently is added to EncoderParameters. Then we also set the Transformation
and Compression properties to CompressionLZW and TransformRotation180,
respectively.
When we are done adding EncoderParameter object to EncoderParameters, we call
the Save method of Bitmap with the EncoderParameters object. Our sample saves
the bitmap to a TIFF file with 24 color depth, and LZW compression.
LISTING 8.13: Saving an image with encoder properties
private void
button1_Click(object sender, System.EventArgs
e)
{
ImageCodecInfo
imgCodecInfo = null;
Encoder encoder =
null;
EncoderParameter encoderParam = null;
EncoderParameters encoderParams =
new EncoderParameters(3);
// Create a Bitmap object from a file
Bitmap curBitmap =
new Bitmap("Roses.jpg");
// Define mimeType
string
mimeType = "image/tiff";
ImageCodecInfo[] encoders;
encoders =
ImageCodecInfo.GetImageEncoders();
for (int i = 0;
i < encoders.Length; ++i)
{
if (encoders[i].MimeType == mimeType)
imgCodecInfo = encoders[i];
}
// Sec color depth to 24 pixels
encoder =
Encoder.ColorDepth;
encoderParam =
new EncoderParameter(encoder, 24L);
encoderParams.Param[0] = encoderParam;
// Set compression mode to LZW
encoder =
Encoder.Compression;
encoderParam =
new EncoderParameter(encoder,
(long)EncoderValue.CompressionLZW);
encoderParams.Param[1] = encoderParam;
//
Set transformation to 180 degrees
encoder =
Encoder.Transformation;
encoderParam =
new EncoderParameter(encoder,
(long)EncoderValue.TransformRotate180);
encoderParams.Param[2] = encoderParam;
//
Save file as a TIFF file
curBitmap.Save("newFile.tif", imgCodecInfo,
encoderParams);
// Dispose of object
curBitmap.Dispose();
}
Retrieving Information from Digital Images or Tagged Data or TIFF Files
The PropertyItems property of the Image class returns an array of PropertyItem
object, which describe the attributes of an image. Each instance of PropertyItem
has four properties=Id, Len, Type, and Value- which represent the identifier,
length, type, and value of the property, respectively.
One common use of PropertyItem is to read the tagged data of TIFF files or the
information from the JPEG images taken from a digital camera. Listing 8.14 opens
a JPEG file and uses the Image.PropertyItems property to get an array of
PropertyItem objects. After that we make a loop and read all property item IDs
and values.
You can add this code to a button or a menu click event handler. Don't forget to
add a reference to the System.Drawing.Imaging namespace.
LISTING 8.14: Retrieving information from digital images
Graphics g =
this.CreateGraphics();
g.Clear(this.BackColor);
Image curImage =
Image.FromFile("DSCF0105.JPG");
// Return an array of property item using
// Image's propertyItems property
PropertyItem[] imgProperties = curImage.PropertyItems;
// Total Items
string str =
imgProperties.Length.ToString();
MessageBox.Show("Properties
" + str);
// Read items and display in a message box
for (int
i = 0; i < imgProperties.Length; i++)
{
str = string.Empty;
str = "Id :" +
imgPropeties[i].Id.ToString();
str += " , Values: "
+ BitConverter.ToString(imgProperties[i].Value);
MessageBox.Show(str);
}
// Dispose of object
g.Dispose();
Converting a Bitmap to Other Formats
Saving a bitmap as a PNG file or any another format is simple if we use
ImageCodecInfo settings. We create an ImageCodecInfo object with MIME type
image/png and use it as the second argument to the Save method of the Bitmap
class. Listing 8.15 converts Shapes.bmp to Shape0.png.
LISTING 8.15: Converting from JPEG to PNG
private void
ConvertToPNG_Click(object sender, System.EventArgs
e)
{
ImageCodecInfo imgCodecInfo = null;
// Create a bitmap from a file
Bitmap curBitmap =
new Bitmap("Shapes.bmp");
int j;
// Set MIME type. This defines the format
of the new file
string mimeType =
"image/png";
ImageCodecInfo[] encoders;
// Get GDI+ built-in image encoders
encoders = ImageCodecInfo.GetImageEncoders();
// Compare with our MIME type and copy it
to ImageCodecInfo
for (j = 0; j <
encoders.Length; ++j)
{
if (encoders[j].MimeType ==
mimeType)
imgCodecInfo = encoders[j];
}
// Save as PNG file
curBitmap.Save("Shape0.png",
imgCodecInfo, null);
// Dispose of object
curBitmap.Dispose();
}
Listing 8.15 will save Shapes.bmp to Shape0.png. You can save a file to other
formats by changing the MIME type.
Conclusion
Hope the article would have helped you in understanding image class methods and
properties in GDI+. Read other articles on GDI+ on the website.
|
This book teaches
.NET developers how to work with GDI+ as they develop applications
that include graphics, or that interact with monitors or printers.
It begins by explaining the difference between GDI and GDI+, and
covering the basic concepts of graphics programming in Windows. |