2012-11-09 5 views
0

간단한 이미지를 생성하고 WinRT/XAML로 표시하려고합니다. SharpDX로 그려진 이미지의 바이트 []를 원합니다. 내 접근법 지금까지 괜찮아 보이지만 결과 버퍼가 비어 있습니다.SharpDX를 사용하여 WinRT에서 이미지를 바이트로 생성

CopyPixels도 시도했지만 0도 생성했습니다.

누군가 올바른 방향으로 나를 가리킬 수 있습니까? 저도 같은 문제로 실행


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

아 물론 맞습니다. –

답변