IronSoft的FlashCapture可以说是当前已知的一个唯一的可以实现flash抓图的组件,可惜它是在asp才能使用。现在跟着我来看看,如何在asp.net下面去调用它。
首先,在asp.net下添加FlashCapture的引用:
选中网站的项目,然后右键,选择“添加引用”,在弹出来的框里面选择”COM”这个选项卡,往下拉,找到”Ironsoft Library”,然后点击确定,这时候可以看到在bin目录下面添加了:Interop.IronSoft.dll.
其实就是添加代码:
FlashCaptureClass fc = new FlashCaptureClass();
fc.FileName = Server.MapPath("test.swf");
fc.CaptureFrame = 1;
fc.Save(Server.MapPath("test.jpg"));
这时候你会发现图片是抓出来了,可是是一片白的。这是因为asp和asp.net的线程模型不一样了,所以出现了这样的问题,这时候我们要设置asp.net的这个页面的Asp兼容模式:AspCompat 为"true"。也就是写在asp页面的顶上,如:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FlashCapture.aspx.cs" Inherits="FlashCapture" AspCompat="true" %>
这下子抓出来的图片里面就有内容了(IronSoft的其它组件调用如果有类似的问题,也都可以这样处理)。
最后,如果你用VS自带的服务器功能来调试的时候,会发现系统的状态栏上多了一个图标。这说明这时候FlashCapture组件并没有被释放掉。可以用以下代码来实现释放:
System.Runtime.InteropServices.Marshal.ReleaseComObject(fc);
GC.Collect();
这样就轻松实现了在asp.net下面实现Flash的抓图功能了。