[音乐播放] ROB BOWDEN:你好。 我抢,让大小 了这个问题。 所以,我们要开始copy.c为 一个模板,但我们要成为 使得相当多的变化。 现在我们看到,我们会立即作出 改变的地方我们不再检查 我们RXC不等于3,但现在 我们正在检查RC不等于4。 因为我们也希望包括在 除了在文件和签出文件 参数,F这将是这 因素,使我们正在扩展。 所以一旦我们确定的是,我们要 用s扫描f,将字符串转换 argv1为float。 而我们将要存储 在因素。 这种额外的字符是确保 我们实际上并没有进入 像1.4 ABC 在命令行中。 现在,我们要创建一些别名 因为RV2和RV3不 非常有帮助的名字。 我们,而是要打电话 他们在文件和出文件。 现在,我们要确保 我们的因素是实际有效的。 因此,如果因子是小于或等于 零或大于100,则按照 规范,我们应该拒绝 这个因素。 当我们确定它的好,现在我们可以 打开n个文件,我们必须做出 确保它被成功打开。 如果没有,那将返回null。 我们要开出的文件。 再次,我们要进行检查,以 确保它的成功开业。 如果它没有成功打开,然后 我们还需要确保关闭 n个文件,该文件最初成功 打开,否则我们有一个 内存泄漏。 所以,现在我们要读取的位图 文件头和位图信息 从n个文件头。 我们将确保该 n文件是一个有效的位图。 确定。 所以,现在我们要开始 做一些改变。 所以,因为我们将要改变 的东西,我们首先要记住的 老宽度n个文件。 我们要记住的老填充 以同样方法计算n个文件 从copy.c. 现在我们要改变 位图信息头。 所以我们既乘以宽度 而且由于采用因子高度 这就是我们扩展了。 我们将确定 通过该文件的新填充 使用新的宽度。 而且我们要确定新 使用的数量的图像的大小 在其中将要单列字节 是在该行中的像素的数目 一个像素的次大小加上 填充字节在最后数 该行,并乘以所有 通过我们有行数。 所以这是字节数 我们在我们的图像数据。 Bf.Bfsize现在将是数 在我们的形象公测字节加上 我们的头的大小。 位图文件头,这样加上大小 和位图信息头的大小。 确定。 所以这是它为我们的头。 我们可以写入文件头和 信息标题给我们出 文件,我们是很好的。 现在是时候开始实际 写像素 数据到输出文件中。 我们要声明大小的缓冲区 老宽的RGB三元组,我们很 要声明一个变量叫 排麻木了,这是我们要 初始设定为等于负1。 我们会看到,我们将使用 即,为了保持什么轨道 我们目前已经加载的行 到此缓冲区中。 确定。 所以现在不像标准版, 而不是迭代的中 文件中,我们将遍历每个 行中的out文件,并找出 我们希望它在文件中的行 把这个排在了所有的文件。 所以遍历所有行中的列 使用新的高度文件,我们首先 要确定在旧的行 文件中,我们要使用,这我们 要做到通过采取这种电流 排除以系数。 所以,那将会给我们的行 在我们想要的旧文件。 所以,现在如果排麻木不等于老Y, 我们将要读的行 我们希望为我们的当前行缓冲区。 那么我们如何做到这一点? 首先,我们要弄清楚 开头的那行的位置 原始文件。 所以该位置将是 过去我们所有的头文件和 现在过去老y行。 所以多少字节 在单个行? 同样,RGB的大小三旧时代 宽度加上旧的填充,所以这是 在单行中的字节数。 我们要跳过老y行。 所以我们要到f寻求和我们 用seek设置为从一开始 开头的文件。 我们打​​算到f寻求这个位置 在文件中,把我们的 开始我们想要的行 阅读到我们的缓冲区。 我们要设置的行 麻木等于旧年。 所以,现在如果我们回圈,我们希望 使用我们出文件中的此同一行, 那么我们不会阅读 它再一次不必要的。 所以真的,行的是麻木 只是一个优化。 最后,我们要读入 当前行老宽​​度RGB三元组 我们希望从原始文件。 所以现在当前行中包含的像素从 我们要原始文件 写入到输出文件中。 所以,现在,就像上面的,而不是 遍历旧文件,我们需要 它遍历新的文件行。 而不是遍历那么这里,所有的 老像素,在当前行, 我们要遍历所有的 在我们这个新的文件像素 特定的行。 我们为什么要那么做? 因为我们在这里看到,我们不是 其实不一定使用所有的 像素中的原始文件。 因为如果我们要萎缩,我们可能 其实想跳过的像素。 而且我们看到,这一点 - x除以系数划分 - 密切反映在这里,我们说ÿ 通过因子分为弄清楚, 老Y-th行对应于 第y行的这个新文件。 现在,我们将要编写所有 从旧行这些像素 进入我们的新行。 一旦我们做到了这一点,我们需要公正 把填充在我们行的结尾 我们会回送和持续 所有在我们的新文件中的行。 最后,我们需要关闭我们的老 文件,关闭我们的新文件,并交回 零,因为一切正常。 我的名字是罗布,这是课间休息。 [音乐播放]