コード例 #1
0
        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);
        }
コード例 #2
0
 public static SetBackgroundColorTag Create(SwfStreamReader reader)
 {
     return(new SetBackgroundColorTag {
         BackgroundColor = SwfColor.Read(reader, false)
     });
 }
コード例 #3
0
        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);
        }