Windows Phone の Silverlight の WriteableBitmap には、本当に厄介なバグがあるようです。次のコードと xaml があります。
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 とは大きく異なります。何が起こっているのか誰にも分かりませんか?