가능한 한 빨리 선을 그립니다. 이러한 이유로 InteropBitmap을 사용하는 메소드를 구현했습니다. 이것은 꽤 잘 작동합니다. 다음 단계는 ShardDX와 비교하는 것이 었습니다. 기본적으로 내가하고 싶은 일은 다음과 같습니다. BackgroundWorker에서 다음 코드를 실행합니다. WPF에 WIC 업데이트에 대한 정보를 제공합니다. 이 코드 (ShapeDX에 필요한 모든 것을 작성하고 선을 그리는 코드)는 InteropBitmap을 사용하여 동일한 작업을 수행하는 것보다 약 10ms 더 오래 걸립니다.WPF에서 SharpDX 렌더링
내 질문은 이제 간단합니다. 어떻게 속도를 향상시킬 수 있습니까? 어떻게 든 BeginDraw를 호출하고, 라인과 EndDraw를 생성하며, 항상이 이미지 인코딩/디코딩 작업을 수행하지 않고 코드를 변경할 수 있습니까? 아니면 더 나은 방법이 있습니까?
System.Windows.Media.Imaging.BitmapFrame _WIC;
public System.Windows.Media.Imaging.BitmapSource WIC
{
get
{
return (System.Windows.Media.Imaging.BitmapSource)_WIC.GetAsFrozen();
}
}
와 :와
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();
당신이 WPF와 다이렉트 표면을 공유하려는 경우
<StackPanel>
<Image Name="huhu1" Source="{Binding WIC}" />
</StackPanel>
SharpDXElement에 대한 링크가 끊어졌습니다. 업데이트하십시오. – BrainSlugs83
@ BrainSlugs83 - 링크가 업데이트되었습니다. –
2017 년 현재 그들은 다음과 같이 말하고 있습니다. "이 저장소에있는 툴킷의 현재 코드는 더 이상 최신 SharpDX 브랜치에서 작동하지 않습니다." – vines