This article has been
excerpted from book "Graphics Programming with GDI+".
Sometimes we need to draw multiple images on the same spot, one on top of the
other. In the previous section we discussed how to draw transparent graphics
objects on top of images. In this section we will discuss how to draw images
(transparent or opaque) on top of other images.
Drawing transparent images is different from drawing transparent graphics
objects such as lines, rectangles, or ellipses. To draw transparent graphics
objects, we simply create a transparent color and use this color when we create
a pen or a brush.
Drawing transparent images is controlled by the color matrix (represented by the
ColorMatrix class), which defines the transparency of the image. A color matrix
is applied to an image when we call DrawImage. The DrawImage method takes an
argument of type ImageAttributes. The SetColorMatrix method of ImageAttributes
sets a color matrix to the ImageAttributes type. Passing ImageAttributes to
DrawImage applies the color matrix to the image.
As usual, we create a Windows application. In this application we will draw a
large image, and a small image on top of the large image. To make this
application more interesting, we add a transparency control to the application
so that we can adjust the transparency of the top image. The final form looks
like Figure 7.40.
Now let's add a TrackBar control to the form. We set the Maximum and Minimum
properties of TrackBar to 10 and 0, respectively. Then we write a TrackBar
control scroll event so that when we scroll the track bar it can manage the
transparency of the image.
Note: We have defined a float type variable in the class as follows:
float tpVal = 1.0f;
Now we convert the TrackBar value to a floating value so that we can use it in
the ColorMatrix class to set the color of the image, as Listing 7.25 shows. The
ColorMatrix class constructor takes an array, which contains the values of
matrix items. The Item property of this class represents a cell of the matrix
and can be used to get and set cell values. Besides the Item property, the
ColorMatrix class provides 25 MatrixXY properties, which represent items of the
matrix at row (x+1) and column (y+1). MatrixXY properties can be used to get and
set an item's value.
FIGURE 7.40: Drawing multiple images
LISTING 7.25: The TrackBar scroll event handler
private void
trackBar1_Scroll(object sender, System.EventArgs
e)
{
tpVal = (float)trackBar1.Value / 10;
this.Invalidate();
}
We will now view both images on the form's paint event, as Listing 7.26 shows.
We create an Image object and view the first image. Then we create a ColorMatrix
object with transparency and set it with the ImageAttribute property. Later we
attach the ImageAttribute property to the second image when we draw it using the
DrawImage method.
LISTING 7.26: Viewing multiple images on the form-load event
private void
Form1_Paint(object sender,
PaintEventArgs e)
{
//Create an Image object (first image)
from a file
curImage = Image.FromFile("roses.jpg");
//Draw first image
e.Graphics.DrawImage(curImage, AutoScrollPosition.X,
AutoScrollPosition.Y, curImage.Width, curImage.Height);
//Create an array of ColorMatrix point
float[][] ptsArray =
{
new
float[] {1, 0, 0, 0 ,0},
new
float[] {0, 1, 0, 0 ,0},
new
float[] {0, 0, 1, 0 ,0},
new
float[] {0, 0, 0, tpVal ,0},
new
float[] {0, 0, 0, 0 ,1}
};
//Create a ColorMatrix object
ColorMatrix clrMatrix = new
ColorMatrix(ptsArray);
//Create image attributes
ImageAttributes imgAttributes = new
ImageAttributes();
//Set color matrix
imgAttributes.SetColorMatrix(clrMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
//Create second Image object from a file
Image smallImage =
Image.FromFile("smallRoses.gif");
//Draw second image with image attributes
e.Graphics.DrawImage(smallImage,
new
Rectangle(100, 100, 100, 100),
0, 0, smallImage.Width, smallImage.Height,
GraphicsUnit.Pixel, imgAttributes);
}
Conclusion
Hope the article would have helped you in understanding viewing multiple images
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. |