silverlight怎么实现截图功能

babycry627 2012-07-27 11:58:00
我要截图GOOGLE地图应用的图,不是截本地应用的图,用WriteableBitmap是不行的,不能跨域。
还有其他方法吗,例如,屏幕截图的方法或其他的方法。
...全文
747 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jv9 2013-01-23
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
给你源码。很简单的程序,随便写给自己用的,没有做任何重构和优化: http://www.fqs1234.org:60080/download/software/w2gbuddy_source.zip
感谢分享开源资源。
uuexxe 2013-01-09
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
给你源码。很简单的程序,随便写给自己用的,没有做任何重构和优化: http://www.fqs1234.org:60080/download/software/w2gbuddy_source.zip
无法下载了,能否再提供新链接
pengbo_zero 2012-08-02
  • 打赏
  • 举报
回复
能不能来个silverlight 截屏的源码,注意了是截屏不是截图
  • 打赏
  • 举报
回复
给你源码。很简单的程序,随便写给自己用的,没有做任何重构和优化:

http://www.fqs1234.org:60080/download/software/w2gbuddy_source.zip
babycry627 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用楼主 的回复:
我要截图GOOGLE地图应用的图,不是截本地应用的图


参考 http://www.fqs1234.org:60080/download/software/w2gbuddy.exe
[/Quote]
差不多是这样子的,看不到源码,也没这么的复杂,这个是怎么实现的
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我要截图GOOGLE地图应用的图,不是截本地应用的图
[/Quote]

参考 http://www.fqs1234.org:60080/download/software/w2gbuddy.exe
白鸽 2012-07-27
  • 打赏
  • 举报
回复
FJ.Core这个dll找一下,网上有,通过这个可以实现Silverlight页面的导出。

但是注意一点,第三方控件汇报跨域访问的错误,例如当时我在做导出时候,我的项目中有Google地图,然后在进行此操作的时候就会报跨域错误,

碰见这种你也就别想着怎么能够实现了,silverlight为了安全起见就是故意把这个屏蔽了。就是不允许,非要这么做那就得跟微软的人商量一下了


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;
using System.IO;
using System.Text;
using FluxJpeg.Core;
using FluxJpeg.Core.Encoder;

namespace SilverlightApplication2
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
/// <summary>
/// 图层导出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
Transform form = this.RenderTransform;
WriteableBitmap wb = new WriteableBitmap(this, form);

Stream writeStream; // 写入流
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "jpg | *.jpg";
saveFileDialog.DefaultExt = "jpg";
if (saveFileDialog.ShowDialog().Value == true)
{
writeStream = saveFileDialog.OpenFile();

byte[] byteArray = Convert.FromBase64String(GetBase64Image(wb));

writeStream.Write(byteArray, 0, (int)byteArray.Length);
writeStream.Close();

MessageBox.Show("保存成功");
}


}
// 将WriteableBitmap转化为base64位字符串
private string GetBase64Image(WriteableBitmap bitmap)
{
int width = bitmap.PixelWidth;
int height = bitmap.PixelHeight;
int bands = 3;
byte[][,] raster = new byte[bands][,];

for (int i = 0; i < bands; i++)
{
raster[i] = new byte[width, height];
}

for (int row = 0; row < height; row++)
{
for (int column = 0; column < width; column++)
{
int pixel = bitmap.Pixels[width * row + column];

// 透明色会成为黑色,把像素为0的改为白色
if (pixel != 0)
{
raster[0][column, row] = (byte)(pixel >> 16);
raster[1][column, row] = (byte)(pixel >> 8);
raster[2][column, row] = (byte)pixel;
}
else
{
raster[0][column, row] = 0xff;
raster[1][column, row] = 0xff;
raster[2][column, row] = 0xff;
}
}
}

ColorModel model = new ColorModel { colorspace = ColorSpace.RGB };
FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster);
MemoryStream stream = new MemoryStream();

// quality与清晰度有关,与透明色无关
JpegEncoder encoder = new JpegEncoder(img, 100, stream);
encoder.Encode();

stream.Seek(0, SeekOrigin.Begin);
byte[] binaryData = new Byte[stream.Length];
long bytesRead = stream.Read(binaryData, 0, (int)stream.Length);

string base64String = System.Convert.ToBase64String(binaryData,
0,
binaryData.Length);

return base64String;
}


}
}

babycry627 2012-07-27
  • 打赏
  • 举报
回复
顶一下,有没有人指教一下啊

8,734

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