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

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

  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/LeeYZ/p/3691874.html
Copyright © 2011-2022 走看看