예제 #1
0
        public override byte[] GetData(ushort[] glyfIndexes)
        {
            MemoryStream stream = new MemoryStream();

            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_version.X), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_version.Y), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_fontRevision.X), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_fontRevision.Y), 0, 2);
            stream.Write(BinaryUtility.UInt32ToBytes(_checkSumAdjustment), 0, 4);
            stream.Write(BinaryUtility.UInt32ToBytes(_magicNumber), 0, 4);
            stream.Write(BinaryUtility.UInt16ToBytes(_flags), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes(_unitsPerEm), 0, 2);
            stream.Write(BinaryUtility.UInt64ToBytes((ulong)_created), 0, 8);
            stream.Write(BinaryUtility.UInt64ToBytes((ulong)_modified), 0, 8);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_xMin), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_yMin), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_xMax), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_yMax), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes(_macStyle), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes(_lowestRecPPEM), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_fontDirectionHint), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_indexToLocFormat), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_glyphDataFormat), 0, 2);

            stream.Position = 0;
            byte[] data = new byte[stream.Length];
            stream.Read(data, 0, data.Length);
            return(data);
        }
예제 #2
0
        public void Write(Stream stream)
        {
            byte[] bTag = System.Text.Encoding.ASCII.GetBytes(_tag);

            stream.Write(bTag, 0, bTag.Length);
            stream.Write(BinaryUtility.UInt32ToBytes((uint)_checksum), 0, 4);
            stream.Write(BinaryUtility.UInt32ToBytes((uint)_offset), 0, 4);
            stream.Write(BinaryUtility.UInt32ToBytes((uint)_length), 0, 4);
        }
예제 #3
0
 private void writeOffset(uint value, System.IO.MemoryStream stream)
 {
     if (_indexToLocFormat == 0)
     {
         stream.Write(BinaryUtility.UInt16ToBytes((ushort)(value / 2)), 0, 2);
     }
     else
     {
         stream.Write(BinaryUtility.UInt32ToBytes(value), 0, 4);
     }
 }
예제 #4
0
        public override byte[] GetData(ushort[] glyfIndexes)
        {
            MemoryStream stream = new MemoryStream();

            stream.Write(BinaryUtility.UInt16ToBytes(_version), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_xAvgCharWidth), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes(_usWeightClass), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes(_usWidthClass), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_fsType), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_ySubscriptXSize), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_ySubscriptYSize), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_ySubscriptXOffset), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_ySubscriptYOffset), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_ySuperscriptXSize), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_ySuperscriptYSize), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_ySuperscriptXOffset), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_ySuperscriptYOffset), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_yStrikeoutSize), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_yStrikeoutPosition), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)_sFamilyClass), 0, 2);

            stream.Write(_panose, 0, _panose.Length);
            for (int i = 0; i < _ulCharRange.Length; ++i)
            {
                stream.Write(BinaryUtility.UInt32ToBytes(_ulCharRange[i]), 0, 4);
            }
            stream.Write(_achVendID, 0, _achVendID.Length);

            stream.Write(BinaryUtility.UInt16ToBytes(_fsSelection), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes(_fsFirstCharIndex), 0, 2);
            stream.Write(BinaryUtility.UInt16ToBytes(_fsLastCharIndex), 0, 2);

            if (_version > 0)
            {
                stream.Write(BinaryUtility.UInt16ToBytes((ushort)_sTypoAscender), 0, 2);
                stream.Write(BinaryUtility.UInt16ToBytes((ushort)_sTypoDescender), 0, 2);
                stream.Write(BinaryUtility.UInt16ToBytes((ushort)_sTypoLineGap), 0, 2);
                stream.Write(BinaryUtility.UInt16ToBytes(_usWinAscent), 0, 2);
                stream.Write(BinaryUtility.UInt16ToBytes(_usWinDescent), 0, 2);
                stream.Write(BinaryUtility.UInt32ToBytes(_ulCodePageRange1), 0, 4);
                stream.Write(BinaryUtility.UInt32ToBytes(_ulCodePageRange2), 0, 4);
                stream.Write(BinaryUtility.UInt16ToBytes((ushort)_sxHeight), 0, 2);
                stream.Write(BinaryUtility.UInt16ToBytes((ushort)_sCapHeight), 0, 2);
                stream.Write(BinaryUtility.UInt16ToBytes(_usDefaultChar), 0, 2);
                stream.Write(BinaryUtility.UInt16ToBytes(_usBreakChar), 0, 2);
                stream.Write(BinaryUtility.UInt16ToBytes(_usMaxContext), 0, 2);
            }

            stream.Position = 0;
            byte[] data = new byte[stream.Length];
            stream.Read(data, 0, data.Length);
            return(data);
        }
