绘制句柄的初始化流程已搞清楚:

全网首发:JDK绘制文字:二、绘制句柄的初始化流程_柳鲲鹏的博客-CSDN博客

  自然的,我们就会问:绘制句柄有什么东西?我们现在就来看看。还是以位图为例。

  • ByteBinary1Bit.c
DECLARE_SOLID_DRAWGLYPHLIST(ByteBinary1Bit);NativePrimitive ByteBinary1BitPrimitives[] = {......REGISTER_SOLID_DRAWGLYPHLIST(ByteBinary1Bit),REGISTER_SOLID_DRAWGLYPHLISTAA(ByteBinary1Bit),REGISTER_XOR_DRAWGLYPHLIST(ByteBinary1Bit),......
};

  这些都是宏定义。

  首先要注意,这里是NativePrimitive的数组,也就是有多个NativePrimitive实例。结合前面的分析,我们重点关心的是DRAWGLYPHLIST相关的宏。
  注意,这些宏不是AnyByteBinary.h中定义的,而是LoopMacros.h定义的。
DEFINE_BYTE_BINARY_SOLID_DRAWGLYPHLIST(ByteBinary1Bit)

  • DECLARE_SOLID_DRAWGLYPHLIST(LoopMacros.h)

  我们先来看看声明的宏。

#define DECLARE_SOLID_DRAWGLYPHLIST(TYPE) \DrawGlyphListFunc      NAME_SOLID_DRAWGLYPHLIST(TYPE)

其中DrawGlyphListFunc(GraphicsPrimitiveMgr.h)的定义是:

typedef void (DrawGlyphListFunc)(SurfaceDataRasInfo *pRasInfo,ImageRef *glyphs,jint totalGlyphs,jint fgpixel, jint fgcolor,jint cx1, jint cy1,jint cx2, jint cy2,struct _NativePrimitive *pPrim,CompositeInfo *pCompInfo);

NAME_SOLID_DRAWGLYPHLIST的宏定义是:

#define NAME_SOLID_DRAWGLYPHLIST(TYPE)   TYPE ## DrawGlyphList

综合来看,就是声明了个函数。展开后的结果大体是这样的:

DrawGlyphListFunc ByteBinary1BitDrawGlyphList

这个函数有没有呢?有的,在vis_FuncArray.c这个文件中。

  • REGISTER_SOLID_DRAWGLYPHLIST(LoopMacros.h)
#define REGISTER_SOLID_DRAWGLYPHLIST(TYPE) \REGISTER_DRAWGLYPHLIST(AnyColor, SrcNoEa, TYPE, \NAME_SOLID_DRAWGLYPHLIST(TYPE))

关于NAME_SOLID_DRAWGLYPHLIST我们已经见过,而REGISTER_DRAWGLYPHLIST (GraphicsPrimitiveMgr.h)的宏定义是:

#define REGISTER_DRAWGLYPHLIST(SRC, COMP, DST, FUNC) \REGISTER_PRIMITIVE(DrawGlyphList, SRC, COMP, DST, FUNC)

REGISTER_PRIMITIVE(GraphicsPrimitiveMgr.h)的宏定义是:

#define REGISTER_PRIMITIVE(TYPE, SRC, COMP, DST, FUNC) \{ \& PrimitiveTypes.TYPE, \& SurfaceTypes.SRC, \& CompositeTypes.COMP, \& SurfaceTypes.DST, \{FUNC}, \{FUNC}, \0,   \0   \}

这个宏展开后,数组中有不少字段,最关键的就是其中包含了ByteBinary1BitDrawGlyphList。

