>> [音乐播放]
>> ZAMYLA陈：让我们一击 事情并调整其大小。
在调整大小时，用户​​将通过在通过 在命令行中，位图图像的
他们希望你扩展一个数字 他们还传递，
在命令行中。
我们怎么做呢？
>> 嗯，首先第一件事情，让我们 打破这种分解成步骤。
你将要打开的INFILE 他们给你，以及
创建并打开输出文件的 你要放
调整后的影像英寸
然后，因为你调整大小和 因为它是一个位图，它一个头，所以
你要同时更新标题 信息的输出文件，
并编写英寸
然后，你要读入 infile中的扫描线，
逐像素，水平缩放 和写入这些像素进
输出文件，指定 通过用户的规模。
>> 你要记住， 添加填充物是必要的。
更多的后来。
然后，还调整垂直。
确定。
因此，这将是多一点点 复杂得多，做到了谁，但
什么是相似的是，copy.c会， 再次，证明是非常有用的。
请记住，copy.c打开一个文件， 更新了的头信息
输出文件，然后读入扫描线， 逐个像素，写入每个像素
到输出文件中的扫描线。
>> 所以，再一次，你的第一个步骤可能可能 是CP，copy.c，resize.c
到PSET5目录。
但请记住，您复制它之前， 确保你了解
copy.c得很彻底。
确定。
>> 因此，让我们打开一个文件。
你知道该怎么做。
我要离开这个给你。
接着，更新的标题信息 为输出文件。
因为我们有一个新的位图， 我们有新的头信息。
什么改变吗？
好了，文件的大小都不会改变 因为我们将有更多的
像素比以前。
图像尺寸为，因此，也 要改变，因为是
宽度和高度。
>> 那么哪些变量是那些，到底是什么？
好吧，如果你直视头 信息，你看到有
成员biSizeImage，它代表总 以字节为单位的图像的大小，
包括像素和填充。
biWidth是图像的宽度 以像素为单位减去填充。
biHeight是高度 图像中的像素。
等等这些都包含在 结构BITMAPFILEHEADER和
BITMAPINFOHEADER。
你可以分辨出哪一个是由 要在bmp.h和看
BITMAPINFOHEADER结构和看 其中的变量被列在那里。
>> 因此，要更新outfiles头 信息，你会想
改变的那些价值观 高度和宽度。
但机会是，你可能需要一些 的infile中的报头信息
后来，所以最好是保持两者的轨道。
但很清楚你的变量 名称，以便您不小心
写在不正确的值 为输出文件的标头。
>> 所以，现在让我们来读入 该扫描线的像素逐个像素。
再次，我们要谈谈我们的信赖 文件I / O库，并期待在
是fread函数。
用fread接受一个指向结构的指针 将包含字节
您正在阅读的，每一个的大小 元素，你正在阅读 -
再次，的sizeof将是有用 这里起作用，对数
的尺寸，大小的元素，你是 读取中，然后最终的
inpointer，该文件是 您正在阅读的。
所以，你正在做许多元素 从inpointer大小和
把它们转换成数据。
>> 现在，是时候调整水平。
如果n等于2，则对每一个像素中 infile中，我们将它写
两次在输出文件。
我们如何写文件？
那么，我们有fwrite函数，所以 我们已经采取了指针的struct
包含你的字节 从编写，然后我们通过在
大小，数量，以及输出端，其中 你将要编写。
然后以重复的过程，将 能够简单迭代的for循环。
>> 但我们需要记住 添加填充英寸
填充的概念是，好了， 每个像素是3叮咬，但
每个扫描线必须大小 是4字节的倍数。
因此，如果象素的数目不是 4的倍数，我们需要添加一些
填充，这仅仅是零。
现在，不像做到了谁，而不像 副本，然后INFILE图像和
输出文件的文件有不同的有 不同的填充，因为他们是
不同的宽度。
>> 确定。
因此，也许一个公式会 在这里派上用场。
我将它留给你找到它了，但 告诉你，写填充，
好了，它只是一个简单的fputc函数， 通过在字符
你想写点什么，然后 文件指针，你
要写入。
所以，现在我们已经水平调整大小， 然后使用填充，
记住，你需要将你的文件 位置指示器，因为你
不能用fread到填充。
所以，你要确保你的文件 在INFILE位置指示器
是在正确的点。
因为我们也想 垂直调整大小。
我们不能只是它舒展水平， 因为每一行的需求
要复制n次。
>> 目前，有几种不同的 方法可以做到这一点。
因此，人们，我们可以使用一个重写的方法，在 我们记得所有的像素
的一个给定行中的阵列，并且 那么我们该数组写入作为
根据需要多次。
或有重新复制方法，其中， 读一行在​​INFILE后
然后编写到输出文件， 添加填充，我们FSEEK
回到原来的行的开始， 然后重复水平
从那里调整大小。
不论采用何种方法，虽然，你会 要重复每一个像素
n次，每排是 重复n次为好。
>> 就这样，你就会有位图 比生命更大。
我的名字是Zamyla，这是CS50。