全网首发:JDK绘制文字:八绘制函数简要分析

Posted 柳鲲鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全网首发:JDK绘制文字:八绘制函数简要分析相关的知识,希望对你有一定的参考价值。

  在上文中:

全网首发:JDK绘制文字:七、使用字体图像进行绘制_柳鲲鹏的博客-CSDN博客

  • 字体图像的复制
freetypeScaler.c Java_sun_font_FreetypeFontScaler_getGlyphImageNative
getGlyphImageNativeInternal()

  在这个函数中,加载了字体图像。然后根据不同的图像格式,使用不同的函数进行复制(CopyBW2Grey8/CopyGrey4ToGrey8/CopyFTSubpixelToSubpixel/CopyFTSubpixelVToSubpixel)

  复制到哪里?GlyphInfo.image。这个对象是在函数中新产生的。一切处理后,调用ptr_to_jlong把指针转换为long后返回。
  • 绘制字体图像的JNI函数

  我们现在还想知道,字体图像到底是如何上屏的?接上文:

DrawGlyphList.c Java_sun_java2d_loops_DrawGlyphList_DrawGlyphList
参数glyphlist就是GlyphList,字段images有字体图像。

先获得绘制句柄GetNativePrim(),这个在之前的博文中已经详述了。 

  • DrawGlyphList.c setupBlitVector()

参数glyphlist,就是sun.font.GlyphList。

通过反射获得:字段x、y(与字段的反射,是在sunFont.c initFontIDs()进行);字段len;字段images。

对x/y进行取整后,开始循环,就是把GlyphInfo的数据转换到gbv中。特别注意到这一句(gbv->glyphs[g].pixels    = ginfo->image)。这里的动作还是准备工作。

  • GraphicsPrimitiveMgr.c GrPrim_Sg2dGetPixel

获得像素缓冲区,反射字段SunGraphics2D.pixel

  • GraphicsPrimitiveMgr.c GrPrim_Sg2dGetEaRGB

当前颜色。反射字段SunGraphics2D.eargb

  • DrawGlyphList.c drawGlyphList

GrPrim_Sg2dGetClip

实际动作是这一句(包含了字体位图图像):

(*func)

    (&rasInfo,
    gbv->glyphs,     //字符位图
    gbv->numGlyphs,  //位图个数
    pixel,           //Graphics的数据缓冲区
    color,           //当前绘制颜色
    clipLeft, clipTop,
    clipRight, clipBottom,
    pPrim, &compInfo);

func是pPrim->funcs.drawglyphlist。这个之前也分析过了。参考:

全网首发:JDK绘制文字:一、绘制流程_柳鲲鹏的博客-CSDN博客

全网首发:JDK绘制文字:四、绘制文字的具体函数分析_柳鲲鹏的博客-CSDN博客

以上是关于全网首发:JDK绘制文字:八绘制函数简要分析的主要内容,如果未能解决你的问题,请参考以下文章

全网首发:JDK绘制文字:二绘制句柄的初始化流程

全网首发:JDK绘制文字:二绘制句柄的初始化流程

全网首发:JDK绘制文字:七使用字体图像进行绘制

全网首发:JDK绘制文字:七使用字体图像进行绘制

全网首发:JDK绘制文字:五字体上下文产生流程

全网首发:JDK绘制文字:三绘制句柄的内容是如何定义的