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

Posted 柳鲲鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全网首发:JDK绘制文字:七使用字体图像进行绘制相关的知识,希望对你有一定的参考价值。

  如何获取字体图像已经搞清楚了,那么是怎么绘制的呢?

  书接上文:

全网首发:JDK绘制文字:六、字符对应的字体图像加载流程_柳鲲鹏的博客-CSDN博客

  • FreetypeFontScaler.getGlyphImage()

  调用本地函数getGlyphImageNative()

  • freetypeScaler.c Java_sun_font_FreetypeFontScaler_getGlyphImageNative

getGlyphImageNativeInternal()

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

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

  • FileFontStrike.getGlyphImagePtrs()

  得到图像的指针后:

缓存起来:

setCachedGlyphptr()

setCachedGlyphPtrInternal()

setCachedGlyphPtr()

setCachedGlyphPtrInternal():segLongGlyphImages[segIndex][subIndex] = glyphPtr;

复制到参数中的image

  • GlyphList.setFromChars()

  从这里可以看到,传递到getGlyphImagePtrs()的是本类的字段images。之后的绘制,肯定使用这个数据。

  疑问:GlyphList是每次新产生的?或者是images长度一直为1?

  • SolidTextRenderer(GlyphListPipe).drawChars()

调用setFromChars()之后,紧跟着就是drawGlyphList()

  • SolidTextRenderer.drawGlyphList()

sg2d.loops.drawGlyphListLoop.DrawGlyphList(sg2d, sg2d.surfaceData, gl);

  • DrawGlyphList.DrawGlyphList()

  我们这个已经熟悉了,是一个本地函数。

  • DrawGlyphList.c Java_sun_java2d_loops_DrawGlyphList_DrawGlyphList

参数glyphlist就是GlyphList,字段images有字体图像。

这个函数先是获取绘制句柄,再绘制图像。具体操作又是什么?

以上是关于全网首发:JDK绘制文字:七使用字体图像进行绘制的主要内容,如果未能解决你的问题,请参考以下文章

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

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

全网首发:JDK绘制文字:六字符对应的字体图像加载流程

全网首发:JDK绘制文字:六字符对应的字体图像加载流程

全网首发:JDK绘制文字:六字符对应的字体图像加载流程

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