1
0
UAHCode/CPE212/Project_01/main.cpp

174 lines
5.8 KiB
C++
Raw Normal View History

2022-08-28 21:12:16 +00:00
//
// main.cpp -- Project01, CPE212 Fall 2010 -- C++ Review Project
//
// Driver program for Image Processing Program which is used to test each
// image processing operation.
//
// DO NOT SUBMIT OR SUBMIT THIS FILE
//
// List of allowed include files appear below
#include <iostream>
#include <fstream>
#include <string>
using namespace std; // Global using declaration
// Global Constants -- you may use these global constants in your code
const int MAXROWS = 10; // Maximum number of rows in image
const int MAXCOLS = 10; // Maximum number of columns in image
// Function Prototypes for functions included at the end of main.cpp
void Print(const int image[MAXROWS][MAXCOLS]);
void Bars();
// Function Prototypes for the functions you must implement in project01.cpp
void LoadImage(const string imagefile, int image[MAXROWS][MAXCOLS]);
void FlipHorizontal(int image[MAXROWS][MAXCOLS]);
void FlipVertical(int image[MAXROWS][MAXCOLS]);
void RotateCW(int image[MAXROWS][MAXCOLS]);
void RotateCCW(int image[MAXROWS][MAXCOLS]);
void Transpose(int image[MAXROWS][MAXCOLS]);
// Start of main() function
int main (int argc, char * const argv[]) // Command-line arguments (more on this later)
{
ifstream inputs; // Input file stream variable for test file
char op, ch; // Hold operation and optional char input from test file
string comment; // Holds comment string input from test file
int image[MAXROWS][MAXCOLS]; // Array of integers representing image
string imagefile; // Name of image file
// Output usage message if test input file name is not provided
if (argc != 2)
{
cout << "Usage:\n project01 <inputfile>\n";
return 1;
}
// Attempt to open test input file -- terminate if file does not open
inputs.open(argv[1]);
if (!inputs)
{
cout << "Error - unable to open input file" << endl;
return 1;
}
// Process comment line from input file
getline(inputs, comment); // Input file header comment
cout << endl << comment << endl << endl; // Output file header comment
// Below is primary loop that processes each operation appearing within the test file.
// Starts with an initial priming read of first operation
inputs >> op; // Attempt to input first test operation from file
while (inputs) // While Not-EOF
{
switch (op) // Process operation input from test file
{
case '#': // Test file comment
getline(inputs, comment); // Input and echo the comment appearing in the test file
cout << '#' << comment << endl;
break;
case 'p': // Print Grid
Print(image); // Function definition appears at the end of this file
break;
case 'b': // Print Bars
Bars(); // Function definition appears at the end of this file
break;
case 'i': // Load Image
inputs >> imagefile; // Input name of imagefile from test file
LoadImage(imagefile, image); // Implement this function in project01.cpp
break;
case '+': // Rotate Image Clockwise 90 Degrees
RotateCW(image); // Implement this function in project01.cpp
break;
case '-': // Rotate Image Counterclockwise 90 Degrees
RotateCCW(image); // Implement this function in project01.cpp
break;
case 'v': // Flip Image Vertical
FlipVertical(image); // Implement this function in project01.cpp
break;
case 'h': // Flip Image Horizontal
FlipHorizontal(image); // Implement this function in project01.cpp
break;
case 't': // Transpose Image Across Major Diagonal
Transpose(image); // Implement this function in project01.cpp
break;
default: // Error
cout << "Error - unrecognized operation '" << op << "'" << endl;
cout << "Terminating now..." << endl;
return 1;
break;
}
cout << endl;
inputs >> op; // Attempt to input next command
}
return 0;
}
/************** Implementation of Print() and Bars() functions ********************/
// DO NOT MODIFY THIS CODE
void Print(const int image[MAXROWS][MAXCOLS])
// Print() -- outputs image row-by-row in desired format substituting
// * for 1 and - for 0.
{
for(int r=0; r < MAXROWS; r++) // Loop to visit each row in image
{
for(int c=0; c < MAXCOLS; c++) // Loop to output every element on crrent row
{
if (image[r][c] == 1) // Output appropriate symbol
{
cout << '*';
}
else if (image[r][c] == 0)
{
cout << '-';
}
else
{
cout << 'X';
}
}
cout << endl;
}
} // End Print()
void Bars()
// Bars() -- prints two horizontal rows of bars
{
cout << "#################################################################" << endl;
cout << "#################################################################" << endl;
} // End Bars()
/************** DO NOT DELETE *************/
// The preprocessor directive below will import the function definitions
// from the file project01.cpp and place them at the end of this file creating an
// Expanded Source File which is forwarded to the compiler for compilation.
#include "project01.cpp"
/************** End of main.cpp ***************/