2017-03-24 5 views
1

렌더링하지 않는 것 나는 다음과 같은 코드를 가지고 : 나는 그라데이션 창에 잘 그려지는 그런 RenderTargetBitmap 내 사각형

myGrid.Children.Add(rect); 

을 할 경우

 LinearGradientBrush linGrBrush = new LinearGradientBrush(); 
     linGrBrush.StartPoint = new Point(0,0); 
     linGrBrush.EndPoint = new Point(1, 0); 
     linGrBrush.GradientStops.Add(new GradientStop(Colors.Red, 0.0)); 
     linGrBrush.GradientStops.Add(new GradientStop(Colors.Yellow, 0.5)); 
     linGrBrush.GradientStops.Add(new GradientStop(Colors.White, 1.0)); 

     Rectangle rect = new Rectangle(); 
     rect.Width = 1000; 
     rect.Height = 1; 
     rect.Fill = linGrBrush; 
     rect.Arrange(new Rect(0, 0, 1, 1000)); 
     rect.Measure(new Size(1000, 1)); 

합니다.

어둠의 강도 맵에이 그래디언트를 사용하고 싶습니다. 따라서 그 픽셀을 꺼내야합니다. 이렇게하려면 RenderTargetBitmap을 사용하여 비트 맵으로 변환 할 수 있다는 것을 이해합니다. 여기에 코드의 다음 부분입니다 :

myGrid.Children.Add(myImage); 

을하지만 아무것도 창에 나타납니다 :

 RenderTargetBitmap bmp = new RenderTargetBitmap(
      1000,1,72,72, 
      PixelFormats.Pbgra32); 
     bmp.Render(rect); 

     Image myImage = new Image(); 
     myImage.Source = bmp; 

이를 테스트하려면, 내가 할. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

은 [이]를 수행 (http://stackoverflow.com/questions/11237524/is-it-possible-to-brush-a -drawingvisual) 및 [msdn] (https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap (v = vs.110) .aspx) 도움말 –

답변

2

ArrangeMeasure 다음에 호출해야하고 Rect 값은 올바르게 전달되어야합니다.

대신

rect.Arrange(new Rect(0, 0, 1, 1000)); // wrong width and height 
rect.Measure(new Size(1000, 1)); 

당신은 무엇을해야

var rect = new Rectangle { Fill = linGrBrush }; 
var size = new Size(1000, 1); 
rect.Measure(size); 
rect.Arrange(new Rect(size)); 

var bmp = new RenderTargetBitmap(1000, 1, 96, 96, PixelFormats.Pbgra32); 
bmp.Render(rect);