Ein Bild mit niedriger Auflösung mit Transforms kopieren und es meinem Benutzer-Steuerelement zuweisen

8

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

  1. 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.

  2. 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 .

    1. Ich möchte nicht, dass mein Steuerelement außerhalb meiner Bildgrenze liegt. Wenn sich meine Maus am letzten Pixel des Bildes befindet, sollten ein Teil des Bildes und ein Teil des Hintergrunds angezeigt werden.
  3. 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.

    
Apoorv 17.04.2015, 15:17
quelle

2 Antworten

1

Ich habe es mit einigen Änderungen und Trigonometrie arbeitet hier .

MainPage.xaml

%Vor%

MainPage.xaml.cs

%Vor%

Magnifier.xaml

%Vor%     
Filip Skakun 10.05.2015, 09:36
quelle
0

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.

    
Neeraj 01.05.2015 17:03
quelle