Gewusst wie: abrufen von zoom-Faktor und einer WinForms PictureBox?
Ich brauche die genaue position meines Mauszeigers über ein PictureBox-Steuerelement.
Ich benutze das MouseMove-Ereignis der PictureBox.
Auf dieser PictureBox, ich nutze die "zoom" - Eigenschaft, um ein Bild anzeigen.
Was ist die richtige Art und Weise für immer die position der Maus auf dem original (ungezoomten) Bild?
Gibt es eine Möglichkeit zu finden, den Skalierungsfaktor und verwenden Sie es?
Denk ich benutzen müssen, um imageOriginalSize/imageShowedSize zum abrufen dieser Skalierungsfaktor.
Verwende ich diese Funktion:
float scaleFactorX = mypic.ClientSize.Width / mypic.Image.Size.Width;
float scaleFactorY = mypic.ClientSize.Height / mypic.Image.Size.Height;
Möglich ist, verwenden Sie diesen Wert, um die korrekte position des Cursors über dem Bild?
- Ich nehme an, Sie können versuchen: Punkt cursorPosition = Goldfisch.PointToClient(Cursor.Position); Punkt positionOverImage = new Point(cursorPosition.X / scaleFactorX, cursorPosition.Y / scaleFactorY);. Aber ich nehme an, da kann es einige Probleme mit der Genauigkeit beim zählen Sie die Zoom-Faktor mit Hilfe dieser Methode. Ich würde vorschlagen, Sie skalieren das Bild auf Ihrem eigenen.
- danke,aber funktioniert nicht.position ist falsch,bekomme ich den selben Wert bei Verwendung von pointtoclient und eventmouseargs position.
- Poste bitte den code-snippet, das die Berechnung der Koordinaten, die Sie derzeit verwenden.
- Rechteck sourceRec = new Rectangle((int)(e.X / currentScale), (int)(e.Y / currentScale), 1, 1);
- Wenn Sie sagen, müssen Sie Ihre Maus-Koordinaten mit Bezug auf den ungedehnten Bild, was ist ein Anker erwarten Sie von Ihrem ungedehnten Bild zu haben? Ist es verankert an der Spitze der linken? Verankert in der Mitte?
- Eine richtige Konvertierung Bedürfnisse zu achten, um das Feld' SizeMode-Eigenschaft. Der code, den Sie verwenden, ist jetzt nur die richtige für die Strecke, eine ungewöhnliche Wahl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich zu lösen hatte das gleiche problem heute. Ich wollte mit ihm zu arbeiten, für Bilder in beliebiger Breite:Höhe-Verhältnis.
Hier ist meine Methode, um finden Sie den Punkt 'unscaled_p" auf der original-full-size-Bild.
Ist der erste trick ist, um zu bestimmen, wenn das Bild horizontal oder vertikal größer in Bezug auf die container, damit Sie wissen, welches Bild dimension füllt den container vollständig.
Beachten Sie, dass aufgrund Zoom zentriert das Bild, die "filler" - Länge eingerechnet werden, um zu bestimmen, die dimension, die nicht gefüllt ist, durch das Bild. Das Ergebnis, 'unscaled_p', ist der Punkt, auf den nicht skalierten Bild, dass 'p' entspricht.
Hoffe, das hilft!
Wenn ich Sie richtig verstanden habe, ich glaube, Sie würden etwas tun wollen, von dieser Art:
Annahme: die PictureBox passt zu dem Bild, Breite/Höhe, gibt es keinen Raum zwischen der Grenze, die PictureBox und das eigentliche Bild.
sollten Sie auf die ot Punkte der pixel in dem ursprünglichen Bild.
(float)
für das Verhältnis, das tun, in dem moment, wenn Sie sagen, hattevar ratioX
, dann ist es wahrscheinlich einint
, BedeutungratioX/Y
wird immer null sein.