diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp index e09e54281..c7e310e4c 100644 --- a/src/ports/SkFontHost_FreeType.cpp +++ b/src/ports/SkFontHost_FreeType.cpp @@ -693,7 +693,9 @@ void SkScalerContext_FreeType::generateImage(const SkGlyph& glyph) { const uint8_t* src = (const uint8_t*)fFace->glyph->bitmap.buffer; uint8_t* dst = (uint8_t*)glyph.fImage; - if (fFace->glyph->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY) { + if (fFace->glyph->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY || + (fFace->glyph->bitmap.pixel_mode == FT_PIXEL_MODE_MONO && + glyph.fMaskFormat == SkMask::kBW_Format)) { unsigned srcRowBytes = fFace->glyph->bitmap.pitch; unsigned dstRowBytes = glyph.rowBytes(); unsigned minRowBytes = SkMin32(srcRowBytes, dstRowBytes); @@ -705,7 +707,8 @@ void SkScalerContext_FreeType::generateImage(const SkGlyph& glyph) { src += srcRowBytes; dst += dstRowBytes; } - } else if (fFace->glyph->bitmap.pixel_mode == FT_PIXEL_MODE_MONO) { + } else if (fFace->glyph->bitmap.pixel_mode == FT_PIXEL_MODE_MONO && + glyph.fMaskFormat == SkMask::kA8_Format) { for (int y = 0; y < fFace->glyph->bitmap.rows; ++y) { uint8_t byte = 0; int bits = 0; @@ -726,6 +729,8 @@ void SkScalerContext_FreeType::generateImage(const SkGlyph& glyph) { src += fFace->glyph->bitmap.pitch; dst += glyph.rowBytes(); } + } else { + SkASSERT(!"unknown glyph bitmap transform needed"); } if (lcdRenderMode)