2.2 Thumbnail Class


In our design, the image class is a container for image pixels and nothing else. Since the purpose of this application is to create thumbnail images, a thumbnail class is needed to handle file I/O and the thumbnail algorithm. The thumbnail class has the following properties:

  • Reads the input image from a file.

  • Computes the thumbnail image given the input file and the reduction factor to use (i.e., how small a thumbnail image to create).

  • Throws a C++ exception, invalid , if any errors are encountered . If the image class throws a rangeError error, this exception is caught and the invalid exception is thrown instead.

  • Writes the thumbnail image to a file.

The complete definition of the thumbnail class is shown in Section 2.3.2 on page 16.

2.2.1 Thumbnail Algorithm

Each pixel in the thumbnail image is found by averaging a number of pixels in the input image. The pixel value in the thumbnail image, T(x0,y0) , is computed as shown in Figure 2.1, where factor is the desired reduction value.

Figure 2.1. Computing the Thumbnail Pixel Value

graphics/02fig01.gif

A picture helps clarify this equation. Each pixel in the original image P is reduced, by averaging pixel values in image P , to a corresponding point in the thumbnail image T using the equation from Figure 2.1. In Figure 2.2, we show how a group of pixels in the original image is reduced to the group of pixels shown in the thumbnail image.

Figure 2.2. Pictorial Representation of Thumbnail Computation

graphics/02fig02.gif

To further simplify our application, we ignore the condition created by integer arithmetic where the division by the reduction factor results in a fraction. For example, if the original image is 640x480 pixels in size, and the desired reduction factor is 6 , the thumbnail image will be (640/6)x(480/6) pixels in size or 106.67x80 . To avoid the fractional result, we ignore the last 4 pixels in each line, effectively making the thumbnail image (636/6)x(480/6) pixels in size or 106x80 .



Applied C++
Applied C++: Practical Techniques for Building Better Software
ISBN: 0321108949
EAN: 2147483647
Year: 2003
Pages: 59

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net