Пример #1
0
        private uint getImageFormatOffset(Table_EBLC.indexSubTable cIndexSubTable, uint nGlyphIndex, uint nStartGlyphIndex)
        {
            int  nIndexFormat          = cIndexSubTable.header.indexFormat;
            uint nGlyphImageDataOffset = 0;

            switch (nIndexFormat)
            {
            case 1:
            {
                nGlyphImageDataOffset = cIndexSubTable.header.imageDataOffset + ((Table_EBLC.indexSubTable1)cIndexSubTable).GetOffset((uint)(nGlyphIndex - nStartGlyphIndex));
                break;
            }

            case 2:
            {
                nGlyphImageDataOffset  = cIndexSubTable.header.imageDataOffset + 4 + bigGlyphMetrics.bufSize;
                nGlyphImageDataOffset += (uint)(((Table_EBLC.indexSubTable2)cIndexSubTable).imageSize * (nGlyphIndex - nStartGlyphIndex));
                break;
            }

            case 3:
            {
                nGlyphImageDataOffset = cIndexSubTable.header.imageDataOffset + ((Table_EBLC.indexSubTable3)cIndexSubTable).GetOffset((uint)(nGlyphIndex - nStartGlyphIndex));
                break;
            }

            case 4:
            {
                Table_EBLC.indexSubTable4 ist = (Table_EBLC.indexSubTable4)cIndexSubTable;

                for (uint i = 0; i < ist.numGlyphs; i++)
                {
                    if (ist.GetCodeOffsetPair(i).glyphCode == nGlyphIndex)
                    {
                        nGlyphImageDataOffset = ist.header.imageDataOffset + ist.GetCodeOffsetPair(i).offset;
                        break;
                    }
                }
                break;
            }

            case 5:
            {
                for (uint i = 0; i < ((Table_EBLC.indexSubTable5)cIndexSubTable).numGlyphs; i++)
                {
                    if (((Table_EBLC.indexSubTable5)cIndexSubTable).GetGlyphCode(i) == nGlyphIndex)
                    {
                        nGlyphImageDataOffset  = cIndexSubTable.header.imageDataOffset + 4 + bigGlyphMetrics.bufSize + 4;
                        nGlyphImageDataOffset += (uint)(((Table_EBLC.indexSubTable5)cIndexSubTable).numGlyphs * 2);
                        nGlyphImageDataOffset += (uint)(i * ((Table_EBLC.indexSubTable5)cIndexSubTable).imageSize);
                        break;
                    }
                }
                break;
            }
            }

            return(nGlyphImageDataOffset);
        }
Пример #2
0
        public uint getImageLength(Table_EBLC.indexSubTable cIndexSubTable, uint nGlyphIndex, uint nStartGlyphIndex, uint nImageOffset)
        {
            int  nIndexFormat = cIndexSubTable.header.indexFormat;
            uint nImageLength = 0;

            switch (nIndexFormat)
            {
            case 1:
            {
                nImageLength  = cIndexSubTable.header.imageDataOffset + ((Table_EBLC.indexSubTable1)cIndexSubTable).GetOffset((uint)((nGlyphIndex + 1) - nStartGlyphIndex));
                nImageLength -= nImageOffset;
                break;
            }

            case 2:
            {
                nImageLength = ((Table_EBLC.indexSubTable2)cIndexSubTable).imageSize;
                break;
            }

            case 3:
            {
                nImageLength  = cIndexSubTable.header.imageDataOffset + ((Table_EBLC.indexSubTable3)cIndexSubTable).GetOffset((uint)((nGlyphIndex + 1) - nStartGlyphIndex));
                nImageLength -= nImageOffset;
                break;
            }

            case 4:
            {
                Table_EBLC.indexSubTable4 ist = (Table_EBLC.indexSubTable4)cIndexSubTable;

                for (uint i = 0; i < ist.numGlyphs; i++)
                {
                    if (ist.GetCodeOffsetPair(i).glyphCode == nGlyphIndex)
                    {
                        nImageLength  = ist.header.imageDataOffset + ist.GetCodeOffsetPair(i + 1).offset;
                        nImageLength -= nImageOffset;
                    }
                }
                break;
            }

            case 5:
            {
                nImageLength = ((Table_EBLC.indexSubTable5)cIndexSubTable).imageSize;
                break;
            }
            }

            return(nImageLength);
        }