예제 #5
0
        protected void writeHeader(Stream stream, uint tag)
        {
            stream.Write(BinaryUtility.UInt32ToBytes(tag), 0, 4);

            int numTables = _tables.Count;

            stream.Write(BinaryUtility.UInt16ToBytes((ushort)numTables), 0, 2);

            uint maxPow      = maxPowerOf2(numTables);
            uint searchRange = maxPow * 16;

            stream.Write(BinaryUtility.UInt16ToBytes((ushort)searchRange), 0, 2);

            int entrySelector = (int)Math.Log(maxPow, 2);

            stream.Write(BinaryUtility.UInt16ToBytes((ushort)entrySelector), 0, 2);

            int rangeShift = (int)(numTables * 16 - searchRange);

            stream.Write(BinaryUtility.UInt16ToBytes((ushort)rangeShift), 0, 2);
        }
예제 #6
0
        public override byte[] GetData(ushort[] glyfIndexes)
        {
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            ms.Write(BinaryUtility.UInt16ToBytes((ushort)_format.X), 0, 2);
            ms.Write(BinaryUtility.UInt16ToBytes((ushort)_format.Y), 0, 2);
            ms.Write(BinaryUtility.UInt16ToBytes((ushort)_italicAngle.X), 0, 2);
            ms.Write(BinaryUtility.UInt16ToBytes((ushort)_italicAngle.Y), 0, 2);
            ms.Write(BinaryUtility.UInt16ToBytes((ushort)_underlinePosition), 0, 2);
            ms.Write(BinaryUtility.UInt16ToBytes((ushort)_underlineThickness), 0, 2);
            ms.Write(BinaryUtility.UInt32ToBytes((uint)_isFixedPitch), 0, 4);
            ms.Write(BinaryUtility.UInt32ToBytes((uint)_minMemType42), 0, 4);
            ms.Write(BinaryUtility.UInt32ToBytes((uint)_maxMemType42), 0, 4);
            ms.Write(BinaryUtility.UInt32ToBytes((uint)_minMemType1), 0, 4);
            ms.Write(BinaryUtility.UInt32ToBytes((uint)_maxMemType1), 0, 4);
            ms.Write(BinaryUtility.UInt32ToBytes((uint)_maxMemType1), 0, 4);
            ms.Write(BinaryUtility.UInt16ToBytes(0), 0, 2);

            byte[] tempFontData = new byte[ms.Length];
            ms.Position = 0;
            ms.Read(tempFontData, 0, tempFontData.Length);
            return(tempFontData);
        }
예제 #7
0
        public byte[] GetData(FontMap map)
        {
            MemoryStream stream = new MemoryStream();

            byte[] cmapData = CMapMapFormat4.CreateData(map);

            stream.Write(BinaryUtility.UInt16ToBytes(0), 0, 2);                       //version
            stream.Write(BinaryUtility.UInt16ToBytes(1), 0, 2);                       //number subtables
            stream.Write(BinaryUtility.UInt16ToBytes(3), 0, 2);                       //platformID
            stream.Write(BinaryUtility.UInt16ToBytes(1), 0, 2);                       //platformSpecificID
            stream.Write(BinaryUtility.UInt32ToBytes(12), 0, 4);                      //offset
            stream.Write(BinaryUtility.UInt16ToBytes(4), 0, 2);                       //format
            stream.Write(BinaryUtility.UInt16ToBytes((ushort)cmapData.Length), 0, 2); //length
            stream.Write(BinaryUtility.UInt16ToBytes(0), 0, 2);                       //_language

            stream.Write(cmapData, 0, cmapData.Length);

            byte[] fontData = new byte[stream.Length];
            stream.Position = 0;
            stream.Read(fontData, 0, fontData.Length);

            return(fontData);
        }