Ich muss das Scrollen im Hintergrund simulieren, möchte aber vermeiden, dass meine eigentliche Bildsteuerung verschoben wird. Stattdessen möchte ich eine WriteableBitmap
und eine Blitting-Methode verwenden. Wie könnte man ein Bild simulieren, das nach oben rollt? Ich habe verschiedene Dinge ausprobiert, die ich nicht verstehen kann:
//X pos, Y pos, width, height
Rect src = new Rect(0, scrollSpeed , 480, height);
Rect dest = new Rect(0, 700 - scrollSpeed , 480, height);
//destination rect, source WriteableBitmap, source Rect, blend mode
wb.Blit(destRect, wbSource, srcRect, BlendMode.None);
scrollSpeed += 5;
if (scrollSpeed > 700) scrollSpeed = 0;
Wenn height
10 ist, ist das Bild ziemlich unscharf und mehr, wenn die Höhe ist 1
. Wenn die Höhe größer ist, ist das Bild klarer, aber es scheint nur eine Eins-zu-Eins-Kopie zu machen. Wie kann ich das Bild so scrollen, dass es aussieht, als würde es sich in einer Endlosschleife nach oben bewegen? (Die Höhe des Bildschirms beträgt 700).
c#
camera
silverlight
Skoder
quelle
quelle
Antworten:
Sie können einen Puffer nicht "scrollen", ohne irgendwo das Bit zu speichern, das vom Ende verschoben wurde. Es sieht also so aus, als müssten Sie entweder einen separaten Speicher für das Swapping-Blit oder eine separate Quell-Bitmap haben. Ich würde der Einfachheit halber Letzteres wählen, dann können Sie eine Bildlaufposition speichern und damit Ihre Rechtecke generieren.
Sie müssen zwei Rechtecke erzeugen, einen für die Oberseite und einen für die Unterseite. Der eine für die Oberseite muss auf der Höhe Null beginnen und sich erhöhen, bis er den Boden erreicht. Der mit ihm gepaarte Quell-Rechteck wird ebenfalls gestartet auf Nullhöhe, beginnt jedoch am unteren Rand des Quellbilds:
Ihr unterer Rect ist derjenige, mit dem Sie beginnen, und nimmt zu Beginn den gesamten Bildschirm ein. Verringern Sie die Größe, während Sie den Bildschirm nach unten aus dem Weg des oberen Rect bewegen. Der Source-Rect dafür würde das tun das gleiche, aber anstatt sich nach unten zu bewegen, schrumpft es nur.
Und mit diesen beiden Blits haben Sie einen Scroller.
quelle