关于此实验
绘制一张图片,其中最小的方格以调色板索引的形式存储。更改分辨率和色深,查看二进制代码,并比较未压缩数据大小与简单游程表示的大小。将精确的像素网格导出为 PNG,看看图像信息与实际文件格式有何不同。
学习目标
- 将图像像素关联到一个数字调色板索引。
- 根据尺寸和每像素位数计算原始存储量。
- 测试哪些排列适合使用游程编码进行压缩。
使用方法
- 1绘制一张 8×8 的图片,并读取像素内显示的二进制调色板代码。
- 2将每像素位数从 3 改为 1。比较可用颜色和原始存储量。
- 3比较一张空白图片和一张带有垂直条纹的图片。保持尺寸和色深不变,并说明运行段数量。
- 4使用“撤消”比较编辑内容,记录测得的载荷数量,然后导出 PNG。
模型
假设
- 像素按每一行从左到右读取,然后从上到下读取。每个像素都使用所选的固定比特数。
- RLE 模型将每个运行段存储为一个颜色索引和一个长度,各使用 ceil(log2(像素数 + 1)) 比特。运行段可以跨越行边界。
- 调色板表、尺寸、文件头和填充均不计入载荷数量。PNG 使用不同的压缩方案,因此下载的文件大小不一定与这些数量相等。
在课堂上试试这个实验
- Q1为什么尺寸相同的两张图片可能需要不同大小的 RLE 载荷?
- Q2为什么宽度和高度都加倍时,原始存储量会变为四倍?
常见问题
RLE 总能让图片变小吗?
不能。颜色频繁变化会产生许多运行段,所需比特数可能超过原始光栅数据。
PNG 文件为什么会比显示的载荷更大或更小?
文件包含头部并使用 PNG 压缩,而本实验统计的是刻意简化的像素或 RLE 载荷。