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]); } } } }
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(); } } }