#

Download:

Datei 1: 20150906_Direct2D_Canvas.zip
Mit dem Package Win2D wird die Funktionalität von Universal App Programmen schnell auf graphische Funktionen und Video-Funktionen erweitert.
Hier ein einfaches Beispiel wie man mit ein paar wenigen Zeilen einen Blur-Effekt (Verwischung, Unscharfe) auf ein Bild anwendet.
using (var ds = renderer.CreateDrawingSession())
{
var blur = new GaussianBlurEffect();
blur.BlurAmount = 8.0f;
blur.BorderMode = EffectBorderMode.Hard;
blur.Optimization = EffectOptimization.Quality;
blur.Source = bitmap;
ds.DrawImage(blur);
ds.DrawText(DateTime.Now.ToString(), 0, 0, Colors.Black );
}
//----</ Bild laden und aendern mit DirectX >---

Zusätzlich kann man Texte und Schriften einfach dem Bild Bitmap hinzufügen
ds.DrawText(DateTime.Now.ToString(), 0, 0, Colors.Black );



Hierzu muss man das Nuget-Package/Verweis Win2D hinzufügen






Hier der Code zum Beispiel.
Es wird in XAML ein win2D Canvas-Control verwendet. Man könnte auch zur Laufzeit ein virtuelles Canvas Control verwenden.
In dieses legt man ein Bild, verändert es und speichert es anschließend wieder ab.
Anschließend wird das veränderte Bild in einem Image-Control geladen und angezeigt

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Microsoft.Graphics.Canvas.UI.Xaml;
using Windows.UI;
using Microsoft.Graphics.Canvas;
using Microsoft.Graphics.Canvas.Effects;
using Windows.Storage;
using Windows.ApplicationModel;
using Windows.UI.Xaml.Media.Imaging;

// Die Vorlage "Leere Seite" ist unter http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 dokumentiert.

namespace _20150906_Direct2D_Canvas
{
/// <summary>
/// Eine leere Seite, die eigenständig verwendet werden kann oder auf die innerhalb eines Rahmens navigiert werden kann.
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}

private void button_Click(object sender, RoutedEventArgs e)
{
fl_Canvas();
}

private async void fl_Canvas()
{
//--< Laden >--
//*Laden mit definition des localfolder
//Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
//var file = await localFolder.GetFileAsync("Testbild.jpg");

//*gleichwertig: abfragen des localFolders mit current.InstalledLocation
//var file = await Package.Current.InstalledLocation.GetFileAsync("Testbild.jpg");

//*laden einer File,StoragFile aus dem Unterordner _images im Projektordner mittels uri
var uriInput_Image = new Uri ("ms-appx:///_images/Testbild.jpg");
var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uriInput_Image);
//--</ Laden >--

using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
//----< Bild laden und aendern mit DirectX >---
//var device = new CanvasDevice();
var bitmap = await CanvasBitmap.LoadAsync(ctlCanvas, stream);
//var renderer = new CanvasRenderTarget(device, bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height, bitmap.Dpi);
var renderer = new CanvasRenderTarget(ctlCanvas, (float)ctlCanvas.ActualWidth, (float)ctlCanvas.ActualHeight);
using (var ds = renderer.CreateDrawingSession())
{
var blur = new GaussianBlurEffect();
blur.BlurAmount = 8.0f;
blur.BorderMode = EffectBorderMode.Hard;
blur.Optimization = EffectOptimization.Quality;
blur.Source = bitmap;
ds.DrawImage(blur);
ds.DrawText(DateTime.Now.ToString(), 0, 0, Colors.Black );
}
//----</ Bild laden und aendern mit DirectX >---

//--< speichern >--
//*speichern der Datei in App-DatenOrdner
var saveFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("Save.jpg", CreationCollisionOption.ReplaceExisting);
using (var outStream = await saveFile.OpenAsync(FileAccessMode.ReadWrite))
{
await renderer.SaveAsync(outStream, CanvasBitmapFileFormat.Png);
}
//--</ speichern >--

//--< anzeigen >--
//*speichern der Datei in App-DatenOrdner
//ctlMediaElement.SetSource(await saveFile.OpenAsync(FileAccessMode.Read), saveFile.ContentType);
//ctlMediaElement.Source = uriInput_Image; //new Uri( saveFile.Path,UriKind.Absolute );
//ctlMediaElement.AutoPlay = true;
//ctlMediaElement.Play();


//< Image laden >
BitmapImage bmpLoad = new BitmapImage(new Uri(saveFile.Path, UriKind.Absolute));
ctlImage.Source = bmpLoad;
//</ Image laden >
//--</ anzeigen >--

}

}


void CanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
//args.DrawingSession.DrawEllipse(155, 115, 80, 30, Colors.Black, 3);
//args.DrawingSession.DrawText("Hello, world!", 100, 100, Colors.Yellow);
}
}
}


Und so sieht das Ganze in der Windows App aus


Ich habe den Code über einen Start-Button beginnen lassen
Mobile

.

123movies