【问题标题】:Programmatically render an image of a silverlight control and save it to disk以编程方式渲染 silverlight 控件的图像并将其保存到磁盘
【发布时间】:2011-12-10 15:40:13
【问题描述】:

我的 asp.net 网站有一个 silverlight 应用程序。

对于没有 Silverlight 的客户,我想提供替代内容。

替代内容应包括 Silverlight 控件的静态图像。

服务器端,我想以编程方式渲染 silverlight 控件的图像并将其保存到磁盘。如何才能做到这一点?

这是可能进入 Page_Load 方法的示例代码:

if (!clientHasSilverlight()) {
    hideSilverLightObject();
    CustomSilverLightControl customSilverLightControl = new CustomSilverLightControl();
    customSilverLightControl.setProperties(properties);
    string fileName = renderControlAndSaveToTempFile(customSilverLightControl);
    Literal l = new Literal();
    l.Text = @"<img src=""" + fileName + @""" />";
    Page.Controls.Add(l);
}

如果做不到这一点,我如何创建一个控件(在单独的程序集中),它可以由 silverlight 应用程序使用,但也可以由服务器端代码用于此目的?

【问题讨论】:

    标签: silverlight image render


    【解决方案1】:

    无法运行嵌入在 ASP.NET 应用程序中的 Silverlight,因此您在上面的代码草图中不会出现 CustomSilverLightControl。您可以期望的最好结果是在子进程中运行 Silverlight,但这很可能会很慢并且会大量消耗资源。

    Silverlight 应用程序可以为自己截取屏幕截图,这并不难。但是,由于 Silverlight 在浏览器插件中运行,因此从 Silverlight 中获取屏幕截图更加困难。您还必须修改您的 Silverlight 应用程序以支持此截屏功能并能够对普通用户隐藏它。

    我担心修改您的 Silverlight 应用程序以支持这种截屏行为,并设置启动 Silverlight 应用程序所需的 palaver,让它自己截屏,然后将屏幕截图发送回您的 Web 应用程序。鉴于这种方法会导致不可避免的性能问题,老实说,我不认为这种努力是值得的。

    【讨论】:

    • 谢谢卢克。作为回应,我在上面的原始问题中添加了一些内容。
    • @bboyle1234:对您的附加问题的快速回答是“您不能”。 Silverlight 使用与 ASP.NET 完全不同的 .NET Framework 版本,因此您不能在两者中使用相同的控件。
    【解决方案2】:

    您无需在Page_Load 上执行此操作。

    在您的 HTML/ASPX 中,您将拥有如下内容:

    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="source" value="ClientBin/SilverlightApplication1.xap"/>
        <param name="onerror" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="4.0.50826.0" />
        <param name="autoUpgrade" value="true" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration: none;">
            <img src="http://go.microsoft.com/fwlink/?LinkID=161376" alt="Get Microsoft Silverlight" style="border-style: none"/>
        </a>
    </object>
    

    相关位是&lt;a href...,当 Silverlight 不存在时,它允许用户去安装插件。

    默认情况下,这会在http://go.microsoft.com/fwlink/?LinkID=161376显示图像:

    将其替换为您在运行应用程序的机器上设计或捕获的图像。这应该让用户知道他们没有安装 Silverlight,需要安装它,因此必须以某种方式修改屏幕截图。

    对于您在 iPhone 上查看网站的用户的情况,屏幕截图必须包含 iPhone 用户无法安装 Silverlight 的事实。

    【讨论】:

    • 嗨,克里斯,感谢您抽出宝贵时间来回答这个问题。我绝对希望不要让另一台机器或进程运行 Silverlight 应用程序来生成这些静态图像。将图像放在该链接中很方便。感谢您的提示,我一定会使用它。
    • 我正在为无法安装 Silverlight 的 iPhone 用户等用户寻找解决方案。
    • @bboyle1234 - 你错过了我的意思。您不会即时制作图像。这是一个静态图像,您只需创建一次。您不能在服务器上运行 Silverlight 应用程序并让它向客户端提供图像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2011-10-19
    相关资源
    最近更新 更多