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); }
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); }