如何禁用WriteableBitmap的silverlight跨域内容保护
我在Silverlight中有一张Esri地图,我正在尝试获取屏幕截图。 但是,我正面临着对writeablebitmap的跨域内容保护,称“像素无法访问”。
有没有办法可以禁用它? 还是银光3或4中的任何其他工作?
你可以通过重新托管图像来解决这个问题。 基本上你可以在你的服务器上设置一个wcf服务作为地图的代理,然后当silverlight对你的媒体源进行安全检查时,它会看到它被你的服务器“托管”,那么它应该让你渲染它是一个可写的位图。 虽然这显然会大大增加服务器的负载。
我有一个存储在亚马逊云端服务器上的video,其中包含有效的clientaccesspolicy.xml,允许对silverlight主机URL进行跨域访问,以下function不允许我拍摄video的屏幕截图并操纵像素,直到它被替换为而是WebClient下载(WebClient尊重跨域策略文件,您可以看到它在Fiddler中被请求,MediaElement.Source函数甚至没有尝试过)
老无工作跨域代码
public LoadVideoFromURL(string url) { var uri = new Uri(url); myMediaElement.Source(uri); }
新的跨域代码
public LoadVideoFromURL(string url) { var uri = new Uri(url); //Request the video var videoDownloader = new WebClient(); videoDownloader.OpenReadCompleted += new OpenReadCompletedEventHandler( (s, args) => myMediaElement.SetSource(args.Result)); videoDownloader.OpenReadAsync(uri); }
解决此问题的最简单方法是确保Silverlight应用程序和映像是从同一个域托管的。 既然你在问这个问题,我会认为这是不可能的。
您是否控制托管图像的服务器? 如果是这样,您可以添加客户端访问策略文件,以启用对Silverlight应用程序中的图像的跨域访问。 然后,您需要更改使用这些图像的方式。 不要将Image元素的Source设置为图像的URI,而是使用WebClient将图像作为Stream下载,并将Image元素的源直接设置为该Stream。 如果执行此操作,则在尝试访问WriteableBitmap像素时不会遇到跨域访问冲突。
如果位图的来源是另一个域,那么简单的答案就是否定。 我不确定你是如何尝试拍摄这个“屏幕截图”的,但听起来有很好的安全理由来阻止它…当然,完全(读/写)像素访问通常是可用的,当你的图像位于本地域中。
解决这个问题的正确方法,因为您似乎想要获取用户桌面的屏幕截图,这将使Silverlight应用程序需要完全信任,这可能是Silverlight 3(并在Silverlight 4中扩展)。 但是,我认为这需要它是一个OOB(浏览器应用程序之外)。
上述就是C#学习教程:如何禁用WriteableBitmap的silverlight跨域内容保护分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/960794.html