zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    Qt音视频开发24-ffmpeg音视频同步
    Qt编写的项目作品34-雷达模拟仿真工具(雨田哥作品)
    Qt编写的项目作品33-斗图神器(雨田哥作品)
    Qt编写的项目作品32-定制化安装包工具(雨田哥作品)
    Qt编写的项目作品31-PDF阅读器(雨田哥作品)
    Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: ......
    com.alibaba.fastjson.JSONException: syntax error, pos 1
    chrome技巧
    pip强制重装
    javascript添加url querystring
  • 原文地址:https://www.cnblogs.com/LeeYZ/p/3691874.html
Copyright © 2011-2022 走看看