Imagen Imagen::operator+( Imagen &imagen){

		int filas, columnas;

		if( nfilas > imagen.filas())
			filas = nfilas;
		else
			filas = imagen.filas();
		columnas = ncolumnas + imagen.columnas();
		
		Imagen resultado(filas,columnas);
		
		

		for (int i = 0; i < nfilas; i++){
			for( int j = 0; j < ncolumnas; j++){
				resultado.datos[i][j] = datos[i][j];
				
			}
		}
		
		for (int i = 0; i < imagen.filas(); i++){
			for ( int j = 0; j < imagen.columnas(); j++){
				resultado.datos[i][j+ncolumnas] = imagen.datos[i][j];
				
			}
		}
		
		return resultado;
	}
Example #2
0
void graficaPuntos(double xi, double yi, double xf, double yf, double x[], double y[], int n,Color c, Imagen& I){
	double dx = (xf - xi);
	double dy = (yf - yi);
	for(int i=1;i<n;i++){
		int x1 = (int)floor((x[i-1]-xi)*I.columnas()/dx);
		int y1 = (int)floor((y[i-1]-yi)*I.filas()/dy);
		int x2 = (int)floor((x[i]-xi)*I.columnas()/dx);
		int y2 = (int)floor((y[i]-yi)*I.filas()/dy);
		primitivas::linea(I, x1,y1,x2,y2,c);
	}
}
Example #3
0
int main(int argc, char **argv){
    
    char grises[500]="";   
    char ruta[300] = "imagenes/";
    char ima[100] = "";
    Imagen origen;

    cout<<"Diga el nombre de la imagen con la extension"<< endl;
    cin >> ima;

    strcat(ruta,ima);

    if (!origen.leerImagen(ruta)){
       cerr << "error leyendo "<< ruta << "\n";
       return 1;
    }
    int tama = (origen.filas()*origen.columnas())+1;

    char arteASCII[tama];

    cout<<"Inserta los caracteres: "<< endl;
    cin >> grises;

    cout << "\nLa imagen en arte ASCII es:\n";
    if(origen.aArteASCII(grises, arteASCII, tama))
        cout << arteASCII;
    else
        cout << "La conversión no ha sido posible" << endl;  

}
Example #4
0
bool ocultar(Imagen &imagen, char cadena[]){
	int tama_ima = imagen.filas() * imagen.columnas();
	int tama_mens=strlen(cadena);
	int contador=0;

	if( (tama_mens +1) *8 > tama_ima){
		cerr << "La cadena es demasiado larga" << endl; // cerr
		return false;
	}else{
		for (int i =0;  i <= tama_mens; i++){
			for(int j=7; j>=0; j--){
				bool bit = get(cadena[i],j);
				byte byte_imagen = imagen.getPos(contador);
				if(bit){
					on(byte_imagen,0);
					imagen.setPos(contador,byte_imagen);
				}else{
					off(byte_imagen,0);
					imagen.setPos(contador,byte_imagen);
				}
				contador++;
			}
		}
		return true;		
	}
}
Example #5
0
int main() {
    Imagen origen;
    Imagen destino(150,200);

    // Crear un degradado en la imagen destino
    for (int i=0; i < destino.filas()*destino.columnas(); i++)
        destino.setPos(i, i%destino.columnas()+20);

    // Guardar la imagen destino en el fichero degradado.pgm
    if (destino.escribirImagen("degradado.pgm", false)) {
        // si todo va bien
        cout << "degradado.pgm guardado correctamente \n";
        cout << "usa: display degradado.pgm para ver el resultado\n";
    } else { // si error
        cerr << "Error guardando la imagen degradado.pgm\n";
        return 1;
    }

    // Leer la imagen lena.pgm
    if (!origen.leerImagen("imagenes/lena.pgm")) {
        cerr << "error leyendo imagenes/lena.pgm\n";
        return 1;
    }

    // Recortar un trozo de la imagen origen
    Imagen aux(40,90);
    Imagen salida (aux); //Llamamos al operador de asignacion
    for (int i=0; i < salida.filas(); i++)
        for (int j=0; j < salida.columnas(); j++)
            salida.set(i, j, origen.get((i+110)%origen.filas(),(j+100)%origen.columnas()));
    //Hemos aplicado un filtro de modulo para que no intente leear fuera del vector de datos
    // Guardar la imagen salida en el fichero trozo.pgm
    if (salida.escribirImagen("trozo.pgm", false)) {
        // si todo va bien
        cout << "trozo.pgm guardado correctamente \n";
        cout << "usa: display trozo.pgm para ver el resultado\n";
    } else { // si error
        cerr << "Error guardando la imagen trozo.pgm\n";
        return 1;
    }
    return 0;
}
	void Imagen::copia(Imagen & imagen){
		if(datos==NULL)
			destruir();
		nfilas = imagen.filas();
		ncolumnas = imagen.columnas();
		datos = new byte*[nfilas];
		datos[0]=new byte[nfilas*ncolumnas];
		for (int i=1; i < nfilas; i++){
			datos[i] = datos[i-1] + ncolumnas;
		} 
		for(int i=0;i<nfilas;i++)
			for(int j=0;j<ncolumnas;j++)
				datos[i][j]=imagen.get(i,j);
	}
Example #7
0
bool revelar(Imagen imagen, char cadena[], const int tam_max){
	int tama_ima = imagen.filas() * imagen.columnas();	
	bool fin=false;
	int contador=0;

	for (int i=0; i< tam_max && i< tama_ima && !fin; i++){
		for (int j=7; j>=0; j--){
			byte byte_imagen = imagen.getPos(contador);
			if(get(byte_imagen,0)){
				unsigned char aux= cadena[i];
				on(aux,j);
				cadena[i]=aux;		
			}else{
				unsigned char aux= cadena[i];
				off(aux,j);
				cadena[i]=aux;	
			}
			contador++;
		}
		if (cadena[i]=='\0')
			fin =true;
	}
	return fin;	
}