到了这里我们就明白了,绘制句柄是包含了同一种的多种处理函数。所以才出现了这样一句调用:pPrim->funcs.drawglyphlist

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

  1. H5canvas(绘制矩形,绘制圆形,绘制线段,绘制文字,绘制曲线)

    Canvas简介 canvas 最早由Apple引入WebKit,用于Mac OS X 的 Dashboard,后来又在Safari和Google Chrome被实现. 基于 Gecko 1.8的浏览 ...

  2. 【Qt】2D绘图之绘制文字

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 基本绘制 04. 使用范围绘制文字 05. 使用字体绘制文字 06. 附录 01. 概述 Qt中除了绘制图形以外,还可以使 ...

  3. android开发 之 Canvas绘制文字,图片

    一.Canvas的常用操作速查表 操作类型 相关API 备注 绘制颜色 drawColor, drawRGB, drawARGB 使用单一颜色填充整个画布 绘制基本形状 drawPoint, draw ...

  4. OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)

    OpenCV这么简单为啥不学--1.4.基础标识绘制(绘制线line函数.rectangle函数绘制四边形.circle函数绘制圆形.putText函数绘制文字.putText绘制中文文字) 目录 O ...

  5. 在图片UIImage上绘制文字(字符串文字转图片)

    很多时候我们需要在一张背景图上面绘制文字并且重新生成一张带有绘制好文字的图片,一开始我使用的是我上篇博客中提到的先自定义一个UIView然后再UIView上面绘制文字,绘制完成之后再通过将UIView ...

  6. [Qt教程] 第13篇 2D绘图(三)绘制文字

    [Qt教程] 第13篇 2D绘图(三)绘制文字 楼主  发表于 2013-4-25 23:04:46 | 查看: 720| 回复: 0 绘制文字 版权声明 该文章原创于Qter开源社区,作者yafei ...

  7. 【Qt入门第13篇】 2D绘图(三)绘制文字

    导语 Qt中除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontI ...

  8. MATLAB三维绘图(三)绘制等值线图

    MATLAB三维绘图(三)绘制等值线图 1.使用contour函数绘制等值图,示例: %% 显示不同颜色的梯度图 clear; clc; close all; x = -3.5:0.2:3.5; y ...

  9. OpenCV之core 模块. 核心功能(2)基本绘图 随机数发生器绘制文字 离散傅立叶变换 输入输出XML和YAML文件 与 OpenCV 1 同时使用

    基本绘图 目的 本节你将学到: 如何用 Point 在图像中定义 2D 点 如何以及为何使用 Scalar 用OpenCV的函数 line 绘 直线 用OpenCV的函数 ellipse 绘 椭圆 用 ...

  10. 【python图像处理】几何图形的绘制与文字的绘制(ImageDraw类详解)

    python PIL图像处理模块中的ImageDraw类支持各种几何图形的绘制和文本的绘制,如直线.椭圆.弧.弦.多边形以及文字等. 下面直接通过示例来进行说明: #-*- coding: UTF-8 ...

最新文章

  1. KnockOut绑定
  2. python sklearn.learning_curve 什么是学习曲线?
  3. 618 兵临城下,你需要一个更省钱省力的数据根基平台!
  4. MySQL备份命令mysqldump参数说明与示例
  5. 物理学家杨振宁到底有多厉害?
  6. IntelliJ IDEA 如何从SVN导入项目 怎么部署 就是路劲和tomcat配置等等 步骤希望
  7. 监听器应用【统计网站人数、自定义session扫描器、踢人小案例】
  8. flex怎么设置调用的外部浏览器
  9. Harmony OS — TimePicker时间选择器
  10. 可变参数宏__VA_ARGS__和...
  11. 【设计】全差分设计报告
  12. mysql 授予用户权限_mysql授权用户权限
  13. 最新Vue2.0+组件开源项目库集合
  14. LeetCode-1873. 计算特殊奖金
  15. java jpanel边框_JPanel设置边框
  16. jupyter notebook第七章seaborn库的一些案例分析加相关函数的解析
  17. 自制Arduino便携式超声波测距仪
  18. 【java】查重类的实现
  19. [CSP-S模拟测试]:壕游戏(费用流)
  20. TSN网络中的Qbu和IEEE 802.3br帧抢占是如何工作的?

热门文章

  1. 思科网院Packet Tracer实验(八)子网划分
  2. hdu2084数塔----DP入门
  3. css3三角形兼容_css3三角箭头的使用和兼容【原创】
  4. go build不从本地gopath获取_Go语言实战打包和工具链
  5. matlab+sfm+样例,基于SFM的三维重建MATLAB程序
  6. c++函数如何返回一个vector_如何将Python的一个函数进行超时限制
  7. 评委输入的密码如果不正确,当错误的次数达到5次时,该评委的账号会被锁定.如何解锁呢?
  8. 微信公众号“一键关注”功能开启及转发制作.
  9. 从入门到精通,给Java学习者的几点建议
  10. curl以cookie的方式登录