Feedback

C# - Apps: Bilder speichern

Veröffentlicht von am 06.02.2015
(0 Bewertungen)
Hin- und wieder muss man auch in Apps Bilder speichern. Dieses Snippet bietet 2 Erweiterungsmethoden für RenderTargetBitmap und WritableBitmap. Die Methode für weitere Typen zu implementieren bringt nicht viel, da man an so gut wie keine Bildinformationen heran kommt wenn man nur die Basisklassen betrachtet.
Getestet sind die Methoden unter Windows 8.1, unter WP 8.1 existieren aber auch alle benötigten Methoden.

Benötigte Namespaces
System
System.Threading.Tasks
Windows.Graphics.Display
Windows.Graphics.Imaging
Windows.Storage
Windows.UI.Xaml.Media.Imaging
System.Runtime.InteropServices.WindowsRuntime
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

/// <summary>
/// Speichert das angegebene <see cref="Windows.UI.Xaml.Media.Imaging.RenderTargetBitmap"/> als Datei ab.
/// </summary>
/// <param name="image">Das zu speichernde Bild-Objekt.</param>
/// <param name="file">Die <see cref="Windows.Storage.IStorageFile"/> in der das Bild gespeichert werden soll.</param>
/// <returns>Eine Aufgabe, die die Speicherung des Bildes übernimmt.</returns>
public static async Task Save(this RenderTargetBitmap image, IStorageFile file)
{
    var rtb = image as RenderTargetBitmap;
    await Save((await rtb.GetPixelsAsync()).ToArray(), (uint)rtb.PixelWidth, (uint)rtb.PixelHeight, file);
}
/// <summary>
/// Speichert das angegebene <see cref="Windows.UI.Xaml.Media.Imaging.WriteableBitmap"/> als Datei ab.
/// </summary>
/// <param name="image">Das zu speichernde Bild-Objekt.</param>
/// <param name="file">Die <see cref="Windows.Storage.IStorageFile"/> in der das Bild gespeichert werden soll.</param>
/// <returns>Eine Aufgabe, die die Speicherung des Bildes übernimmt.</returns>
public static async Task Save(this WriteableBitmap image, IStorageFile file)
{
    var wb = image as WriteableBitmap;
    await Save(wb.PixelBuffer.ToArray(), (uint)wb.PixelWidth, (uint)wb.PixelHeight, file);
}

private static async Task Save(byte[] bytes, uint width, uint height, IStorageFile file)
{
    using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
    {
        var logicalDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
        var encoder = await BitmapEncoder.CreateAsync(GetEncoderGuid(file), stream);
        encoder.SetPixelData(
            BitmapPixelFormat.Bgra8,
            BitmapAlphaMode.Ignore,
            width,
            height,
            logicalDpi,
            logicalDpi,
            bytes);
        await encoder.FlushAsync();
    }
}

private static Guid GetEncoderGuid(IStorageFile file)
{
    Guid fileType;
    switch (file.FileType.ToLower())
    {
        case ".dib":
        case ".bmp":
            fileType = BitmapEncoder.BmpEncoderId;
            break;
        case ".gif":
            fileType = BitmapEncoder.GifEncoderId;
            break;
        case ".jpg":
        case ".jpeg":
        case ".jif":
        case ".jfif":
        case ".jpe":
            fileType = BitmapEncoder.JpegEncoderId;
            break;
        case ".hdp":
        case ".jsr":
        case ".wdp":
            fileType = BitmapEncoder.JpegXREncoderId;
            break;
        case ".png":
            fileType = BitmapEncoder.PngEncoderId;
            break;
        case ".tif":
        case ".tiff":
            fileType = BitmapEncoder.TiffEncoderId;
            break;
        default:
            throw new ArgumentOutOfRangeException("Not supported file type.");
    }
    return fileType;
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!