Autor Beitrag
omvo02
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 19.10.08 17:03 
Hallo,

ich verkleinere ein Image, so dass es ohne, dass die Proportionen des Bildes verändert werden, in eine PicBox passt. Dabei wird ein horizontaler Verkleinerungs/Vergößerungs-Faktor und ein vertikaler Faktor berechnet wie hier beschrieben: www.codeproject.com/...lus/imageresize.aspx Scale to a fixed size

Der kleinere der beiden Faktoren, wird anschließend für die Verkleierung/Vergößerung des Bildes verwendet.
Dadurch bleibt schließt das Bild entweder in der Horizontalen oder der Vertikalen nicht mit der PictureBox ab. Folglich gibt es entweder in x- oder y-Richtung einen Offset.

Auf dieser Picture-Box zeichnen ich einen Auswahlrahmen. Das ausgewählte Rechteck soll aus dem Originalbild herauskopiert werden.
Dazu müssen die Abmessungen (Auswahlrahmen.Width, Auswahlrahmen.Height) und die Position des Auswahlrahmens (Auswahlrahmen.X, Auswahlrahmen.Y) auf das Originalbild umgerechnet werden. Dabei stehe ich irgendwie auf dem Schlauch.
Ich hatte vermutet, dass Breite und die Höhe des ausgewählten Bereichs sich wie folgt ergibt:

ausblenden Quelltext
1:
2:
BereichImOriginalBild.Width = Auswahlrahmen.Width / nPercent
BereichImOriginalBild.Width = Auswahlrahmen.Width / nPercent


Das funktioniert aber nicht. Könntet ihr mir vielleicht bei der Umrechnung der Position und der Abmessungen helfen, ist zwar keine direkte C#-Frage, aber ich programmiere es in C#, deshalb stelle ich es in das Forum hier ;-) Ich stehe irgenwie auf dem Schlauch und komme nicht drauf.

Danke!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 19.10.08 19:12 
:welcome:
user profile iconomvo02 hat folgendes geschrieben:
Ich hatte vermutet, dass Breite und die Höhe des ausgewählten Bereichs sich wie folgt ergibt:

ausblenden Quelltext
1:
2:
BereichImOriginalBild.Width = Auswahlrahmen.Width / nPercent
BereichImOriginalBild.Width = Auswahlrahmen.Width / nPercent
Abgesehen davon, dass du zweimal Width setzt, muss das so stimmen :? . 2px Breite werden bei 50% wieder 2px / .5 = 4px, passt.

_________________
>λ=
omvo02 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 19.10.08 19:23 
Danke für deine Antwort!
Das dachte ich auch. Aber es funktioniert nicht.
Wenn das gesammte verkleinerte Bild ausgewählt ist, bekomme ich zwar ein Bild mit den Abmessungen des Orignalbilde, aber das erzeugte Bild zeigt das Originalbild nicht vollständig an (was es ja müsste, da wenn ich das gesamte verkleinerte Bild auswähle, die Abbildung ja wieder ruckgängig gemacht wird), sondern rechts und unten fehlt ein Teil des Originalbildes, als wenn ich einen kleineren Bereicht ausgewählt hätte.

edit: in der 2. Zeile muss das Width natürlich durch Height ersetzt werden. Danke für deinen Hinweis, Kha.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 19.10.08 21:15 
user profile iconomvo02 hat folgendes geschrieben Zum zitierten Posting springen:
Danke für deine Antwort!
Das dachte ich auch. Aber es funktioniert nicht.
Wenn das gesammte verkleinerte Bild ausgewählt ist, bekomme ich zwar ein Bild mit den Abmessungen des Orignalbilde, [...]
Das zeigt doch imho, dass die Größenberechnung funktioniert und der Fehler wahrscheinlich an einer anderen Stelle steckt.
Wenn die Größe schon stimmt, aber rechts und unten etwas fehlt, was ist denn dann dazugekommen? Links und oben freie Fläche, oder ist es entsprechend verzerrt?

_________________
>λ=
omvo02 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 19.10.08 22:00 
Ja, das vermute ich auch. Ich werde anderen Code, speziell die Methode mit der ich den Bildausschnitt kopiere noch einmal auf Fehler überprüfen.
Zitat:
Wenn die Größe schon stimmt, aber rechts und unten etwas fehlt, was ist denn dann dazugekommen? Links und oben freie Fläche, oder ist es entsprechend verzerrt?

Tschuldigung, dass ich das nicht deutlich genug beschrieben hatte. Das Bild hört einfach auf ohne freie Fläche und ohne wirklich verzerrt zu sein, das Bild hat dann aber trotzdem die Abmessungen der Originals, was ja eigentlich nicht sein kann. Also hat es wohl eine kaum sichtbare Verzerrung.
Werde den anderen Code überprüfen.
omvo02 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 19.10.08 23:59 
Der Fehler war in der Methode, mit der ich den Ausschnitt des Bildes kopiert habe.
Ich habe in dieser Methode die DrawImage-Funktion verwendet gehabt mit dem Auswahlrahmen als Rectangle-Argument und als GraphicsUnit hatte ich Pixel angegeben. Ich hatte gedacht, das würde funktionierten, da die Bildgröße ja auch in Pixel angegeben wird. Jetzt rufe ich DrawImage-Funktion so auf, dass ich die Graphics-Unit nicht übergeben muss, so dass es funktioniert.
Die Pixelgröße des Bildes stimmt nicht mit der Größe der Pixel der GraphicsUnit.Pixel überein, so dass es also nicht funktioniert hat.

Danke für deine Hilfe!