public byte[] ToARGB32() { var result = new byte[BitmapWidth * BitmapHeight * 4]; var swf_reader = SwfStreamReader.DecompressZBytesToReader(ZlibBitmapData); if (BitmapFormat == 3) { var palette = new SwfColor[BitmapColorTableSize]; for (var i = 0; i < palette.Length; ++i) { palette[i] = SwfColor.Read(swf_reader, false); } var palette_pitch = BitmapWidth % 4 == 0 ? BitmapWidth : BitmapWidth + (4 - BitmapWidth % 4); var palette_indices = swf_reader.ReadRest(); for (var i = 0; i < BitmapHeight; ++i) { for (var j = 0; j < BitmapWidth; ++j) { var result_index = j + i * BitmapWidth; var palette_index = palette_indices[j + i * palette_pitch]; var palette_color = palette[palette_index]; result[result_index * 4 + 0] = palette_color.A; result[result_index * 4 + 1] = palette_color.R; result[result_index * 4 + 2] = palette_color.G; result[result_index * 4 + 3] = palette_color.B; } } } else if (BitmapFormat == 5) { for (var i = 0; i < BitmapWidth * BitmapHeight; ++i) { var pix24 = swf_reader.ReadUInt32(); result[i * 4 + 0] = 255; result[i * 4 + 1] = (byte)((pix24 >> 8) & 0xFF); result[i * 4 + 2] = (byte)((pix24 >> 16) & 0xFF); result[i * 4 + 3] = (byte)((pix24 >> 24) & 0xFF); } } else { throw new System.Exception(string.Format( "Incorrect DefineBitsLossless format: {0}", BitmapFormat)); } return(result); }
public static SetBackgroundColorTag Create(SwfStreamReader reader) { return(new SetBackgroundColorTag { BackgroundColor = SwfColor.Read(reader, false) }); }
public static PlaceObject3Tag Create(SwfStreamReader reader) { var tag = new PlaceObject3Tag(); tag.HasClipActions = reader.ReadBit(); tag.HasClipDepth = reader.ReadBit(); tag.HasName = reader.ReadBit(); tag.HasRatio = reader.ReadBit(); tag.HasColorTransform = reader.ReadBit(); tag.HasMatrix = reader.ReadBit(); tag.HasCharacter = reader.ReadBit(); tag.Move = reader.ReadBit(); reader.ReadBit(); // reserved tag.OpaqueBackground = reader.ReadBit(); tag.HasVisible = reader.ReadBit(); tag.HasImage = reader.ReadBit(); tag.HasClassName = reader.ReadBit(); tag.HasCacheAsBitmap = reader.ReadBit(); tag.HasBlendMode = reader.ReadBit(); tag.HasFilterList = reader.ReadBit(); tag.Depth = reader.ReadUInt16(); tag.ClassName = tag.HasClassName ? reader.ReadString() : string.Empty; tag.CharacterId = tag.HasCharacter ? reader.ReadUInt16() : (ushort)0; tag.Matrix = tag.HasMatrix ? SwfMatrix.Read(reader) : SwfMatrix.identity; tag.ColorTransform = tag.HasColorTransform ? SwfColorTransform.Read(reader, true) : SwfColorTransform.identity; tag.Ratio = tag.HasRatio ? reader.ReadUInt16() : (ushort)0; tag.Name = tag.HasName ? reader.ReadString() : string.Empty; tag.ClipDepth = tag.HasClipDepth ? reader.ReadUInt16() : (ushort)0; tag.SurfaceFilters = tag.HasFilterList ? SwfSurfaceFilters.Read(reader) : SwfSurfaceFilters.identity; tag.BlendMode = tag.HasBlendMode ? SwfBlendMode.Read(reader) : SwfBlendMode.identity; tag.BitmapCache = tag.HasCacheAsBitmap ? (0 != reader.ReadByte()) : false; tag.Visible = tag.HasVisible && !reader.IsEOF ? (0 != reader.ReadByte()) : true; tag.BackgroundColor = tag.HasVisible && !reader.IsEOF ? SwfColor.Read(reader, true) : SwfColor.identity; tag.ClipActions = tag.HasClipActions && !reader.IsEOF ? SwfClipActions.Read(reader) : SwfClipActions.identity; return(tag); }