技术开发 频道

快速浏览Silverlight3 beta:鸡肋一样的WritableBitmap

  【IT168 技术文档】之前在网上有讨论 使用Silverlight3 beta的WritableBitmap进行截图 的问题。但结果也是很不明确,起码就目前看来,使用WritableBitmap的Render方法对XAML文件中UI元素生成位图,但还不支持将获取出来的位图以文件流的文件保存到本地(因为我开始想用SaveFileDialog来做这事)。原因就是在调用Render方法之后,就不可以再访问WritableBitmap中的Pixel(数组类型)了,系统会报错,如下图:

  目前看来只能像那个老外所说的那样,把希望寄托在RTM版了。  

   I'm pretty sure this is _not_ possible in SL3 Beta. Because we do not have Pixel access after calling Render(). But maybe by final RTW (sorry I kept saying RTM, I should really be saying RTW!) 

  上面的问题还直接造成了无法把WritableBitmap中的数据发送到WEB-Serivce,这也就是说不支持服务器端的通信。
 
  当然我也尝试节使用LocalMessage,但目前它只能传递字符串对象,而无法传
递object对象,所以WritableBitmap就更谈不上了。

  另外还有一个问题就是如果使用下面代码:

WriteableBitmap_reflectedImage = new WriteableBitmap((int)scene.RenderSize.Width, (int)scene.RenderSize.Height, PixelFormats.Bgr32);
_reflectedImage.Render(scene,
new TranslateTransform());        
Image img
=  new Image() { Source = _reflectedImage };

  将BitMap实例化到一个Image对象中时,在运行完第三行代码后,我们会发现其img.Source的值依旧为空,如下图:

  从这一点来看,想把WriteableBitmap转成Image对象,然后再将Source转成 Byte这条路也走不通。

  本人之前想使用 WritableBitmap来做一个远程截图的DEMO,因为上述的原因而无法实现。不过就目前Silverlight3的发展而言,WritableBitmap还是有后续完善的可能性的。

0
相关文章