如何在Windows手机芒果中的图像上渲染字符串?

时间:2011-10-11 18:24:52

标签: windows-phone-7.1 windows-phone-7

我正在尝试在用户通过Photochooser任务选择的图像上渲染一个字符串。我已经看到了对类似问题的各种回复,但没有一个回复指出它。

这就是我想出的 -

void photochoosertask_Completed(object sender, PhotoResult e)
        {
            if (e.TaskResult == TaskResult.OK)
            {
System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();
                bmp.SetSource(e.ChosenPhoto);
                image1.Source = bmp;



                string steamer = "SO!";
                System.Windows.Media.Imaging.WriteableBitmap bmps = new System.Windows.Media.Imaging.WriteableBitmap(bmp);
                RenderString(bmps, steamer);




            }



        }
        private void RenderString(System.Windows.Media.Imaging.WriteableBitmap bitmap, string steamer)
        {


            textBlock1.Text = steamer;



            bitmap.Render(textBlock1 , null);

            bitmap.Invalidate();

        }
    }

但是代码不起作用。我很可能犯了一个重大错误。感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

根据documentation

  

如果提供空转换[即你传递的null作为第二个参数],表示元素的位显示在相同的偏移处,就好像它们放在它们的父级中一样。

因此,如果我理解正确发生的事情(我可能没有),那么您的textBlock1元素将使用与父窗体上相同的偏移量进行渲染。因此,textBlock1可能是从顶部和左侧向下,因此它不会显示在您的可写位图中。

BTW,我不熟悉WriteableBitmap,但你正在做什么(将文本放入UI元素然后将该元素渲染到位图上)似乎是一种向位图添加文本的奇怪方式

答案 1 :(得分:0)

我只是想通了。以为我应该在这里发布解决方案代码,可能会帮助某人 - 有一天:)

//setup a writeable bitmap with required dimensions
System.Windows.Media.Imaging.WriteableBitmap wbmps = new System.Windows.Media.Imaging.WriteableBitmap(x,y);
//set up a transform, we'll use ScaleTransform and we'll keep things simple here, 1x on both the axis 
 ScaleTransform transform = new System.Windows.Media.ScaleTransform();
 transform.ScaleX=1;
 transform.ScaleY=1; 
//now we need to render the image on the writeablebitmap and follow it up by rendering a //string
wbmps.Render(imageelement,transform);
//Now render the string which is equivalent to TextBlock.Text
wbmps.Render(texblock,transform);
//Finally - redraw the writeablebitmap to complete the rendering
wbmps.Invalidate();