Windows Phone 使用 WriteableBitmap后台生成图片
这几天项目是遇到一个需求,需要后台把几个元素生成到一张图片上,并保存到文件中
private void cutscreen_Click(object sender, EventArgs e) { Grid contentGrid = new Grid() { Width = 400, 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, 0); contentGrid.Children.Add(ShowImg); TextBlock ShowIntrotbk = new TextBlock() { Text = "我要把你和图片连接在一起", FontSize = 22, TextWrapping = TextWrapping.Wrap }; Grid.SetRow(ShowIntrotbk, 1); 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, 0, 100); MessageBox.Show("生成成功!"); } } }
这样居然有异常了
原来 获得的 Width和Height都是0,上面已经指定了宽度,但是依然没有获得
这时把生成的Grid添加的页面上,居然正常显示了(为了和下一张区分,我加了一个TextBox)
这就说明生成成功能,可为什么会报错呢?
原来,windows phone如果控件不在界面上显示时,是不会计算其布局大小的,所以没有宽度和高度的,那我们就手动计算一下呗,在后面添加完以下代码
contentGrid.Measure(new Size(400, 7000));//这时重新计算一下,这个高度是没有效果的最好超过你所有控件的加起来的高度 contentGrid.Arrange(new Rect(0, 0, (int)contentGrid.DesiredSize.Width, (int)contentGrid.DesiredSize.Height));
完工了,这样我们就可以在后台拼接任意图片了