2012-08-24 1 views
4

Windows Phone 용 Silverlight 용 WriteableBitmap에는 정말 귀찮은 버그가있는 것으로 보입니다. 여기 WP7에서 WriteableBitmap 및 RotateTransform을 사용하여 텍스트 블록 렌더링하기

public partial class MainPage : PhoneApplicationPage 
{ 
    CompositeTransform rotate = new CompositeTransform(); 

    public MainPage() 
    { 
     InitializeComponent(); 
    } 

    private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
    { 
     this.rotate.Rotation += 15; 

     WriteableBitmap bmp = new WriteableBitmap(this.button, rotate); 
     this.image.Source = bmp; 

     Dispatcher.BeginInvoke(() => Debug.WriteLine("{0}, {1}", bmp.PixelWidth, bmp.PixelHeight)); 
    } 
} 

은 XAML입니다 : 당신은 하단의 버튼을 클릭하면

<Grid> 
    <Button VerticalAlignment="Top" 
      HorizontalAlignment="Center" 
      Content="This is a textblock inside a layout" 
      x:Name="button"/> 

    <Image VerticalAlignment="Center" 
      HorizontalAlignment="Center" 
      x:Name="image"/> 

    <Button VerticalAlignment="Bottom" 
      Content="Rotate" 
      Click="Button_Click"/> 
</Grid> 

, 상단 버튼을 복합 변환을 사용하여 쓰기 가능한 비트 맵 렌더링 다음 코드와 XAML 있습니다. 모든 렌더링 후에 상단 버튼의 결과 이미지가 이전 버튼보다 큽니다. 또한 쓰기 가능한 비트 맵의 ​​PixelWith 및 PixelHeight 속성 값은 Image 개체의 RenderSize와 크게 다릅니다. 아무도 무슨 일이 일어나고 있는지 전혀 모른다.

답변

1

나는 무엇이 일어나고 있는지 완전히 이해하지 못하고 있지만, 컨트롤의 크기가 수평 및 수직 정렬 때문에 조정되고 어떻게 든 그것이 당신이 언급 한 문제를 일으킨다 고 생각합니다.

Image 컨트롤의 Stretch 속성을 None으로 설정하여 무시할 수 있습니다. 이렇게하면 표시된 그림은 이미지 컨트롤의 크기와 상관없이 항상 원래 크기로 유지됩니다.

 <Image VerticalAlignment="Center" 
       HorizontalAlignment="Center" 
       Stretch="None" 
       x:Name="image"/> 
+0

나는 그것이 정렬에 의한 것이라고 생각하지 않습니다. 둘 다 중심 인 경우 이미지에 원하는 크기가 주어져야하며 이미지 소스와 마찬가지로 크기가 커야합니다. 하지만이 사소한 문제입니다, 내 주요 문제는 쓰기 가능한 비트 맵 및 결과 PixelWidth 및 PixelHeight 값, 그들은 틀린 것처럼 보입니다. 변환 된 요소의 바운딩 박스를 찾기 위해 그것들을 사용하려하지만, 예상했던대로 작동하지 않는 것 같습니다. – Viktor