• 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("生成成功!");
                    }
                } 
            }
    View Code

    这样居然有异常了

    原来 获得的 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));
    View Code

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

  • 相关阅读:
    关于DataTables一些小结
    Oracle导入(imp )与导出(exp )
    HTTPS访问:weblogic下配置SSL
    highcharts 多数据+切换
    maven新建Spring MVC + MyBatis + Oracle的Web项目中pom.xml文件
    全选与反选(dom与jquery比较)
    Java中的try、catch、finally块简单的解析
    jquery中事件重复绑定以及解绑问题
    使用JS创建表格以及隔行换色(包括隔N行换色)
    wpf DataGrid加载行号
  • 原文地址:https://www.cnblogs.com/LeeYZ/p/3691874.html
Copyright © 2020-2023  润新知