0% found this document useful (0 votes)
483 views7 pages

Assignment 1 - ImageMaker F2020

This document provides specifications for an ImageMaker class assignment. It describes the portable pix map (PPM) image format and defines requirements for a class to create and manipulate PPM images, including drawing pixels, rectangles, and lines. It also defines requirements for a test driver class to test the ImageMaker class functionality through commands like drawing shapes, setting colors, loading/saving images, and handling errors. Extra credit opportunities are described for adding additional drawing methods.

Uploaded by

WE
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
483 views7 pages

Assignment 1 - ImageMaker F2020

This document provides specifications for an ImageMaker class assignment. It describes the portable pix map (PPM) image format and defines requirements for a class to create and manipulate PPM images, including drawing pixels, rectangles, and lines. It also defines requirements for a test driver class to test the ImageMaker class functionality through commands like drawing shapes, setting colors, loading/saving images, and handling errors. Extra credit opportunities are described for adding additional drawing methods.

Uploaded by

WE
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

Assignment 1: ImageMaker

Portable Pix Map Image Format Specification


The portable pix map image format (ppm) is one of the simplest methods of creating an image file. This
format is encoded as readable ascii text or viewed as an image with an image viewing program such as
gimp.

In this assignment, you will make a class that create a ppm image using basic drawing methods. In
addition, you will make a driver that can be used to help test the functionality of the class. BE SURE TO
READ THE DELIVERABLES!

RGB Format
P3
4 4
255
0 0 0 200 0 0 0 0 0 155 0 155
0 0 0 0 155 175 0 0 0 0 0 0
0 0 0 0 0 0 0 100 175 0 0 0
255 255 255 0 0 0 0 0 0 155 155 155

The first three lines defines the image header. P3 indicates that the image will use RGB color. The
second line indicates width and height. The 255 indicates the maximum value for the color. In the
example above colors are between 0-255. Read the following wiki-link for additional details:
https://en.wikipedia.org/wiki/Netpbm_format

Coordinate System
Unlike in math, the standard coordinate system for images starts in the upper left hand corner.
Class Definition
The following is the class definition:

const int MAX_WIDTH = 640;


const int MAX_HEIGHT = 480;
const int MAX_COLOR = 255;
enum COLOR {RED, GREEN, BLUE};

using namespace std;

class ImageMaker
{
public:
ImageMaker();
ImageMaker(string filename);

// Opens image with filename and stores information into


void LoadImage(string filename);
void SaveImage(string filename);

// Size functions
int GetWidth();
int GetHeight();
void SetWidth(int width);
void SetHeight(int height);

// Color functions
int GetPenRed();
int GetPenGreen();
int GetPenBlue();
void SetPenRed(int newR);
void SetPenGreen(int newG);
void SetPenBlue(int newB);

// Drawing methods
// These methods will use the current red, green, blue values of the pen
void DrawPixel(int x, int y);
void DrawRectangle(int x1, int y1, int x2, int y2);
void DrawLine(int x1, int y1, int x2, int y2);

private:
int width;
int height;
int pen_red; // Used by draw functions
int pen_green; // Used by draw functions
int pen_blue; // Used by draw functions
short image[MAX_WIDTH][MAX_HEIGHT][3];
};

Before you start looking at how to implement this class, you must determine and document the
appropriate preconditions and postconditions for each operation (See page 139 for examples or
preconditions and postconditions).
Constructor
There are two constructors. The default constructor should create an image with 0 width and 0 height,
and set the initial pen color to black (255, 255, 255). The second constructor should load a ppm image
into the image matrix and set the width and height accordingly; the default color should be set to black.

Draw Functions
All draw functions should throw an error if out of bounds values are given. All draw functions use the
current pen_red, pen_green and pen_blue values as the “pen” color when drawing.

DrawPixel colors the coordinate (x, y) using the current values of the pen_red, pen_green, and
pen_blue.

DrawRectangle draws a rectangle using the current values of pen_red, pen_green, and pen_blue.

(x1, y1)

(x2, y2)
DrawLine draws a rectangle using the current values of the red, green, and blue. Suppose

(x1, y1)  (3, 2)


(x2, y2)  (6, 4)

(3,2)

(6,4)

To figure out the values for y, you will need to figure out the line y = mx + b. In this case, it would be

m = (4 – 2)/(6 – 3) = 2/3= 0.6666667

b = y1 – m*x1 = 2 – 0.66667*3 = 0

y = 0.666667x + 0

With this formula, you can figure out the y values for x = 3 … 6.
Note that for x = 4

y = 0.66667*4 + 0 = 2.666667

Since there is no pixel for (4, 2.666667), we can just round the y coordinate and use the coordinate (4, 3)
instead.

DrawRectangle(2, 3, 6, 4) and DrawRectangle(6, 4, 2, 3) should both produce the same line.


Test Driver
Before this class can become a permanent part of your program library, it must be thoroughly tested.
The test driver should support the following test commands:
DrawPixel x y
Draw a pixel at x, y
DrawRectangle x1 y1 x2 y2
Draw a rectangle using the points x1, y1 to x2, y2
DrawLine x1 y1 x2 y2
Draw a line from x1, y1 to x2, y2
SetColor r/g/b value
Sets the r, g, or b to value
PrintRGB
Prints out the values of red, green and blue to the screen
SetSize width height
Sets the width and height
PrintSize
Prints out the size
Load imagename
Loads a ppm image with name imagename
Save imagename
Saves the image using the name imagename
Quit

Notes
1. The Load function should throw an error if file is not formatted correctly. The test driver must
be able to catch these errors and continue. Be sure to refer to examples given in class.
2. Be sure to refer to the other test driver examples
3. The ImageMaker class must throw an error if bad input is given. The test driver must be able to
catch these errors and continue. Be sure to refer to examples given in class.
4. Clarity and formatting will be counted as part of the grade.
5. Pre and post conditions should be included for each method.

Deliverables
• Your ImageMaker class
• Your test driver class
• Your test plan as input to the test driver (See page 125 for an example)
(THE TEST PLAN IS NOT TRIVIAL AND A SUBSTATIAL PART OF THE GRADE)
• The input files used with your test driver
• The output files from the test driver
Extra Credit Opportunities
Extra credit is generally available for all my projects. More difficult extensions receive more points. The
following are some ideas for extensions that can be done for extra credit. Points are additive (more
features, more points).

Additional drawing methods/features (1-10%)

Extra credit awarded depending how difficult the drawing method or feature is. For example, a
DrawTriangle would have a relatively low extra credit. A filled rectangle would get slightly more points.
Additional Notes and Questions
Stack overflow error for Visual Studio
If you encounter a stack over flow error, it means you need to increase the size of the stack memory
used for the program. The following increases the size of the stack to 4mb, which should be large
enough to handle most situations for this class.

PROJECT  Properties  Configuration Properties  Linker  System  Stack Reserve Size=4194304

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy