PDF标准详解(五)——图形状态

在第三节中,我们说到Q/q 这一对操作符是用来保存和还原图形状态的,那个时候只有一个简单的概念,变换矩阵是图形状态的一员,那么什么是图形状态,以及有哪些图形状态呢?本节将要描述这部分的内容

图形状态

一个PDF应用程序维护内部数据结构称为图形状态,它保存了当前图形控制参数。这些参数定义在全局框架,在全局框架内可执行图形操作符。例如:f(填充)操作符隐式调用当前颜色这个参数,S(描边)操作符调用了当前线框这个参数从图形状态。

这个说法比较的官方,我个人的理解就是它保存了画笔画刷,线性等一系列跟画图相关的属性,在调用图形操作符时,直接采用图形状态中的参数来填充画笔画刷等。

目前设备无关的图形状态参数主要有下面几个

参数类型
CTMarray当前变换矩阵,例如: a b c d e f cm
clipping path(internal)当前剪切路径,初始值:CropBox
color spaceName or array当前颜色空间,分为 fill color(填充色) & stroke color(描边色),初始值:DeviceGray
color(various)当前颜色。初始值:black
text statevarious有9个图形状态参数组成,用于文本显示。
line widthnumber线宽。初始值:1.0
line capinteger线帽,线2端的样式。初始值:0 J(square butt cap)
line joininteger线连接的样式 。初始值:0 j (miter join)
miter limitinteger尖角限量。 初始值:10 M (11.5°)
dash patternarray and number虚线。初始值:[] 0 d
blend modename or array当前混合模式。初始值:Normal
soft maskdictionary or name指定阴影的形状或阴影不透明值用于透明图像模式。初始值:None
alpha constantnumber透明度。初始值:1.0。 CA(for stroke) ca(fill)
alpha sourcebooleanTrue: 由 SMask 指定透明模式
false:由 CA 或 ca 指定透明值

我们目前介绍过的图形状态主要有变换矩阵以及裁剪区域。剩下的会在后面的内容中依次介绍

图形对象的状态变更

在pdf 1.7 的标准中,有这么一张图
在这里插入图片描述
这张图描述了图形状态描述对象的变更。
图最中间的是页面对象层,包括图形状态、颜色、文本状态和标记对象等等。
坐上角的连线表示,图形对象可以通过 m/re 等操作符进入对路径对象的描述,路径对象在描述完毕后可以使用f、s等操作符显示路径并回到页面对象层,或者可以通过W/W* 来进入对裁剪区域对象的描述。

其他的连线也是同样的道理。理解了这个图,也就理解了基本的PDF图形操作逻辑,一般想要的绘制的图形未显示或者裁剪区域未发生作用,一般都是进入的状态不对。按照此思路进行查漏补缺一般可以解决问题

本节的内容,不涉及到具体的操作符,仅仅是概念的介绍。后续将会陆续介绍上面提到的图形状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1537934.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

PHP邮箱系统:从入门到实战搭建教程指南!

PHP邮箱系统配置教程?如何选用合适的PHP邮箱系统库? 为了满足个性化和定制化的需求,许多开发者选择使用PHP来搭建自己的邮箱系统。AokSend将带你从入门到实战,详细介绍如何搭建一个功能完善的PHP邮箱系统。 PHP邮箱系统&#xf…

dcmtk在MWLSCP会忽略对于字符集的匹配

版本信息 dcmtk v3.6.4 2018-11-29 发现的原因 在我将dcmtk的wlmscpfs当作MWLSCP使用的时候,我在SCU端为了防止过来的数据中存在不识别的字符集,对于收到的数据数据进行了字符集的过滤,但是发现过滤没有生效。 确保数据源 首先需要确认数…

从openAI最新模型GPT-o1再谈思维链(Cot)技术,大模型该怎么提升其逻辑推理能力?

“ 推理能力是大模型迈向AGI的必经之路 ” 最近openAI发布了号称史上最强模型——o1,其具有强大的逻辑推理能力,号称能达到人类的博士生水平。 而从o1模型的评测来看,o1模型在数学竞赛,编码,科学问答等方面表现良好&…

这几个电脑文件加密的方法你都知道吗?

1. 使用操作系统自带的加密功能 Windows BitLocker:Windows的BitLocker是一个内置的磁盘加密工具。你可以通过右键点击磁盘驱动器,选择“启用BitLocker”,然后按照提示设置密码或使用USB密钥加密整个硬盘或分区。macOS FileVault&#xff1a…

AQS详解

线程创建方式 继承Thread类实现Runnable接口实现Callable接口 LockSupport的使用 LockSupport.park()/LockSupport.unpark() LockSupport是一个工具类,提供了基本的线程阻塞和唤醒功能,它是创建锁和其他同步组件的基础工具,内部是使用sun…

医学数据分析实训 项目七 继承学习--空气质量指标--天气质量分析和预测

项目七:集成学习 实践目的 理解集成学习算法原理;熟悉并掌握常用集成学习算法的使用方法;熟悉模型性能评估的方法;掌握模型优化的方法。 实践平台 操作系统:Windows7及以上Python版本:3.8.x及以上集成开…

【大模型技术教程】FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统

FastGPT是一个功能强大的平台,专注于知识库训练和自动化工作流程的编排。它提供了一个简单易用的可视化界面,支持自动数据预处理和基于Flow模块的工作流编排。FastGPT支持创建RAG系统,提供自动化工作流程等功能,使得构建和使用RAG…

C++速通LeetCode中等第3题-字母异位词分组

双指针法:两个指针分别指向左右边界,记录最大面积,由于面积由短板决定,两个指针中较短的短指针向内移动一格,再次记录最大面积, 直到两指针相遇,得出答案。 class Solution { public:int maxAr…

C++入门 之 类和对象(中)

目录 一、类的默认成员函数 ​编辑二、构造函数 三、析构函数 四、拷贝构造函数 五.运算符重载 六、赋值运算重载 七、日期类的实现 1、Date.h 2、Date.cpp 八、取地址运算符重载 1、const成员函数 2、取地址运算符重载 一、类的默认成员函数 默认成员函数就是用户不…

java之顺序表的创建

顺序表的定义: 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 我们现在要实现的顺序表功能有:增(add)、删(remove)、查(get) …

什么是PDM系统?PDM系统核心功能是什么?如何进行产品数据管理

PDM系统介绍 PDM全称为产品数据管理,是一种企业级的产品研发协作平台。它集成了信息技术,通过全面管理和协同研发业务流程,提升企业的整体研发管理水平,缩短产品研发周期,降低成本,提高产品质量。PDM系统不…

「iOS」push与present

iOS学习 前言push与poppresent与dismiss使用dismiss弹出多级PresentedViewController 与 PresentingViewController区别 总结 前言 在此前就学习过视图的push与present。与之对应的退出方法为pop与dismiss。这里进行一次总结。 push与pop pushViewController 是通过导航控制器…

开放式耳机好用吗?哪个开放式耳机好用?

现在市面上的开放式耳机真的越来越火了,所以很多小伙伴也会来问我,有哪些品牌值得入手,开放式耳机到底好不好用的这个问题,作为专业的开放式耳机测评博主对于这个问题当然是信手拈来啦,这篇文章就来告诉大家如何才能选…

百度Android IM SDK组件能力建设及应用

作者 | 星途 导读 移动互联网时代,随着社交媒体、移动支付、线上购物等行业的快速发展,对即时通讯功能的需求不断增加。对于各APP而言,接入IM SDK(即时通讯软件开发工具包)能够大大降低开发成本、提高开发效率&#…

js 如何代码识别Selenium+Webdriver

Python 的 Selenium 可以模拟用户操作打开浏览器,前端如何去识别是人机还是真人: window.navigator.webdriver Selenium 人机下是这样的: 正常使用:

SpringCloud Feign 以及 一个标准的微服务的制作

一个标准的微服务制作 以一个咖啡小程序项目的订单模块为例,这个模块必将包括: 各种实体类(pojo,dto,vo....) 控制器 controller 服务类service ...... 其中控制器中有的接口需要提供给其他微服务,订单模块也需要…

Day04_JVM实战

文章目录 一、gc日志和dump快照GC日志是什么,要怎么看?dump快照是什么?要怎么看?二、gc日志和dump快照实战java.lang.OutOfMemoryError:Java heap space1、gc.log怎么看2、heapdump.hprof怎么看?①jvisualvm查看②使用MAT查看java.lang.OutOfMemoryError:Metaspace1、实时…

给大模型技术从业者的建议,入门转行必看!!

01—大模型技术学习建议‍‍‍ 这个关于学习大模型技术的建议,也可以说是一个学习技术的方法论。 首先大家要明白一点——(任何)技术都是一个更偏向于实践的东西,具体来说就是学习技术实践要大于理论,要以实践为主理论为辅,而不…

产品经理学AI:搭建大模型应用常用的三种方式

如果开发想要基于某个大模型开发一个应用该怎么做? 一般有以下几种方式: 1、自己部署大模型 部署大模型,分为两种模式,一种是部署自研大模型,还有一种是部署开源大模型。 部署自研大模型的优势是,可以完…

国产龙芯处理器双核64位系统板载2G DDR3内存迅为2K1000开发板

硬件配置国产龙芯处理器,双核64位系统,板载2G DDR3内存,流畅运行Busybox、Buildroot、Loognix、QT5.12 系统!接口全板载4路USB HOST、2路千兆以太网、2路UART、2路CAN总线、Mini PCIE、SATA固态盘接口、4G接口、GPS接口WIF1、蓝牙、Mini HDMI…