Dr.Oste - Droste Effekt

Hier können eigene Projekte, die mit Qt in Beziehung stehen vorgestellt werden.
Antworten
Ewald113
Beiträge: 3
Registriert: 14. Juni 2012 20:10

Dr.Oste - Droste Effekt

Beitrag von Ewald113 »

Hallo Leute,

wir (eine kleine Gruppe von Studenten) arbeiten zurzeit an einem Projekt namens Dr.Oste.
Gerne würden wir unser Programm hier vorstellen, Verbesserungsvorschläge erfragen und um Hilfe bitten.

Motivation:
Zurzeit gibt es bereits Anwendungen, die es ermöglichen ein Bild mit Hilfe des Droste-
Effekts zu bearbeiten, wie z.B. Plug-in für Photoshop oder Gimp.
Da diese zusatzprogramme nicht mit jeder Version kompatibel sind oder viel Geld kosten,
wird dieses standalone Programm entwickelt. Zudem sind vorhandene Programm meist unübersichtlich und für Laien
nicht ganz einfach zu bedienen. Diese Software erlaubt dem Benutzer ein beliebiges Bild einzulesen,
zu bearbeiten und anschließend abzuspeichern. Die Bearbeitung basiert auf den Droste-Effekt und bildet rekursives Abbild
des Orginalbildes. Mathematischer Hintergrund: http://www.josleys.com/article_show.php?id=82

Das Programm und der Code ist auf https://sourceforge.net/projects/drdroste/ gelistet :!:

Und jetzt bitte ich euch um eure Meinung :?:
Wie findet ihr das Projekt?
Was würdet ihr ändern?
Vielleicht fällt euch der Bug auf, dass die Berechnung des Vorschaubildes nicht ganz mit der Berechnung des Originalen übereinstimmt. Kennt ihr eine Lösung? :idea:

Danke für eure Interesse.
Ewald113
Beiträge: 3
Registriert: 14. Juni 2012 20:10

Re: Dr.Oste - Droste Effekt

Beitrag von Ewald113 »

Das Herzstück des Programms.
ratio ist das Verhältnis zwischen Vorschaubild und Originalbild.

Code: Alles auswählen

QImage Edit::droste_effect(QImage img, QImage img_droste, double ratio, complex<double>shift, complex<double>rotate, double zoom, int Spirals, int filterValue, int max_rekursion, QRect selection)
{
	//Mittelpunkt der Auswahl
	QPoint mitte = selection.center()*ratio;
	double ym=mitte.y();
	double xm=mitte.x();

	//Berechnung des Größenverhältnisses von Bild zu Auswahlbereich
	double xscale=(double)img.width()/((double)selection.width()*ratio);
	double yscale=(double)img.height()/((double)selection.height()*ratio);
	double m=(yscale*xscale)/2; 
	
	//Berechnung des Droste Fixpunktes
	complex<double> Cl (img.width()/2,img.height()/2); 
	complex<double> Cs(xm,ym);
	complex<double> Cf = Cl + ((Cl-Cs)/(1-m));

	//Neuer Punkt um den gedrostet werden soll
	xm=real(Cf);
	ym=imag(Cf);
	
	//Berechnung der Paramter für Droste Effect
	double alpha = atan((log(m)/(2*pi))*Spirals);
	double f = cos(alpha);
	complex<double> c_alpha (0,alpha);
	complex<double> beta = f*exp(c_alpha);

	//Abstand Droste-Fixpunkt zu Auswahlbereich, Fixpunkt. a = Offsetzoom
	double a=0.5*(double)min(selection.width(),selection.height());
	a=a*ratio;
	zoom=pow(zoom,Spirals);//damit wenn man sprialen erhöt, kein undefinierten Bereich sichtbar ist.

    //Transformation der einzellnen Pixel
    for(double x=0;x<img_droste.width();x++){
        for(double y=0;y<img_droste.height();y++){
	
			//Polarkoordinaten
			complex<double> z(x-xm,y-ym);	
			z = z + shift*ratio;			//Verschieben									
			z = a*pow(z,beta/(beta*beta));	//Transformieren
			z = z*exp(-rotate);			//rotieren
			z = z/zoom;				//zommen
						
			//Rücktransformation
			for(int i=0;i<max_rekursion;i++)
			{
				z=z*m;

				double x_original = real(z)/((double)img_droste.width())+xm;
				double y_original = imag(z)/((double)img_droste.height())+ym;
				
				if((x_original<img.width() && x_original >= 0 && y_original >=0 && y_original <img.height())){					
					QRgb Farbe = img.pixel(x_original,y_original);
 					img_droste.setPixel(x,y,Farbe);
				}
			}
		}
    }
	return img_droste;
}
Scary Hallo

Re: Dr.Oste - Droste Effekt

Beitrag von Scary Hallo »

Ich finde das Projekt interessant. Leider fehlen im Source-Code die Resource-Datei und die Icon-Images
Ewald113
Beiträge: 3
Registriert: 14. Juni 2012 20:10

Re: Dr.Oste - Droste Effekt

Beitrag von Ewald113 »

Hi,

schön einen weiteren Interessenten zu kennen.
Danke für den Hinweis, ich lade diese sofort hoch.

Viel spaß beim tüfteln
Antworten