2012-11-09 32 views
0

我試圖生成一個簡單的圖像並將其顯示在WinRT/XAML中。 爲此我想要用SharpDX繪製的圖像的字節[]。 我的方法到目前爲止似乎很好,但生成的緩衝區是空的。使用SharpDX在WinRT中以byte []生成圖像

我試過CopyPixels,但它也只產生零。

有人可以指出我正確的方向嗎?


private static byte[] Draw(TexRenderer trnder, int width, int height) 
    { 
     var wicFactory = new ImagingFactory(); 
     var dddFactory = new SharpDX.Direct2D1.Factory(); 
     var dwFactory = new SharpDX.DirectWrite.Factory(); 

     var wicBitmap = new Bitmap(
      wicFactory, 
      width, 
      height, 
      SharpDX.WIC.PixelFormat.Format32bppBGR, 
      BitmapCreateCacheOption.CacheOnLoad); 


     var renderTargetProperties = new RenderTargetProperties(
      RenderTargetType.Default, 
      new SharpDX.Direct2D1.PixelFormat(Format.Unknown, AlphaMode.Unknown), 
      dddFactory.DesktopDpi.Width, 
      dddFactory.DesktopDpi.Height, 
      RenderTargetUsage.None, 
      FeatureLevel.Level_DEFAULT); 
     var renderTarget = new WicRenderTarget(
      dddFactory, 
      wicBitmap, 
      renderTargetProperties) 
      { 
       TextAntialiasMode = TextAntialiasMode.Cleartype 
      }; 

     renderTarget.BeginDraw(); 

     var textFormat = new TextFormat(dwFactory, "Consolas", 48) 
      { 
       TextAlignment = TextAlignment.Center, 
       ParagraphAlignment = ParagraphAlignment.Center 
      }; 
     var textBrush = new SolidColorBrush(
      renderTarget, 
      Color.Blue); 

     renderTarget.Clear(Color.White); 
     renderTarget.DrawText(
      "Hi, mom!", 
      textFormat, 
      new RectangleF(0, 0, width, height), 
      textBrush); 
     var bitmapRenderTarget = new BitmapRenderTarget(renderTarget, CompatibleRenderTargetOptions.None); 
     trnder.Render(bitmapRenderTarget, 0, 0); 

     renderTarget.EndDraw(); 

     var bitmaplock = wicBitmap.Lock(null, BitmapLockFlags.Read); 
     var dStream = new DataStream(bitmaplock.Data.DataPointer, bitmaplock.Stride * bitmaplock.Size.Height, true, true); 
     var buffer = new byte[bitmaplock.Stride * bitmaplock.Size.Height]; 
     dStream.Write(buffer, 0, buffer.Length); 

     return buffer; 
    } 
+0

WPF是不是WinRT的

DataStream dataStream = new DataStream(source.Size.Height * source.Size.Width, true, true); bitmapSource.CopyPixels(source.Size.Width * sizeof(uint), dataStream); var data = dataStream.ReadRange<uint>(source.Size.Width * source.Size.Height); 

。 WPF是.Net。 WINRT不是.Net。 –

+0

我想他的意思是WinRT/XAML - 木星 –

+0

啊,當然是糾正它。 –

回答

相關問題