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?
Danke für eure Interesse.
Dr.Oste - Droste Effekt
Re: Dr.Oste - Droste Effekt
Das Herzstück des Programms.
ratio ist das Verhältnis zwischen Vorschaubild und Originalbild.
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;
}
Re: Dr.Oste - Droste Effekt
Ich finde das Projekt interessant. Leider fehlen im Source-Code die Resource-Datei und die Icon-Images
Re: Dr.Oste - Droste Effekt
Hi,
schön einen weiteren Interessenten zu kennen.
Danke für den Hinweis, ich lade diese sofort hoch.
Viel spaß beim tüfteln
schön einen weiteren Interessenten zu kennen.
Danke für den Hinweis, ich lade diese sofort hoch.
Viel spaß beim tüfteln