public void OpenFile(string filename, Stream stream) { CurrentFile = new TEXFile(stream); var eArgs = new FileOpenedEventArgs(filename) { Platform = ((TEXFile.Platform) this.CurrentFile.File.Header.Platform).ToString("F"), Format = ((TEXFile.PixelFormat) this.CurrentFile.File.Header.PixelFormat).ToString("F"), Mipmaps = this.CurrentFile.File.Header.NumMips.ToString(), PreCave = this.CurrentFile.IsPreCaveUpdate(), TexType = EnumHelper <TEXFile.TextureType> .GetEnumDescription( ((TEXFile.TextureType) this.CurrentFile.File.Header.TextureType).ToString()) }; var mipmap = CurrentFile.GetMainMipmap(); eArgs.Size = mipmap.Width + "x" + mipmap.Height; OnOpenFile(eArgs); byte[] argbData; switch ((TEXFile.PixelFormat)CurrentFile.File.Header.PixelFormat) { case TEXFile.PixelFormat.DXT1: argbData = Squish.DecompressImage(mipmap.Data, mipmap.Width, mipmap.Height, SquishFlags.Dxt1); break; case TEXFile.PixelFormat.DXT3: argbData = Squish.DecompressImage(mipmap.Data, mipmap.Width, mipmap.Height, SquishFlags.Dxt3); break; case TEXFile.PixelFormat.DXT5: argbData = Squish.DecompressImage(mipmap.Data, mipmap.Width, mipmap.Height, SquishFlags.Dxt5); break; case TEXFile.PixelFormat.ARGB: argbData = mipmap.Data; break; default: throw new Exception("Unknown pixel format?"); } string atlasExt = "xml"; FileInfo fileInfo = new FileInfo(filename); string fileDir = fileInfo.DirectoryName; string fileNameWithoutExt = fileInfo.Name.Replace(fileInfo.Extension, ""); string atlasDataPath = fileDir + @"\" + fileNameWithoutExt + "." + atlasExt; Console.WriteLine("XmlPath:" + atlasDataPath); List <KleiTextureAtlasElement> atlasElements = new List <KleiTextureAtlasElement>(); if (File.Exists(atlasDataPath)) { atlasElements = ReadAtlasData(atlasDataPath, mipmap.Width, mipmap.Height); } else { Console.WriteLine("不存在"); } var imgReader = new BinaryReader(new MemoryStream(argbData)); Bitmap pt = new Bitmap(mipmap.Width, mipmap.Height); for (int y = 0; y < mipmap.Height; y++) { for (int x = 0; x < mipmap.Width; x++) { byte r = imgReader.ReadByte(); byte g = imgReader.ReadByte(); byte b = imgReader.ReadByte(); byte a = imgReader.ReadByte(); pt.SetPixel(x, y, Color.FromArgb(a, r, g, b)); } OnProgressUpdate?.Invoke(y * 100 / mipmap.Height); } pt.RotateFlip(RotateFlipType.RotateNoneFlipY); CurrentFileRaw = pt; OnRawImage(new FileRawImageEventArgs(pt, atlasElements, fileDir, fileNameWithoutExt)); }