package { import flash.desktop.ClipboardFormats; import flash.desktop.NativeDragManager; import flash.display.Sprite; import flash.events.NativeDragEvent; import flash.filesystem.File; import flash.filesystem.FileMode; import flash.filesystem.FileStream; import flash.utils.ByteArray; import org.libspark.swfassist.io.ByteArrayOutputStream; import org.libspark.swfassist.swf.io.SWFWriter; import org.libspark.swfassist.swf.io.WritingContext; import org.libspark.swfassist.swf.structures.FillStyle; import org.libspark.swfassist.swf.structures.FillStyleTypeConstants; import org.libspark.swfassist.swf.structures.LineStyle; import org.libspark.swfassist.swf.structures.SWF; import org.libspark.swfassist.swf.structures.ShapeWithStyle; import org.libspark.swfassist.swf.structures.StraightEdgeRecord; import org.libspark.swfassist.swf.structures.StyleChangeRecord; import org.libspark.swfassist.swf.tags.DefineBitsJPEG2; import org.libspark.swfassist.swf.tags.DefineShape; import org.libspark.swfassist.swf.tags.DefineShape2; import org.libspark.swfassist.swf.tags.PlaceObject2; import org.libspark.swfassist.swf.tags.RemoveObject2; import org.libspark.swfassist.swf.tags.SetBackgroundColor; import org.libspark.swfassist.swf.tags.ShowFrame; [SWF(width = 300, height = 300, frameRate = 24, backgroundColor = 0xffffff)] public class SwfassistDemo extends Sprite { public function SwfassistDemo() { _sprite = addChild(new Sprite()) as Sprite; _sprite.graphics.beginFill(0xffffff); _sprite.graphics.drawRect(0, 0, 300, 300); _sprite.graphics.endFill(); _sprite.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, dragEnterHandler); _sprite.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, dropHandler); } private var _sprite:Sprite; private function dragEnterHandler(e:NativeDragEvent):void { NativeDragManager.acceptDragDrop(_sprite); } private function dropHandler(e:NativeDragEvent):void { var fileList:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array; if (fileList != null) { generateSlideshow(fileList); } } private function generateSlideshow(files:Array):void { var swf:SWF = new SWF(); swf.header.version = 9; swf.header.frameSize.xMax = 500; swf.header.frameSize.yMax = 375; swf.header.frameRate = 24; swf.header.numFrames = 0; var bgColor:SetBackgroundColor = new SetBackgroundColor(); bgColor.backgroundColor.fromUint(0x000000); swf.tags.addTag(bgColor); for (var i:uint = 0; i < files.length; ++i) { var file:File = File(files[i]); var defineJPEG:DefineBitsJPEG2 = new DefineBitsJPEG2(); defineJPEG.characterId = (i * 2) + 1; var fileStream:FileStream = new FileStream(); fileStream.open(file, FileMode.READ); fileStream.readBytes(defineJPEG.jpegData); fileStream.close(); fileStream = null; swf.tags.addTag(defineJPEG); var defineShape:DefineShape = new DefineShape(); defineShape.shapeId = (i * 2 + 1) + 1; defineShape.shapeBounds.xMax = 500; defineShape.shapeBounds.yMax = 375; var fillStyle:FillStyle = new FillStyle(); fillStyle.fillStyleType = FillStyleTypeConstants.CLIPPED_BITMAP_FILL; fillStyle.bitmapId = (i * 2) + 1; fillStyle.bitmapMatrix.hasScale = true; fillStyle.bitmapMatrix.scaleX = 20; fillStyle.bitmapMatrix.scaleY = 20; var shape:ShapeWithStyle = defineShape.shapes; shape.fillStyles.fillStyles.push(fillStyle); var r1:StyleChangeRecord = new StyleChangeRecord(); r1.fillStyle0 = 1; r1.moveDeltaX = 0; r1.moveDeltaY = 0; r1.stateFillStyle0 = true; r1.stateMoveTo = true; var r2:StraightEdgeRecord = new StraightEdgeRecord(); r2.verticalLine = true; r2.deltaY = 375; var r3:StraightEdgeRecord = new StraightEdgeRecord(); r3.horizontalLine = true; r3.deltaX = 500; var r4:StraightEdgeRecord = new StraightEdgeRecord(); r4.verticalLine = true; r4.deltaY = -375; var r5:StraightEdgeRecord = new StraightEdgeRecord(); r5.horizontalLine = true; r5.deltaX = -500; shape.shapeRecords.push(r1, r2, r3, r4, r5); swf.tags.addTag(defineShape); var placeObject:PlaceObject2 = new PlaceObject2(); placeObject.characterId = (i * 2 + 1) + 1; placeObject.depth = i + 1; placeObject.hasCharacter = true; swf.tags.addTag(placeObject); for (var fadeIn:uint = 0; fadeIn < 20; ++fadeIn) { var fadeObject:PlaceObject2 = new PlaceObject2(); fadeObject.depth = i + 1; fadeObject.isMove = true; fadeObject.hasColorTransform = true; fadeObject.colorTransform.hasMultiplication = true; fadeObject.colorTransform.redMultiplication = 256; fadeObject.colorTransform.greenMultiplication = 256; fadeObject.colorTransform.blueMultiplication = 256; fadeObject.colorTransform.alphaMultiplication = (((1.0 / 20) * fadeIn) * 256); swf.tags.addTag(fadeObject); swf.tags.addTag(new ShowFrame()); swf.header.numFrames++; } if (i > 0) { var removeObject:RemoveObject2 = new RemoveObject2(); removeObject.depth = (i - 1) + 1; swf.tags.addTag(removeObject); } for (var n:uint = 0; n < (24 * 3); ++n) { swf.tags.addTag(new ShowFrame()); swf.header.numFrames++; } } var swfBytes:ByteArray = new ByteArray(); new SWFWriter().writeSWF(new ByteArrayOutputStream(swfBytes), new WritingContext(), swf); var swfStream:FileStream = new FileStream(); swfStream.open(File.desktopDirectory.resolvePath('slideshow.swf'), FileMode.WRITE); swfStream.writeBytes(swfBytes); swfStream.close(); } } }