Das von der Leinwand gespeicherte Bild wird nicht richtig gerendert

blagnom650

Ich versuche, den folgenden Code zu verwenden, um den Inhalt von myCanvas als Bilddatei in der Galerie zu speichern (für Windows Phone 8.1, nicht für Silverlight). Wenn ich die App starte, wird das Bild gespeichert, aber es ist verzerrt. Was mache ich falsch? Ich habe das resultierende Bild und das erwartete Ergebnis hochgeladen.

Geben Sie hier die Bildbeschreibung ein

public async void SaveFileToPhone()
  {
      var file = await KnownFolders.PicturesLibrary.CreateFileAsync("bug.png", CreationCollisionOption.GenerateUniqueName);

     await SaveVisualElementToFile(myCanvas, file);          
  }

async Task SaveVisualElementToFile(FrameworkElement element, StorageFile file)
{
    var renderTargetBitmap = new RenderTargetBitmap();
    await renderTargetBitmap.RenderAsync(element, (int)element.Width, (int)element.Height);
    var pixels = await renderTargetBitmap.GetPixelsAsync();
    txt_bug.Text = "Width: " + (int)element.Width + " Height:" + (int)element.Height;

    using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
    {
        var encoder = await
            BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
        byte[] bytes = pixels.ToArray();

        encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                             BitmapAlphaMode.Ignore,
                             (uint)element.Width, (uint)element.Height,
                             96, 96, bytes);

        await encoder.FlushAsync();
    }
}

Der XAML-Code für Canvas lautet wie folgt:

<Canvas x:Name="myCanvas" Background="#FF33FFE3" Margin="25,75,26,10" 
ManipulationStarted="myCanvas_ManipulationStarted" 
ManipulationCompleted="myCanvas_ManipulationCompleted" 
ManipulationDelta="myCanvas_ManipulationDelta" ManipulationMode="All" 
Tapped="myCanvas_Tapped" MinHeight="555" MinWidth="350" Width="350" Height="555">
    <Canvas.Clip>
        <RectangleGeometry Rect="0 0 350 555"/>
    </Canvas.Clip>
</Canvas>
kennyzx

Die Parameter der SetPixelDataMethode sind falsch.

encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                         BitmapAlphaMode.Ignore,
                         (uint)element.Width, (uint)element.Height,
                         96, 96, bytes);

Ändern Sie sie wie folgt, damit es funktioniert.

encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                BitmapAlphaMode.Ignore,
                (uint)renderTargetBitmap.PixelWidth,
                (uint)renderTargetBitmap.PixelHeight,
                DisplayInformation.GetForCurrentView().LogicalDpi,
                DisplayInformation.GetForCurrentView().LogicalDpi,
                bytes);

Sie können das XAML-Render-to-Bitmap-Beispiel von MSDN als Referenz herunterladen .

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Das Bild wird in der Ansicht für das Bild im Flattern nicht richtig gerendert

Bild in der Flexbox-Spalte wird in Chrome nicht richtig gerendert

Auf der Leinwand von Tkinter wird nicht das gesamte Bild angezeigt, ein kleiner Teil wird abgeschnitten

Der in der Variable gespeicherte Bildpfad wird in der Vorlage nicht richtig gerendert

Das erste von der Leinwand erfasste Bild wird nach der Ausgabe in das Bild vollständig schwarz

IE 11: Das Bild wird in der Flexbox nicht richtig verkleinert

Das Bild in NavigationLink wird nicht gerendert

Native reagieren: Das Bild wird nicht gerendert

Django-Vorlagen - Bild von media_root, das auf der Startseite gerendert wird, aber nicht auf anderen Seiten

Antwortobjekt wird in der Antwortfunktion nicht richtig gerendert

Bild wird in der Druckvorschau nicht gerendert

Wie wird das im Verzeichnis storage / app / public von Laravel 7.14 gespeicherte Bild gerendert, um es zu klingen?

Bild wird mit Sprite Sheet nicht richtig gerendert

Das Bild wird nicht gerendert, wenn der Dateiname ohne die Erweiterung in src = "" verwendet wird.

Warum wird dieser dritte Pfad nicht auf der Leinwand gerendert?

Warum wird hinzugefügter Bezier nicht auf der Leinwand gerendert?

Das Bild wird in der Bildansicht nicht mit der Server-URL auf dem Fragmentlistenansichtsadapter gerendert

Das erste Bild des Javascript-Arrays wird nicht auf der Leinwand angezeigt

Warum wird das Bild nicht auf der Leinwand angezeigt? [Python3 + tkinter]

Durch das native Ziehen und Ablegen des relativen Containers in Chrome wird der Geist nicht richtig gerendert

Tkinter ttk.Scrollbar auf der Leinwand scrollt richtig, aber das Scrollbar-Widget wird nicht richtig angezeigt?

Das Bild von Holder.js wird im Symfony-Projekt nicht gerendert

Das Bild wird auf der Seite nicht so gerendert, wie ich es mit Vue . möchte

Warum erscheint das von mir angegebene Bild nicht auf der Leinwand?

Der Feedback-Text von Bootstrap 4 wird nicht richtig gerendert

Leinwand wird nicht richtig ausgerichtet

Das Bild von der API wird nicht angezeigt

Das als Blob gespeicherte Bild wird nicht angezeigt

Warum wird das Angular2-Funkmodul nicht richtig gerendert?