0 Replies - 1371 Views - Last Post: 08 April 2009 - 05:12 PM Rate Topic: -----

#1 Alkaselzer  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 08-April 09

Stuck on arrays, .ppm images manipulations

Posted 08 April 2009 - 05:12 PM

Hi there again! I've been working on an assignment since it was given to me on Thursday, that involves making a C++ console application that manipulates .ppm images.The program is supposed to rotate the image 90,180,and 270 degrees clockwise and counterclockwise, flip the image horizontally and vertically, decompose the image in red, green and blue components in separated files, zoom in and zoom out the image by 2x and 4x, and convert the image in gray scale. I'm sincere... I have no idea of how to deal with this; I really don't understand how I can manipulate the image like it is required, using its arrays. I already (with help from the professor in class), managed to rotate the image to all degrees that are required but I'm really worried because this is supposed to hand over tomorrow Thursday, April 9, 2009. I'm not pretending that someone will make all the program for me, but, if someone could point me and teach me how to deal with this, I think I will be capable of making the program, or a little more than I already have. I haven't sleep since Thursday, when the project instructions were handed over. This is what i have for now:
#include<iostream>
#include<fstream>
#define s 256
using namespace std;
void read(int data[s][s*3],int & h,int & w,int & c);
void read2(int data[s][s*3],int & h,int & w,int & c);
void save(int data[s][s*3],int & h,int & w,int & c);
void rotate90(int data[s][s*3],int h,int w,int c);

/*	The image that I'm using, by orders of the assigment 
	is 'snail.ppm', which it is at 
	http://orion.math.iastate.edu/burkardt/data/ppm/ppm.html
	at the bottom of the page. I'm required to make a menu
	for the user selection of the type of modification
	to the image that will be made.*/

void main()
{
	int data[s][s*3],heigh,witdh,color,select,select2;
	do
	{
		cout<<"Choose an option: "<<endl;
		cout<<"\n1)Rotate Clockwise"<<endl;
		cout<<"2)Rotate Counter-Clockwise"<<endl;
		cout<<"3)Decompose"<<endl;
		cout<<"4)Zoom in"<<endl;
		cout<<"5)Zoom out"<<endl;
		cout<<"6)Convert into Grayscale"<<endl;
		cout<<"7)Exit"<<endl;
		cout<<"\nGive your selection:\t";
		cin>>select;
		switch(select)
		{
		case 1:
			do{
				cout<<"\nRotate:"<<endl;
				cout<<"1)90 degrees"<<endl;
				cout<<"2)180 degrees"<<endl;
				cout<<"3)270 degrees"<<endl;
				cout<<"Give your selection: ";
				cin>>select2;
				}while((select2<1)||(select2>3));
				switch(select2)
				{
				case 1:
					read(data,heigh,witdh,color);
					rotate90(data,heigh,witdh,color);
					cout<<"\nYour image was sucessfully rotated.\n"<<endl;
					break;
				case 2:
					read(data,heigh,witdh,color);
					for(int i=0;i<2;i++)
					{
						rotate90(data,heigh,witdh,color);
						read2(data,heigh,witdh,color);
					}
					cout<<"\nYour image was sucessfully rotated.\n"<<endl;
					break;
				case 3:
					read(data,heigh,witdh,color);
					for(int i=0;i<3;i++)
					{
						rotate90(data,heigh,witdh,color);
						read2(data,heigh,witdh,color);
					}
					cout<<"\nYour image was sucessfully rotated.\n"<<endl;
					break;

				}
		case 2:
			do{
				cout<<"\nRotate:"<<endl;
				cout<<"1)90 degrees"<<endl;
				cout<<"2)180 degrees"<<endl;
				cout<<"3)270 degrees"<<endl;
				cout<<"\nGive your selection: ";
				cin>>select2;
				}while((select2<1)||(select2>3));
				switch(select2)
				{
				case 1:
					read(data,heigh,witdh,color);
					for(int i=0;i<3;i++)
					{
						rotate90(data,heigh,witdh,color);
						read2(data,heigh,witdh,color);
					}
					cout<<"\nYour image was sucessfully rotated.\n"<<endl;
					break;
				case 2:
					read(data,heigh,witdh,color);
					for(int i=0;i<2;i++)
					{
						rotate90(data,heigh,witdh,color);
						read2(data,heigh,witdh,color);
					}
					cout<<"\nYour image was sucessfully rotated.\n"<<endl;
					break;
				case 3:
					read(data,heigh,witdh,color);
					rotate90(data,heigh,witdh,color);
					cout<<"\nYour image was sucessfully rotated.\n"<<endl;
					break;
				}
		}
	}while(select!=7);
}
void read(int data[s][s*3],int & h,int & w,int & c)
{
	char buffer[s];
	ifstream input;
	input.open("C:\\Users\\AK's\\Downloads\\snail.ppm",ios::in);
if(input==NULL)
{
	cout<<"Cannot open file"<<endl;
}
input.getline(buffer,s*3);
input.getline(buffer,s*3);
input>>w>>h>>c;
for(int i=0;i<h;i++)
{
	for(int j=0;j<w*3;j++)
	{
		input>>data[i][j];
	}
}
input.close();
}
void read2(int data[s][s*3],int & h,int & w,int & c)
{
	char buffer[s];
	ifstream input;
	input.open("C:\\Users\\AK's\\Downloads\\snail2.ppm",ios::in);
if(input==NULL)
{
	cout<<"Cannot open file"<<endl;
}
input.getline(buffer,s*3);
input.getline(buffer,s*3);
input>>w>>h>>c;
for(int i=0;i<h;i++)
{
	for(int j=0;j<w*3;j++)
	{
		input>>data[i][j];
	}
}
input.close();
}
void rotate90(int data[s][s*3],int h,int w,int c)
{
	ofstream output;
	output.open("C:\\Users\\AK's\\Downloads\\snail2.ppm",ios::out);
	output<<"P3"<<endl;
	output<<"#Title"<<endl;
	output<<w<<" "<<h<<endl;
	output<<c<<endl;
	for(int i=0;i<h;i++)
	{
		output<<endl;
		for(int j=0;j<w;j++)
		{
			output<<data [w-j-1][i*3]<<" "<<data[w-j-1][i*3+1]<<" "<<data[w-j-1][i*3+2]<<" ";
		}
	}
}


I will be very thankful if someone could lend me a hand with this... Thanks!!!

Is This A Good Question/Topic? 0
  • +

Page 1 of 1