2012-08-24 43 views
4

似乎在用於Windows Phone的Silverlight的WriteableBitmap中存在一個非常惱人的bug。我有下面的代碼和XAML:在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> 

當您單擊底部的按鈕,頂部的按鈕是將複合變換渲染與可寫的位圖。每次渲染後,頂部按鈕的結果圖像比前一個更大。此外,可寫位圖的PixelWith和PixelHeight屬性值與Image對象的RenderSize大不相同。有誰知道發生了什麼事?

回答

1

我不完全理解發生了什麼,但我相信控件的大小會因水平和垂直對齊而進行調整,並且不知何故會導致您提到的問題。

您可以通過將Image控件的Stretch屬性設置爲None來繞過它。這樣,無論圖像控件的大小如何,顯示的圖片都將始終保持其原始大小。

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

我不認爲它是由對齊引起的。鑑於他們都是中心圖像應該給予其所需的大小,它應該像圖像源一樣大。但這是次要問題,我的主要問題是可寫位圖及其生成的PixelWidth和PixelHeight值,它們看起來不正確。我正在嘗試使用它們來查找已轉換元素的邊界框,但它似乎無法按預期工作。 – Viktor

相關問題