public GFDv1(StreamInfo input) { _sourceFile = input.FileName; if (_texAdapters == null || _texAdapters.Count == 0) { _texAdapters = PluginLoader.Instance.GetAdapters <IMtFrameworkTextureAdapter>(); } using (var br = new BinaryReaderX(input.FileData, true)) { // Set endianess if (br.PeekString(4, Encoding.ASCII) == "\0DFG") { br.ByteOrder = ByteOrder = ByteOrder.BigEndian; br.BitOrder = BitOrder = BitOrder.LSBFirst; } // Header Header = br.ReadType <FileHeader>(); HeaderF = br.ReadMultiple <float>(Header.FCount); // Name br.ReadInt32(); Name = br.ReadCStringASCII(); // Characters Characters = br.ReadMultiple <CharacterInfo>(Header.CharacterCount).Select(ci => new GFDv1Character { Character = ci.Character, GlyphX = (int)ci.Block1.GlyphX, GlyphY = (int)ci.Block1.GlyphY, TextureID = (int)ci.Block1.TextureIndex, GlyphHeight = (int)ci.Block2.GlyphHeight, GlyphWidth = (int)ci.Block2.GlyphWidth, XAdjust = (int)ci.Block2.XAdjust, IsSpace = ci.Block3.IsSpace > 0 ? true : false, Superscript = ci.Block3.Superscript > 0 ? true : false, CharacterWidth = (int)ci.Block3.CharacterWidth }).ToList(); // Textures Textures = new List <Bitmap>(); for (var i = 0; i < Header.FontTexCount; i++) { IMtFrameworkTextureAdapter texAdapter = _texAdapters.Where(adapter => adapter is IIdentifyFiles). FirstOrDefault(adapter => ((IIdentifyFiles)adapter). Identify(new StreamInfo(File.OpenRead(GetTexName(_sourceFile, i)), GetTexName(_sourceFile, i)), null)); if (texAdapter == null) { continue; } ((ILoadFiles)texAdapter).Load(new StreamInfo(File.OpenRead(GetTexName(_sourceFile, i)), GetTexName(_sourceFile, i)), null); Textures.Add(((IImageAdapter)texAdapter).BitmapInfos[0].Image); } } }
public void Save(StreamInfo output) { using (var bw = new BinaryWriterX(output.FileData, ByteOrder, BitOrder)) { // Header Header.Magic = ByteOrder == ByteOrder.LittleEndian ? "GFD\0" : "\0DFG"; Header.CharacterCount = Characters.Count; Header.FontTexCount = Textures.Count; bw.WriteType(Header); foreach (var f in HeaderF) { bw.Write(f); } // Name bw.Write(Name.Length); bw.WriteString(Name, Encoding.ASCII, false, false); bw.Write((byte)0); // Characters bw.WriteMultiple(Characters.Select(ci => new CharacterInfo { Character = ci.Character, Block1 = new Block1 { GlyphY = ci.GlyphY, GlyphX = ci.GlyphX, TextureIndex = ci.TextureID }, Block2 = new Block2 { GlyphHeight = ci.GlyphHeight, GlyphWidth = ci.GlyphWidth, XAdjust = ci.XAdjust }, Block3 = new Block3 { IsSpace = ci.IsSpace ? 1 : 0, Superscript = ci.Superscript ? 1 : 0, CharacterWidth = ci.CharacterWidth } })); // Textures for (var i = 0; i < Header.FontTexCount; i++) { IMtFrameworkTextureAdapter texAdapter = _texAdapters.Where(adapter => adapter is IIdentifyFiles). FirstOrDefault(adapter => ((IIdentifyFiles)adapter). Identify(new StreamInfo(File.OpenRead(GetTexName(_sourceFile, i)), GetTexName(_sourceFile, i)), null)); if (texAdapter == null) { continue; } ((ILoadFiles)texAdapter).Load(new StreamInfo(File.OpenRead(GetTexName(_sourceFile, i)), GetTexName(_sourceFile, i)), null); ((IImageAdapter)texAdapter).BitmapInfos[0].Image = Textures[i]; ((ISaveFiles)texAdapter).Save(new StreamInfo(File.OpenRead(GetTexName(_sourceFile, i)), GetTexName(_sourceFile, i)), null); } _sourceFile = output.FileName; } }
public GFDv2(FileStream input) { _sourceFile = input.Name; if (_texAdapters == null || _texAdapters.Count == 0) { PluginLoader.ComposePlugins(this); } using (var br = new BinaryReaderX(input)) { // Set endianess if (br.PeekString(4, Encoding.ASCII) == "\0DFG") { br.ByteOrder = ByteOrder = ByteOrder.BigEndian; br.BitOrder = BitOrder = BitOrder.LSBFirst; } // Header Header = br.ReadType <FileHeader>(); HeaderF = br.ReadMultiple <float>(Header.FCount); // Name br.ReadInt32(); Name = br.ReadCStringASCII(); // Characters Characters = br.ReadMultiple <CharacterInfo>(Header.CharacterCount).Select(ci => new GFDv2Character { Character = ci.Character, TextureID = (int)ci.Block1.TextureIndex, GlyphX = (int)ci.Block1.GlyphX, GlyphY = (int)ci.Block1.GlyphY, Block2Trailer = (int)ci.Block2.Block2Trailer, GlyphWidth = (int)ci.Block2.GlyphWidth, GlyphHeight = (int)ci.Block2.GlyphHeight, CharacterWidth = (int)ci.Block3.CharacterWidth, CharacterHeight = (int)ci.Block3.CharacterHeight, XAdjust = ci.XAdjust, YAdjust = ci.YAdjust }).ToList(); // Textures Textures = new List <Bitmap>(); for (var i = 0; i < Header.FontTexCount; i++) { //TODO IMtFrameworkTextureAdapter texAdapter = null;//_texAdapters.Where(adapter => adapter is IIdentifyFiles).FirstOrDefault(adapter => ((IIdentifyFiles)adapter).Identify(GetTexName(_sourceFile, i))); if (texAdapter == null) { continue; } //TODO //((ILoadFiles)texAdapter).Load(GetTexName(_sourceFile, i)); Textures.Add(((IImageAdapter)texAdapter).BitmapInfos[0].Image); } } }