Example #1
0
 static internal GIFPrim ExtractGIFPrim(UInt32 LowData)
 {
     GIFPrim pr = new GIFPrim();
     pr.PrimitiveType = (GS_PRIM)GetBit(LowData, 0, 3);
     pr.IIP = (GSIIP)GetBit(LowData, 3, 1);
     pr.TME = Convert.ToBoolean(GetBit(LowData, 4, 1));
     pr.FGE = Convert.ToBoolean(GetBit(LowData, 5, 1));
     pr.ABE = Convert.ToBoolean(GetBit(LowData, 6, 1));
     pr.AA1 = Convert.ToBoolean(GetBit(LowData, 7, 1));
     pr.FST = (GSFST)(GetBit(LowData, 8, 1));
     pr.CTXT = (GSCTXT)(GetBit(LowData, 9, 1));
     pr.FIX = (GSFIX)(GetBit(LowData, 10, 1));
     return pr;
 }
Example #2
0
        static internal GIFPrim ExtractGIFPrim(UInt32 LowData)
        {
            GIFPrim pr = new GIFPrim();

            pr.PrimitiveType = (GS_PRIM)GetBit(LowData, 0, 3);
            pr.IIP           = (GSIIP)GetBit(LowData, 3, 1);
            pr.TME           = Convert.ToBoolean(GetBit(LowData, 4, 1));
            pr.FGE           = Convert.ToBoolean(GetBit(LowData, 5, 1));
            pr.ABE           = Convert.ToBoolean(GetBit(LowData, 6, 1));
            pr.AA1           = Convert.ToBoolean(GetBit(LowData, 7, 1));
            pr.FST           = (GSFST)(GetBit(LowData, 8, 1));
            pr.CTXT          = (GSCTXT)(GetBit(LowData, 9, 1));
            pr.FIX           = (GSFIX)(GetBit(LowData, 10, 1));
            return(pr);
        }
Example #3
0
        static internal GIFTag ExtractGifTag(byte[] data,GSTransferPath path)
        {
            GIFTag t = new GIFTag();

            t.size = data.Length;
            t.path = path;
            t.TAG  = BitConverter.ToUInt64(data,0);
            t.REGS = BitConverter.ToUInt64(data,8);

            t.Q     = 1f;
            t.nloop = (uint)GetBit(t.TAG,0,15);
            t.eop   = (uint)GetBit(t.TAG,15,1);
            t.pre   = (uint)GetBit(t.TAG,46,1);
            t.prim  = GIFPrim.ExtractGIFPrim((uint)GetBit(t.TAG,47,11));
            t.flg   = (GIFFLG)GetBit(t.TAG,58,2);
            t.nreg  = (uint)GetBit(t.TAG,60,4);
            if (t.nreg == 0)
            {
                t.nreg = 16;
            }

            byte[]   registers  = new byte[t.nreg];
            Unpack[] regsunpack = new Unpack[t.nreg];

            t.regs = new List <IGifData>();
            for (byte i = 0; i < t.nreg; i++)
            {
                byte reg = (byte)GetBit(t.REGS,i * 4,4);
                registers[i]  = reg;
                regsunpack[i] = GetUnpack(reg);
            }

            int p = 16;

            switch (t.flg)
            {
            case GIFFLG.GIF_FLG_PACKED:
                for (int j = 0; j < t.nloop; j++)
                {
                    for (int i = 0; i < t.nreg; i++)
                    {
                        UInt64 LowData  = BitConverter.ToUInt64(data,p);
                        UInt64 HighData = BitConverter.ToUInt64(data,p + 8);
                        t.regs.Add(regsunpack[i](t,registers[i],LowData,HighData,true));
                        p += 16;
                    }
                }
                break;

            case GIFFLG.GIF_FLG_REGLIST:
                for (int j = 0; j < t.nloop; j++)
                {
                    for (int i = 0; i < t.nreg; i++)
                    {
                        UInt64 Data = BitConverter.ToUInt64(data,p);
                        t.regs.Add(regsunpack[i](t,registers[i],Data,0,false));
                        p += 8;
                    }
                }
                break;

            case GIFFLG.GIF_FLG_IMAGE:
            case GIFFLG.GIF_FLG_IMAGE2:
                GifImage image = new GifImage();
                image.Data = new byte[t.nloop * 16];
                try
                {
                    Array.Copy(data,16,image.Data,0,t.nloop * 16);
                }
                catch (ArgumentException) { }
                t.regs.Add(image);
                break;

            default:
                break;
            }
            return(t);
        }