Introduction:
In this article we will see how to convert our JPEG images to .swf format. For this we are using a third party's DLL which will convert our images to a .swf movie. For viewing the movies you can download the swf player.
Background:
Actually the DLL to convert images to swf I found using a Google search. In this article I'm using DLL files as given below to do our work.
- log4net
- SwfDotNet
- SharpZipLib
Follow the steps given below to do our work.
Step 1:
Create a Windows Form application in C#. Add the reference to the DLLs that I have put in the bin folder of the attached source as well a "using" for this namespace in our using statements like:
using log4net;
using SwfDotNet.IO;
using SwfDotNet.IO.Tags;
using SwfDotNet.IO.Tags.Types;
Step 2:
Design the normal form for taking input filename and output path for our work with OpenFile Dialog and SaveFile Dialog.
Step 3:
In the click of the create button write the following code to convert the input file to .swf format and store it to the specified location.
try
{
if (File.Exists(inputfilename) == false)
{
MessageBox.Show("Can not open Image file" + inputfilename);
return;
}
//First load the picture as System.Drawing.Image
Image img = Image.FromFile(inputfilename);
int posX = 0;
int posY = 0;
int imgWidth = img.Width;
int imgHeight = img.Height;
//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));
//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
swf.Tags.Add(DefineBitsJpeg2Tag.FromImage(jpegId, img));
//Now we will define the picture's shape tag
//to define all the transformations on the picture (as rotation, color effects, etc..)
DefineShapeTag shapeTag = new DefineShapeTag();
shapeTag.CharacterId = swf.GetNewDefineId();
shapeTag.Rect = new Rect(posX * 20 - 1, posY * 20 - 1, (posX + imgWidth) * 20 - 1, (posY + imgHeight) * 20 - 1);
FillStyleCollection fillStyles = new FillStyleCollection();
fillStyles.Add(new BitmapFill(FillStyleType.ClippedBitmapFill, ushort.MaxValue, new Matrix(0, 0, 20, 20)));
fillStyles.Add(new BitmapFill(FillStyleType.ClippedBitmapFill, jpegId, new Matrix(posX * 20 - 1, posY * 20 - 1, (20.0 * imgWidth) / img.Width, (20.0 * imgHeight) / img.Height)));
LineStyleCollection lineStyles = new LineStyleCollection();
ShapeRecordCollection shapes = new ShapeRecordCollection();
shapes.Add(new StyleChangeRecord(posX * 20 - 1, posY * 20 - 1, 2));
shapes.Add(new StraightEdgeRecord(imgWidth * 20, 0));
shapes.Add(new StraightEdgeRecord(0, imgHeight * 20));
shapes.Add(new StraightEdgeRecord(-imgWidth * 20, 0));
shapes.Add(new StraightEdgeRecord(0, -imgHeight * 20));
shapes.Add(new EndShapeRecord());
shapeTag.ShapeWithStyle = new ShapeWithStyle(fillStyles, lineStyles, shapes);
swf.Tags.Add(shapeTag);
//Place the picture to the screen with depth=1
swf.Tags.Add(new PlaceObject2Tag(shapeTag.CharacterId, 1, 0, 0));
//Add a single frame
swf.Tags.Add(new ShowFrameTag());
swf.Tags.Add(new EndTag());
//Write the swf to a file
SwfWriter writer = new SwfWriter(outputfilename);
writer.Write(swf);
writer.Close();
img.Dispose();
MessageBox.Show("File Created & Stored");
catch (Exception ex)
{
MessageBox.Show("Error Occurred \n " + ex.Message.ToString());
}
Conclusion:
In this simple way we can convert our image files to SWF.