Necesito ayuda con la creacion de un TDA Simple,
El problema dice asi;
Definir el TDA Pixel con las siguientes operaciones;
*Crear pixel: Dado 3 valores enteros devuelve un pixel
*Validar Pixel: Dado un pixel, determinar si sus valores son correctos. Considere que los puntos asumen valores solo en el rango[0,255]
*Mostrar pixel: Muestra el valor de sus componentes
*Crear blanco: Dado un pixel genera a sus puntos los valores apropiados para generar blanco
*Crear negro: Dado un pixel genera a sus puntos los valores apropiados para generar negro
Implementar el TDA PIxel utilizando a) arreglos, b)registros.
No entiendo bien como y que es lo que tengo que hacer si alguien me ayuda, estare muy agradecido, cualquer ayuda , manual lo que sea me sirve desde ya muchas gracias.
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
typedef struct{
int rojo;
int azul;
int verde;
}tpixel;
const int x=255, y=255;
void crear_pixel(tpixel &color);
bool validar_pixel(tpixel color);
void mostrar_pixel(tpixel color);
void generar_blanco();
void generar_negro();
int main()
{
tpixel color_pixel;
crear_pixel(color_pixel);
mostrar_pixel(color_pixel);
generar_blanco();
generar_negro();
system("pause");
return 0;
}
void crear_pixel(tpixel &color)
{
do{
cout << "Ingrese rojo : "; cin >> color.rojo;
cout << "Ingrese verde: "; cin >> color.verde;
cout << "Ingrese azul : "; cin >> color.azul;
}while(validar_pixel(color)!=true);
}
bool validar_pixel(tpixel color)
{
if((color.rojo<0 || color.rojo>255) || (color.verde<0 || color.verde>255) || (color.azul<0 || color.azul>255)){
return false;
}
else{
return true;
}
}
void mostrar_pixel(tpixel color)
{
cout << "Rojo : " << color.rojo << endl;
cout << "Verde: " << color.verde << endl;
cout << "Azul : " << color.azul << endl;
}
void generar_blanco()
{
ofstream img("picture.ppm");
img << "P3" << endl;
img << x << " " << y << endl;
img << "255" << endl;
for(int i=0; i<x; i++){
for(int k=0; k<y; k++){
int r=x%255;
int g=y%255;
int b=y*x%255;
img << r << " " << g << " " << b << endl;
}
}
system("open picture.ppm");
}
void generar_negro()
{
}
Más o menos como lo llevas...
con registros:
Estructura Pixel
byte rojo
byte verde
byte azul
fin estructura
* Crear pixel: Dado 3 valores enteros devuelve un pixel
pixel = funcion CrearPixel(entero rojo, entero Verde, entero Azul)
pixel px
// Como pide que entren enteros y no bytes es preciso verificar que están en el rango dado (y si no se truncan al límite).
px.Rojo = FijarRangoByte(rojo)
px.Verde = FijarRangoByte(verde)
px.Azul = FijarRangoByte(azul)
devolver px
fin funcion
*Validar Pixel: Dado un pixel, determinar si sus valores son correctos. Considere que los puntos asumen valores solo en el rango[0,255]
OJO: esta función no es exactamente 'validar', validar supone rechazar si no están en el rango reclamado, aquí se trunca, se fuerza un valor si o sí...
// Trunca un entero a byte si queda fuera de los límites de byte.
byte = FijarRangoByte(entero Valor)
byte b
Si valor <0
b= 0
osi valor> 255
b= 255
sino
b = valor
fin si
devolver b
fin funcion
*Validar Pixel: Dado un pixel, determinar si sus valores son correctos. Considere que los puntos asumen valores solo en el rango[0,255]
// Aquí se valida, pero no se indica queé hacer en caso de que falle la validación... luego no resulta útil por sí misma.
buleano = ValidarRangoByte(entero Valor)
Si ((valor >= 0) y (valor <= 255))
devolver TRUE
sino
devolver FALSE
fin si
fin funcion
*Mostrar pixel: Muestra el valor de sus componentes
funcion MostrarPixel(pixel px)
imprimir "los valores del píxel son: " + nuevalinea + " Rojo: " + px.rojo + nuevalinea + " Verde: " + px.verde + nuevalinea + " Azul: " + px.azul
fin funcion
*Crear blanco: Dado un pixel genera a sus puntos los valores apropiados para generar blanco
Te pongo 2 funciones. Realmente las dos son iguales, pero la enunciación parece pedirte la 2ª...
pixel = funcion CrearPixelBlanco
devolver CrearPixelGris(255)
fin funcion
funcion CrearPixelBlanco(pixel px)
ModificarPixelGris(px, 255)
fin funcion
*Crear negro: Dado un pixel genera a sus puntos los valores apropiados para generar negro
Te pongo 2 funciones. Realmente las dos son iguales, pero la enunciación parece pedirte la 2ª...
pixel = funcion CrearPixelNegro
devolver CrearPixelGris(0)
fin funcion
funcion CrearPixelNegro(pixel px)
ModificarPixelGris(px, 0)
fin funcio
Crear Gris: genera los valores apropiados para generar un nivel de gris (0-255)
// Asigna el mismo valor a los 3 canales del pixel CREADO...
pixel = funcion CrearPixelGris(byte valor)
pixel px
px.Rojo = valor
px.verde = valor
px.Azul = valor
devolver px
fin funcion
// Asigna el mismo valor a los 3 canales del pixel RECIBIDO...
funcion ModificarPixelGris(pixel px, byte valor)
px.Rojo = valor
px.verde = valor
px.Azul = valor
fin funcion
Luego te pide lo mismo (o de forma alternativa?), pero en vez de usar una estructura, usar un array, como se muestra aquí:
Array bytes Pixel[0 a 2]
es básicamente lo mismo pero usando un array en vez de una estructura, luego solo te pongo la 1ª función...
* Crear pixel: Dado 3 valores enteros devuelve un pixel
array bytes = funcion CrearPixel(entero rojo, entero Verde, entero Azul)
array bytes px[0 a 2]
// Como pide que entren enteros y no bytes es preciso verificar que están en el rango dado (y si no se truncan al límite).
px[0] = FijarRangoByte(rojo)
px[1] = FijarRangoByte(verde)
px[2] = FijarRangoByte(azul)
devolver px
fin funcion
p.d.: en el enunciado que pones no señala nada acerca de alguna imagen , todo parece referirse in situ a un píxel individual... si al final debe aplicarse sobre una imagen las funciones deben modificarse (para lojar el bucle que recorra la imagen entera en la función) o bien añadir un bucle para llamarlas por cada píxel (esto es mucho más lento, pero vale si su único propósito es un ejercicio).
Gracias @NEBIRE ahora lo entiendo un poco mas, lo que no se es como mostrar pixel/color en la consola de comandos. ;-)
#include <iostream>
using namespace std;
typedef struct{
int rojo;
int verde;
int azul;
}tpixel;
void crear_pixel(tpixel &color);
bool validar_pixel(tpixel color);
void mostrar_pixel(tpixel color);
void generar_blanco(tpixel color);
void generar_negro(tpixel color);
int main()
{
tpixel p;
crear_pixel(p);
mostrar_pixel(p);
generar_blanco(p);
generar_negro(p);
system("pause");
return 0;
}
void crear_pixel(tpixel &color)
{
do{
cout << "Ingrese rojo : "; cin >> color.rojo;
cout << "Ingrese verde: "; cin >> color.verde;
cout << "Ingrese azul : "; cin >> color.azul;
}while(validar_pixel(color)!=true);
}
bool validar_pixel(tpixel color)
{
if((color.rojo<0 || color.rojo>255) || (color.verde<0 || color.verde>255) || (color.azul<0 || color.azul>255)){
return false;
}
else{
return true;
}
}
void mostrar_pixel(tpixel color)
{
cout << "Rojo : " << color.rojo << endl;
cout << "Verde: " << color.verde << endl;
cout << "Azul : " << color.azul << endl;
}
void generar_blanco(tpixel color)
{
color.rojo=255;
color.verde=255;
color.azul=255;
cout << "Blanco" << endl;
mostrar_pixel(color);
}
void generar_negro(tpixel color)
{
color.rojo=0;
color.verde=0;
color.azul=0;
cout << "Negro" << endl;
mostrar_pixel(color);
}