Beispiel #1
0
        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);
                }
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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);
                }
            }
        }