WPF, Silverlight, Windows Phone 8 und Windows Store Apps

Windows Phone 8: Screenshot erstellen
Kommentare

In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger Top-How-tos zum Thema XAML. Einsteiger und Fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: „Windows Phone 8: Screenshot erstellen“. Viel Spaß mit XAML Expertise.

Unter Windows Phone 8 gibt es unterschiedliche Möglichkeiten, einen Screenshot zu erstellen. Die erste wäre die klassische Tastenkombination aus „Windows-Start-Button“ + „On/Off-Button“. Ein Bild des aktuellen Bildschirms wird dann im neuerstellten Ordner Screenshots abgespeichert. Die nächste Variante wäre über den Emulator und das „Additional Tools“-Fenster. Doch all das sind keine Lösungen zur Entwicklung von Screenshots, die der Benutzer mithilfe eines einzigen Buttons anfertigen kann. Diese Anforderung kann gerade bei solchen Apps eine wichtige Rolle spielen, die ihren Fokus auf visuellen Funktionen haben. Ein mögliches Beispiel wäre eine Brainstorming-App, die den erzeugten Inhalt als Bild abspeichern soll.

Die WriteableBitmap-Klasse ermöglicht es, den gerenderten Inhalt von UI-Elementen zu einer Bitmap-Instanz zu rendern. Die komplette Oberfläche inklusive ApplicationBar kann damit aber leider nicht eingefangen werden.

Um die Bitmap-Instanz abzuspeichern, wird ein MemoryStream benötigt. Die SaveImage-Methode ermöglicht das Referenzieren des erzeugten MemoryStreams, was wiederum einen JPEG-Stream erzeugt. Die MediaLibrary-Klasse dient dem Abspeichern im Bilderverzeichnis. Durch die SavePicture-Methode werden ein Bildname und der JPEG-Stream durchgereicht (Listing 1). Wichtig ist, dass beim Zugriff auf das Bilderverzeichnis eine Berechtigung innerhalb der WMAppManifest.XML-Datei gesetzt sein muss. Diese befindet sich im Projektverzeichnis im Properties-Ordner. Mit einem Doppelklick auf die Datei öffnet sich innerhalb von Visual Studio eine Konfigurationsoberfläche. Unter „Capabilities“ muss ein Haken für ID_CAP_MEDIALIB_PHOTO gesetzt sein, ansonsten erhält man zur Laufzeit eine Exception.

public partial class MainPage : PhoneApplicationPage
{
  public MainPage()
  {
    InitializeComponent();
  }

  private void ApplicationBarIconButton_Click(object sender, EventArgs e)
  {
    var bitmap = new WriteableBitmap(this, new TranslateTransform());
    var width = bitmap.PixelWidth;
    var height = bitmap.PixelHeight;
    bitmap.Render(this, new TranslateTransform());

    using (var memoryStream = new MemoryStream())
    {
      bitmap.SaveJpeg(memoryStream, width, height, 0, 100);
      memoryStream.Seek(0, SeekOrigin.Begin);

      var mediaLibrary = new MediaLibrary();
      var dateTimeTicks = DateTime.Now.Ticks;
      mediaLibrary.SavePicture(string.Format("screenshot" + dateTimeTicks + ".jpg"), memoryStream);

      MessageBox.Show("Bild gespeichert!");
    }
  }
}
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -