2021SC@SDUSC Ebiten(九) png包代码详解

本文详细介绍了Go语言中的Ebiten库如何处理PNG图像,包括解码器和编码器的使用,以及PNG图像的概念、色彩空间、错误处理等规范。文章还涵盖了相关函数和类型,如Decode、DecodeConfig、Encode等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021SC@SDUSC 

Go语言的简单2D游戏库-Ebiten   

 

目录

概览

便携式网络图形----PNG 规范

概念

图像

色彩空间

参考图片到PNG图片的转换

PNG图像

PNG图像编码

附加信息

错误处理

Functions 

func Decode

func DecodeConfig

func Encode

Types

type CompressionLevel

type Encoder

func (*Encoder) Encode

type EncoderBuffer

type EncoderBufferPool


概览

包 png 实现了一个 PNG 图像解码器和编码器。

便携式网络图形----PNG 规范

概念

图像

该国际标准规定了 PNG 数据流,并对生成 PNG 数据流的 PNG 编码器、解释 PNG 数据流的 PNG 解码器和将一个 PNG 数据流转换为另一个的 PNG 编辑器提出了一些要求。它没有指定应用程序与 PNG 编码器、解码器或编辑器之间的接口。图像呈现给编码器或由解码器传送的精确形式没有规定。四种图像是有区别的。

该源图像是呈现给编码器PNG图像。

仅在概念上存在的参考图像是矩形像素的矩形阵列,所有像素都具有相同的宽度和高度,并且都包含相同数量的无符号整数样本,三个(红色、绿色、蓝色)或四个(红色、绿色、蓝色、阿尔法)。特定类型(红色、绿色、蓝色或 alpha)的所有样本的数组称为通道。每个通道的样本深度范围为 1 到 16,这是通道中每个样本使用的位数。不同的通道可能有不同的样本深度。红色、绿色和蓝色样本决定了像素颜色的红色、绿色和蓝色分量的强度;如果它们都为零,则像素为黑色,并且如果它们都有最大值(2采样深度-1),像素为白色。alpha 样本确定像素的不透明程度,其中零表示完全透明,最大值表示完全不透明。在三通道参考图像中,所有像素都是完全不透明的。(四通道参考图像也有可能使所有像素完全不透明;不同之处在于后者具有特定的 alpha 样本深度,而前者没有。)像素的每一水平行称为扫描线。像素在每条扫描线内从左到右排序,扫描线从上到下排序。PNG 编码器可以将源图像直接转换为 PNG 图像,但从概念上讲,它首先将源图像转换为参考图像,然后将参考图像转换为 PNG 图像。根据源图像的类型,从源图像到参考图像的转换可能需要丢失信息。这种转换超出了本国际标准的范围。但是,始终可以从 PNG 数据流中准确地恢复参考图像。

的PNG图像的α分离,索引,RGB合并,α-压实,和样本深度比例:从参考图像由一系列变换而获得的。定义了五种类型的 PNG 图像。(如果 PNG 编码器实际上将源图像直接转换为 PNG 图像,并且源图像格式已经与 PNG 图像格式相似,则编码器可能能够避免进行其中一些转换。尽管并非所有样本深度都在PNG图像明确支持1到16位的范围,可以记录参考图像每个通道的有效位数。PNG 图像中的所有通道都具有相同的样本深度。PNG 编码器从 PNG 图像生成 PNG 数据流。PNG 解码器采用 PNG 数据流并重新创建 PNG 图像。

所述递送图像从通过解码PNG数据流中获得的PNG图像构成。没有为交付的图像指定特定格式。查看器向用户呈现尽可能接近原始源图像外观的图像。

四种图像之间的关系如下图。

​                                                源、参考、PNG 和显示图像之间的关系

样本、通道、像素和样本深度之间的关系如下图。

​                                                 样本、样本深度、像素和通道之间的关系

色彩空间

可以通过以下三种方式之一指定颜色样本所在的 RGB 颜色空间:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值