コード例 #1
0
ファイル: Y64.cs プロジェクト: IanusInferus/cmdt
        public uint[] RGB32 = new uint[(1 << 18)];         //正好1M Bytes

        //RGB色板是根据YCrCbPalette中的三色分量色板生成的
        public RGBPalette(YCrCbPalette ycc)
        {
            for (int y = 0; y < 256; y++)
            {
                for (int cr = 0; cr < 32; cr++)
                {
                    for (int cb = 0; cb < 32; cb++)
                    {
                        //以YCbCr三分量的合成矢量作为RGB色板索引
                        RGB32[(cb << 13) | (cr << 8) | y] = YCbCr2RGB(ycc.Y[y], ycc.Cb[cb], ycc.Cr[cr]);
                    }
                }
            }
        }
コード例 #2
0
ファイル: Y64.cs プロジェクト: IanusInferus/cmdt
        public Y64(string fn)         //ok
        {
            fs = new FileStream(fn, FileMode.Open, FileAccess.Read);
            br = new BinaryReader(fs);

            //检测Y74的6字节文件标志46 43 44 45 00 00
            int id = br.ReadInt32();

            Debug.Assert(id == 0x45444346);
            id = br.ReadInt16();
            Debug.Assert(id == 0);

            //版本标志:commandos 2 or commandos 3
            version = br.ReadInt16();
            Debug.Assert(version >= 2 && version <= 4);
            if (version > 2)
            {
                version = 3;
            }

            //获得YCrCb色板和RGB色板
            if (version == 2)
            {
                palette = new YCrCbPalette(br, 48);
            }
            else
            {
                palette = new YCrCbPalette(br, 113);
            }
            rgb = new RGBPalette(palette);

            //获得视角数和每视角的图片数
            num_view         = br.ReadInt32();
            num_pic_per_view = br.ReadInt32();

            //获得每一图片的起始位置
            ptr_pics = new long[num_view, num_pic_per_view];
            for (int i = 0; i < num_view; i++)
            {
                for (int j = 0; j < num_pic_per_view; j++)
                {
                    ptr_pics[i, j] = br.ReadInt32();
                }
            }
        }