{A}
{S0}本文的目标
本文的主要目标是显示如何转换成SWF动画JPEG文件上飞用几行代码,。使用SwfDotNet库
SwfDotNet库是一个C#开源框架,可以在:
这个库提供阅读有关的一些好东西,可以写在任何版本的SWF格式的文件,从1到7。 SwfDotNet.IO.dll兼容。NET框架1.1,2.0,或和Mono。这个库方面MacromediaTM SWF格式规范。你可以阅读和下载的Macromedia官方规范{A4}。理论
首先,我建议您阅读我在CodeProject上SwfDotNet的另一篇文章,"{A5}"。在这篇文章中,你可以找到有关如何使用这个库的通用信息,这是一个很好的理解本文的介绍。该SWF标记序列
一个SWF文件是一个特定的标记,这是用来例如,嵌入的数据,来描述如何显示库元素,添加一个帧,放置一个对象的序列,删除一个对象,等等。
每个标记描述了一个在屏幕上的字符,字符识别码,这是一个唯一的数字组成。在此示例中使用的标签下面是这个例子中所必需的标签列表:SetBackgroundColorTag:定义背景颜色。
DefineBitsJpeg2Tag:JPEG数据嵌入到SWF。DefineShapeTag:创建一个在屏幕上的形状描述的方式来显示的DefineBitsJpeg2Tag数据。感谢它,我们可以,例如,应用转换,等等。
PlaceObject2Tag:DefineShapeTag对象在屏幕上放置的位置,大小等,ShowFrameTag:最后一帧添加。创建示例应用程序
首先,在你的类SwfDotNet的库:
using SwfDotNet.IO;
using SwfDotNet.IO.Tags;
using SwfDotNet.IO.Tags.Types;
,我们将使用System.Drawing.Image类加载JPEG文件,然后我们就可以转换BMP,GIF,PNG等相同的代码太:{C}
现在,我们创建一个SWF对象,并填写标头信息。不要忘了,SWF格式使用英寸为单位,而不是像素! (1像素= 20英寸)来减少带宽,我们选择压缩我们的最终动画。要做到这一点,添加了以下具体的"水煤浆"签名://Create a new Swf instance
Swf swf = new Swf();
//Set size in inch unit (1 pixel = 20 inches)
swf.Size = new Rect(0, 0, (posX + imgWidth) * 20, (posY + imgHeight) * 20);
swf.Version = 7; //Version 7 (for compression, must be > 5)
swf.Header.Signature = "CWS"; //Set the signature to compress the swf
//Set the background color tag as white
swf.Tags.Add(new SetBackgroundColorTag(255, 255, 255));
现在,我们可以在我们的动画导入的JPEG数据。 SwfDotNet库,FromImage DefineBitsJpeg2Tag对象的静态方法,它真的很简单。
你可以看到,一个DefineBitsJpeg2标签是一个"字符标签"。然后,我们必须设置一个唯一的ID,这个对象。要做到这一点,你可以使用SWF对象GetNewDefineId的方法。//Set the jpeg tag
ushort jpegId = swf.GetNewDefineId();
//Load the jped directly from an image
//In fact, this line will load the jpeg data in the file as
//a library element only (not to display the jpeg)
swf.Tags.Add(DefineBitsJpeg2Tag.FromImage(jpegId, img));
现在到了最困难的部分在本示例:我们要创建defineShape描述的方式来显示JPEG数据。
首先,我们必须创建一个新的唯一的ID,这个标签。然后,我们指定我们的形状填充样式,并使用FillStyleType.ClippedBitmapFill填写JPEG数据的形状。现在,我们必须定义绘制过程中的ShapeRecordCollection对象。 StyleChangeRecord类指定,我们将设置笔的位置上左点位图。 StraightEdgeRecord对象指定位图RECT合作ords,最后,EndShapeRecord关闭拉丝工艺。
最后,我们添加了一个PlaceObject2Tag对象放置在屏幕上的形状。
最后,我们将添加一个帧,以显示,和我们的SWF对象保存到一个文件中,感谢SwfWriter类。你婉通知SwfWriter可以写在一个文件或流(Web应用程序,例如)。
结论//Add a single frame
swf.Tags.Add(new ShowFrameTag());
swf.Tags.Add(new EndTag());
//Write the swf to a file
SwfWriter writer = new SwfWriter(outputSwfFileName);
writer.Write(swf);
writer.Close();
img.Dispose();
正如你可以看到,由于SwfDotNet库,你可以很容易地创建一个JPEG的SWF程序。这个代码,很容易创建一个WebForm的组件,它创建总是在飞行从JPEG文件的Flash幻灯片。
我们已经看到了如何在SWF文件中绘制一个简单的形状,但它确实只是一个引子。我们将进一步发展这个主题,在以后的文章。历史19/12/2006:第一条版本。特别感谢萨科Guary和皮埃尔Cleaud帮助我翻译。