>> [音乐播放]
>> ROB BOWDEN：你好，我是罗布，让我们 试试这个，看看尺寸。
因此，我们再次要开始 该copy.c的基本上是一个副本，
做一些修改。
请注意，我们立刻看到了变化，其中 而不是检查，以查看是否
ARGC不等于3，我们要检查 如果的argc不等于4，因为
现在我们不只​​是走在INFILE 和输出文件，但我们也正在采取的
n，它就是我们的量 通过缩放原始图像。
一旦我们确信这一点，我们只要 使用atoi的转换n到一个整数。
>> 所以，现在我们要创造一些 别名，只需要调用的argv 2 INFILE和
argv的3 OUTFILE，因为argv的2和 argv的3不非常有帮助的名字。
现在，我们要检查，以确保n是 的范围内，我们预计，所以
规范规定，如果它小于或 等于零，或大于100，则
那么这是一个无效的大小调整的因素， 我们应该警告用户。
>> 一旦我们超越了这一切，我们可以 终于打开我们INFILE，我们需要
错误检查以确保该 开放没有出于某种原因失败。
我们还需要打开我们的输出文件，并 再次错误检查，以确保
由于某种原因，没有失败。
不过可以肯定的，如果的开幕 输出文件失败，我们需要关闭
infile中，这是已经打开。
>> 因此，假设没有失败，那么 方向走 - 就像在copy.c- -
要阅读的标头 从infile中。
我们要确保它是有效的 位图，但现在我们要做一些
事情有点不同。
因此，首先，我们要要 记得原来的宽度和高度
infile中的，因为我们要 要改变它的输出文件。
所以，现在记住，对于陌生的原因 bi.biheight，是负的，并
因此实际高度，以积极的，我们 要取绝对值。
>> 现在，该填充将是相同的 计算因为它是在copy.c，
使用旧的宽度，而现在我们是 究竟要改
什么在我们的头。
所以我们要通过倍增我们的宽度 N，因为我们通过缩放宽度
N，用n乘以高度，因为我们是 用n缩放，而现在我们有
计算一个新的填充 基于新的宽度。
>> 所以，现在我们需要改变一些 在我们的标题等领域。
Bi.biSizeImage被认为是本 在像素中的所有字节的大小
和图象的填补处理。
因此我们的单个行的大小 图像是RGB格式的三倍大小，大小
单个像素的，时间的数 在一行像素，加上所述填补在
该行的末尾。
然后我们要乘上 我们高度得到的绝对值
总字节数 中的图像数据。
bf.bfSize仅仅是总数 在我们的图像数据的字节，所以
bi.biSizeImage，加 我们的头的大小。
因此，增加对位图文件的大小 头和位图信息大小
头，确定。
所以这就是我们所需要 改变我们的头。
现在，我们将写入位图文件头 我们的输出文件，而我们的位图信息
包头到我们OUTFILE，现在 我们已经准备好开始准备
在实际的像素。
>> 因此，我们要遍历 infile中的扫描线。
因此，我们要遍历oldheight。
这就是为什么我们需要记住的 原来的高度，才改变它
并用n缩放它。
现在，我们要读一个单一的 行infile中的成
缓冲区大小oldwidth的。
RGB的所以在这里，我们freading大小 三，一个像素，和老宽度
他们从INFILE到我们的缓冲区。
而这将是一个完整的 排在这个数组。
所以，现在，我们要迭代N次 打印此行我们的输出文件n次。
所以这就是这个循环在做什么。
这个内层循环遍历 行本身，该数组，印刷
数组n次中的每个像素。
这样第零个元素被打印 n次，第一个元素是
打印n次。
这就是那种怎么样，我们要 横向扩展的输出文件，并
这个循环，因为我们循环Ñ 次，是我们要如何
垂直刻度。
>> 到这里，我们看到，我们需要添加 填充在每一行的末尾。
这就是为什么这个是for循环内 这是打印出n行的只是
此一行从infile中。
那么到这里，我将跳过 在infile中的填充，因为一旦
我们正与的一排做 INFILE，我们不关心
什么是填充了。
我们只是想要得到的第二行。
然后我们将环回，并尽 这再次用于第二行。
>> 最后，当我们做完这些， 我们可以关闭INFILE，靠近
outfile中，并返回 0，因为我们就大功告成了。
>> 我的名字是罗布，这是调整大小。
>> [音乐播放]