Desidero disegnare linee il più velocemente possibile. Per questo motivo ho implementato un metodo utilizzando InteropBitmap. Funziona abbastanza bene. Il passo successivo è stato il confronto con ShardDX. Fondamentalmente quello che voglio fare è: Eseguendo il seguente codice in un BackgroundWorker. Questo informa il WPF su un aggiornamento del WIC. Ho scoperto che questo codice (che crea tutto il necessario per ShapeDX e tracciare linee) impiega circa 10ms in più rispetto a fare lo stesso usando InteropBitmap.SharpDX render in WPF
La mia domanda ora è semplicemente, come accelerare questo? Posso cambiare il codice in qualche modo che devo solo chiamare BeginDraw, creare linee e EndDraw, non sempre facendo tutto questo materiale di codifica/decodifica delle immagini? O c'è un approccio migliore?
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();
Con:
System.Windows.Media.Imaging.BitmapFrame _WIC;
public System.Windows.Media.Imaging.BitmapSource WIC
{
get
{
return (System.Windows.Media.Imaging.BitmapSource)_WIC.GetAsFrozen();
}
}
E:
<StackPanel>
<Image Name="huhu1" Source="{Binding WIC}" />
</StackPanel>
Il collegamento a SharpDXElement è rotto. Si prega di aggiornarlo. – BrainSlugs83
@ BrainSlugs83 - i collegamenti sono stati aggiornati. –
A partire dal 2017, dicono: 'Il codice corrente del Toolkit in questo repository non funziona più con l'ultimo ramo di SharpDX.» – vines