Ich möchte Linien so schnell wie möglich zu zeichnen. Aus diesem Grund habe ich eine Methode mit InteropBitmap implementiert. Das funktioniert ganz gut. Der nächste Schritt war der Vergleich mit ShardDX. Grundsätzlich möchte ich folgendes tun: Ausführen des folgenden Codes in einem BackgroundWorker. Dies informiert das WPF über eine Aktualisierung von WIC. Ich fand heraus, dass dieser Code (alles, was für ShapeDX benötigt wird und die Linie zeichnet) etwa 10ms länger dauert als das Gleiche mit InteropBitmap.SharpDX Render in WPF
Meine Frage ist jetzt einfach, wie man das beschleunigt? Kann ich den Code irgendwie ändern, dass ich nur BeginDraw aufrufen muss, um Zeilen und EndDraw zu erstellen, nicht immer all diese Bildkodierungs-/Dekodierungs-Sachen? Oder gibt es einen besseren Ansatz?
var wicFactory = new ImagingFactory();
var d2dFactory = new SharpDX.Direct2D1.Factory();
const int width = 800;
const int height = 200;
var wicBitmap = new Bitmap(wicFactory, width, height, SharpDX.WIC.PixelFormat.Format32bppBGR, BitmapCreateCacheOption.CacheOnLoad);
var renderTargetProperties = new RenderTargetProperties(RenderTargetType.Default, new PixelFormat(Format.Unknown, AlphaMode.Unknown), 0, 0, RenderTargetUsage.None, FeatureLevel.Level_DEFAULT);
var d2dRenderTarget = new WicRenderTarget(d2dFactory, wicBitmap, renderTargetProperties);
var solidColorBrush = new SharpDX.Direct2D1.SolidColorBrush(d2dRenderTarget, SharpDX.Color.White);
d2dRenderTarget.BeginDraw();
//draw whatever you want
d2dRenderTarget.EndDraw();
// Memorystream.
MemoryStream ms = new MemoryStream();
var stream = new WICStream(wicFactory, ms);
// JPEG encoder
var encoder = new SharpDX.WIC.JpegBitmapEncoder(wicFactory);
encoder.Initialize(stream);
// Frame encoder
var bitmapFrameEncode = new BitmapFrameEncode(encoder);
bitmapFrameEncode.Initialize();
bitmapFrameEncode.SetSize(width, height);
var pixelFormatGuid = SharpDX.WIC.PixelFormat.FormatDontCare;
bitmapFrameEncode.SetPixelFormat(ref pixelFormatGuid);
bitmapFrameEncode.WriteSource(wicBitmap);
bitmapFrameEncode.Commit();
encoder.Commit();
ms.Seek(0, SeekOrigin.Begin);
// JPEG decoder
var decoder = new System.Windows.Media.Imaging.JpegBitmapDecoder(ms, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
// Write to wpf image
_WIC = decoder.Frames[0];
// Tell WPF to update
RaisePropertyChanged("WIC");
bitmapFrameEncode.Dispose();
encoder.Dispose();
stream.Dispose();
mit:
System.Windows.Media.Imaging.BitmapFrame _WIC;
public System.Windows.Media.Imaging.BitmapSource WIC
{
get
{
return (System.Windows.Media.Imaging.BitmapSource)_WIC.GetAsFrozen();
}
}
Und:
<StackPanel>
<Image Name="huhu1" Source="{Binding WIC}" />
</StackPanel>
Die Verbindung zu SharpDXElement ist unterbrochen. Bitte aktualisiere es. – BrainSlugs83
@ BrainSlugs83 - Links wurden aktualisiert. –
Ab 2017 sagen sie: 'Der aktuelle Code des Toolkits in diesem Repository funktioniert nicht mehr mit dem neuesten Zweig von SharpDX.' – vines