全网首发: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有字体图像。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳鲲鹏

能给阁下一点帮助,非常荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值