Leo Tsui 供稿
Leo Tsui 整理
这道作业题目首先的一个要求就是阅读,理解位图的数据结构,并阅读'copy.c'和'bmp.h'相关代码,并作修改
针对知道题目而言,一个要点是要知道密文藏在什么图片的地方(通道),分清哪些东西是噪音,实用的解题工具除了题目中提到的红色塑料片,还有就是 Photoshop。可以先通过现有的工具看到密文,然后在通过编程实现我们利用工具的到的结果。
本周的一个要点就是理解能够处理 bitmap 数据。简单而言,bitmap就是图像像素信息的映射。
在本项目中,这个数据结构定义在了bitmap.h
中。copy.c
则提供了bitmap文件的基本处理方法。
在本题目中要进行修改的就是:triple.rgbtRed
、triple.rgbtGreen
、triple.rgbtBlue
三部分的信息。在处理bitmp文件时可以参考copy.c
,并对关键代码进行改动。
本题目的目的在于调整bitmap图像的尺寸,less
版本的只需要考虑等比例放大图像。
在本代码中,需要修改的是调整图像尺寸的有关数据。几个注意问题:
- 注意
padded
带来的影响,在计算时要保证计算准确。 - 题目给出的样例图像只有绿白两种颜色,这并不便于debug,可以手工改为不同的颜色。可以通过颜色确定自己在处理那个像素。
- 本题目的思虑和常见的“计算二维数组的地址”题型类似
more
版本的题目,则涉及到了缩小图像,因此用到了float
类型,但只需要注意好类型转换即可,和less
版本差异不大。
本题目要求从磁盘镜像文件(FAT)中,恢复JPEG图像。
值得注意的一点是,因为FAT文件系统的性质,信息是按照512字节的块存储在内存中的,因此我们需要一个缓冲区来按“块”读取文件内容。
彩蛋:在命令行中执行less card.raw
会看到惊喜!