Windows Phone 使用 WriteableBitmap后台生成图片

时间:2023-03-08 19:30:26
Windows Phone 使用 WriteableBitmap后台生成图片

这几天项目是遇到一个需求,需要后台把几个元素生成到一张图片上,并保存到文件中

 private void cutscreen_Click(object sender, EventArgs e)
{
Grid contentGrid = new Grid()
{
Width = ,
Background = new SolidColorBrush(Colors.White)
};
RowDefinition row1 = new RowDefinition();
RowDefinition row2 = new RowDefinition(); contentGrid.RowDefinitions.Add(row1);
contentGrid.RowDefinitions.Add(row2); Image ShowImg = new Image()
{
Source = new BitmapImage(new Uri("/Assets/Kelly-Clarkson.jpg", UriKind.Relative))
}; Grid.SetRow(ShowImg, );
contentGrid.Children.Add(ShowImg); TextBlock ShowIntrotbk = new TextBlock()
{
Text = "我要把你和图片连接在一起",
FontSize = ,
TextWrapping = TextWrapping.Wrap
}; Grid.SetRow(ShowIntrotbk, );
contentGrid.Children.Add(ShowIntrotbk); SaveImage(contentGrid);
} private void SaveImage(UIElement _cutimgPanel)
{
WriteableBitmap wrbitmap = new WriteableBitmap(_cutimgPanel, null); using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream fileStream = storage.CreateFile("CutPanel.jpg"))
{
wrbitmap.SaveJpeg(fileStream, (int)_cutimgPanel.DesiredSize.Width, (int)_cutimgPanel.DesiredSize.Height, , );
MessageBox.Show("生成成功!");
}
}
}

这样居然有异常了

Windows Phone 使用 WriteableBitmap后台生成图片

Windows Phone 使用 WriteableBitmap后台生成图片

原来 获得的 Width和Height都是0,上面已经指定了宽度,但是依然没有获得

这时把生成的Grid添加的页面上,居然正常显示了(为了和下一张区分,我加了一个TextBox)

Windows Phone 使用 WriteableBitmap后台生成图片

这就说明生成成功能,可为什么会报错呢?

原来,windows phone如果控件不在界面上显示时,是不会计算其布局大小的,所以没有宽度和高度的,那我们就手动计算一下呗,在后面添加完以下代码

contentGrid.Measure(new Size(, ));//这时重新计算一下,这个高度是没有效果的最好超过你所有控件的加起来的高度
contentGrid.Arrange(new Rect(, , (int)contentGrid.DesiredSize.Width, (int)contentGrid.DesiredSize.Height));

Windows Phone 使用 WriteableBitmap后台生成图片

完工了,这样我们就可以在后台拼接任意图片了