Ich habe an einer Windows 8.1 RT-App gearbeitet, bei der der Benutzer ein Bild mit Stretch = Uniform lädt. Das Bild kann so klein wie möglich und so groß wie möglich sein. Die Beschneidung geschieht in meiner Benutzersteuerung und meine Benutzerkontrolle erscheint, wenn ich auf den Bildschirm / das Bild tippe / drücke und halte. Clipping geschieht, wenn ich tippe und halte und meinen Finger / meine Maus um das Bild im Hintergrund bewege.
Die Probleme, denen ich gegenüberstehe, sind
Immer wenn die App zum ersten Mal auf Emulator geladen wird und das erste Mal, wenn Tippen / Klicken und Halten ausgeführt wird, erscheint das Benutzersteuerelement oben links auf dem Bildschirm und dann oben Mein angeklickter / gehaltener Bereich. Was ich benötige, ist, dass es immer dort erscheint, wo ich klicke und halte und wenn ich klicke und halte. Beim Loslassen des Fingers / der Maus sollte es zusammenbrechen.
Ich verwende center transform. Ich möchte die Region (das Pixel), wo meine Maus derzeit genau in der Mitte des Benutzersteuerelements angezeigt wird, Wenn ich ein Bild mit kleiner Auflösung 480 * 800 oder noch kleiner, die Region von Meine Maus kommt nicht in die Mitte. Um es klarer zu machen: Stellen Sie sich vor, dass ich das CORNEA des menschlichen Auges anklicke und festhebe. Die Hornhaut sollte in der Mitte des Bedienelements angezeigt werden und der darüber und darunter liegende Bereich sollte den Rest des Teils abdecken .
Ich muss das Steuerelement wie im Video gezeigt drehen Hier finden Sie den vollständigen Code.
MainPage.XAML
%Vor%MAINPAGE.XAML.CS
%Vor%Magnifier.XAML
%Vor%Der Einfachheit halber kann das Projekt von hier heruntergeladen werden. Zum besseren Verständnis möchte ich, dass Sie dieses Video sehen. Genau das muss ich implementieren.
Ich habe es mit einigen Änderungen und Trigonometrie arbeitet hier .
MainPage.xaml
%Vor%MainPage.xaml.cs
%Vor%Magnifier.xaml
%Vor%Der Fix für 1 besteht darin, die Lupe zu aktualisieren, selbst wenn sie sich innerhalb von
befindet %Vor%So sieht die aktualisierte Methode wie
aus %Vor%Dies gibt Ihnen das gewünschte Verhalten, über das Sie sprechen.
Zum Auflösen des Begrenzungsproblems
Berechne die obigen Zeigerwerte in Bezug auf BitImage anstelle von LayoutGrid.
if (this.pointerX & lt; 0.0 || this.pointerY & lt; 0.0) Rückkehr; if (this.pointerX & gt; BigImage.ActualWidth || this.pointerY & gt; BigImage.ActualHeight) Rückkehr; var bi = (BitmapImage) BigImage.Source;
Bei der Drehung beim Erreichen der Kante geht es darum, den Rotationswinkel beim Erreichen der Kante sorgfältig zu berechnen und diese Rotationstransformation anzuwenden.
%Vor%Hoffe, das hilft.
Tags und Links c# image-processing windows-8.1 winrt-xaml windows-rt