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

简介: 全网首发: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博客

目录
相关文章
|
缓存 Java 数据库连接
分析JDK动态代理的实现
分析JDK动态代理的实现
70 0
|
2月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
30 1
|
5月前
|
监控 算法 Java
怎么用JDK自带工具进行JVM内存分析
JVM内存分析工具,如`jps`、`jcmd`、`jstat`、`jstack`和`jmap`,是诊断和优化Java应用的关键工具。`jps`列出Java进程,`jcmd`执行诊断任务,如查看JVM参数和线程堆栈,`jstat`监控内存和GC,`jstack`生成线程堆栈信息,而`jmap`则用于生成堆转储文件。这些工具帮助排查内存泄漏、优化内存配置、性能调优和异常分析。例如,`jmap -dump:file=heapdump.hprof <PID>`生成堆转储文件,之后可以用Eclipse Memory Analyzer (MAT)等工具分析。
|
6月前
|
Java
JDK 1.8 函数接口(收藏用)
JDK 1.8 函数接口(收藏用)
|
存储 监控 Java
JDK10优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析
JDK10优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析
|
编解码 移动开发 Java
JDK9优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析
JDK9优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析
|
Cloud Native Java API
JDK 21的新特性总结和分析
JDK 21的新特性总结和分析
346 0
|
缓存 监控 druid
JDK中「SPI」原理分析
JDK中「SPI」原理分析SPI是JDK内置的服务提供加载机制,可以为服务接口加载实现类,解耦是其核心思想,也是很多框架和组件的常用手段;
119 0
JDK中「SPI」原理分析
JDK各个版本的特性分析|JDK7|JDK8|JDK9|JDK10|JDK11|JDK12|JDK13特性分析
JDK各个版本的特性分析|JDK7|JDK8|JDK9|JDK10|JDK11|JDK12|JDK13特性分析
|
消息中间件 存储 Arthas
MQ-消息堆积-JDK Bug导致线程阻塞案例分析
一个JDK BUG导致系统LOAD高的案例分析
189 0