Skip to content

Latest commit

 

History

History
38 lines (21 loc) · 1.99 KB

week-3-walkthrough.md

File metadata and controls

38 lines (21 loc) · 1.99 KB

Week 3 Walkthrough

Leo Tsui 供稿

Leo Tsui 整理

Whodunit

这道作业题目首先的一个要求就是阅读,理解位图的数据结构,并阅读'copy.c'和'bmp.h'相关代码,并作修改

针对知道题目而言,一个要点是要知道密文藏在什么图片的地方(通道),分清哪些东西是噪音,实用的解题工具除了题目中提到的红色塑料片,还有就是 Photoshop。可以先通过现有的工具看到密文,然后在通过编程实现我们利用工具的到的结果。

Bitmaps 数据结构

本周的一个要点就是理解能够处理 bitmap 数据。简单而言,bitmap就是图像像素信息的映射。

在本项目中,这个数据结构定义在了bitmap.h中。copy.c则提供了bitmap文件的基本处理方法。

在本题目中要进行修改的就是:triple.rgbtRedtriple.rgbtGreentriple.rgbtBlue三部分的信息。在处理bitmp文件时可以参考copy.c,并对关键代码进行改动。

Resize

本题目的目的在于调整bitmap图像的尺寸,less版本的只需要考虑等比例放大图像。

在本代码中,需要修改的是调整图像尺寸的有关数据。几个注意问题:

  • 注意padded带来的影响,在计算时要保证计算准确。
  • 题目给出的样例图像只有绿白两种颜色,这并不便于debug,可以手工改为不同的颜色。可以通过颜色确定自己在处理那个像素。
  • 本题目的思虑和常见的“计算二维数组的地址”题型类似

more版本的题目,则涉及到了缩小图像,因此用到了float类型,但只需要注意好类型转换即可,和less版本差异不大。

Recover

本题目要求从磁盘镜像文件(FAT)中,恢复JPEG图像。

值得注意的一点是,因为FAT文件系统的性质,信息是按照512字节的块存储在内存中的,因此我们需要一个缓冲区来按“块”读取文件内容。

彩蛋:在命令行中执行less card.raw会看到惊喜!