1 00:00:00,000 --> 00:00:12,240 >> [音乐播放] 2 00:00:12,240 --> 00:00:15,870 >> ROB BOWDEN:你好,我是罗布,让我们 试试这个,看看尺寸。 3 00:00:15,870 --> 00:00:21,100 因此,我们再次要开始 该copy.c的基本上是一个副本, 4 00:00:21,100 --> 00:00:22,860 做一些修改。 5 00:00:22,860 --> 00:00:26,280 请注意,我们立刻看到了变化,其中 而不是检查,以查看是否 6 00:00:26,280 --> 00:00:30,440 ARGC不等于3,我们要检查 如果的argc不等于4,因为 7 00:00:30,440 --> 00:00:34,350 现在我们不只​​是走在INFILE 和输出文件,但我们也正在采取的 8 00:00:34,350 --> 00:00:38,980 n,它就是我们的量 通过缩放原始图像。 9 00:00:38,980 --> 00:00:44,340 一旦我们确信这一点,我们只要 使用atoi的转换n到一个整数。 10 00:00:44,340 --> 00:00:48,760 >> 所以,现在我们要创造一些 别名,只需要调用的argv 2 INFILE和 11 00:00:48,760 --> 00:00:54,240 argv的3 OUTFILE,因为argv的2和 argv的3不非常有帮助的名字。 12 00:00:54,240 --> 00:00:58,510 现在,我们要检查,以确保n是 的范围内,我们预计,所以 13 00:00:58,510 --> 00:01:02,910 规范规定,如果它小于或 等于零,或大于100,则 14 00:01:02,910 --> 00:01:08,580 那么这是一个无效的大小调整的因素, 我们应该警告用户。 15 00:01:08,580 --> 00:01:13,090 >> 一旦我们超越了这一切,我们可以 终于打开我们INFILE,我们需要 16 00:01:13,090 --> 00:01:16,270 错误检查以确保该 开放没有出于某种原因失败。 17 00:01:16,270 --> 00:01:19,860 我们还需要打开我们的输出文件,并 再次错误检查,以确保 18 00:01:19,860 --> 00:01:21,250 由于某种原因,没有失败。 19 00:01:21,250 --> 00:01:26,270 不过可以肯定的,如果的开幕 输出文件失败,我们需要关闭 20 00:01:26,270 --> 00:01:29,040 infile中,这是已经打开。 21 00:01:29,040 --> 00:01:33,690 >> 因此,假设没有失败,那么 方向走 - 就像在copy.c- - 22 00:01:33,690 --> 00:01:36,140 要阅读的标头 从infile中。 23 00:01:36,140 --> 00:01:40,130 我们要确保它是有效的 位图,但现在我们要做一些 24 00:01:40,130 --> 00:01:41,620 事情有点不同。 25 00:01:41,620 --> 00:01:44,870 因此,首先,我们要要 记得原来的宽度和高度 26 00:01:44,870 --> 00:01:48,290 infile中的,因为我们要 要改变它的输出文件。 27 00:01:48,290 --> 00:01:53,890 所以,现在记住,对于陌生的原因 bi.biheight,是负的,并 28 00:01:53,890 --> 00:01:58,670 因此实际高度,以积极的,我们 要取绝对值。 29 00:01:58,670 --> 00:02:02,580 >> 现在,该填充将是相同的 计算因为它是在copy.c, 30 00:02:02,580 --> 00:02:06,060 使用旧的宽度,而现在我们是 究竟要改 31 00:02:06,060 --> 00:02:07,320 什么在我们的头。 32 00:02:07,320 --> 00:02:11,200 所以我们要通过倍增我们的宽度 N,因为我们通过缩放宽度 33 00:02:11,200 --> 00:02:15,100 N,用n乘以高度,因为我们是 用n缩放,而现在我们有 34 00:02:15,100 --> 00:02:19,250 计算一个新的填充 基于新的宽度。 35 00:02:19,250 --> 00:02:21,840 >> 所以,现在我们需要改变一些 在我们的标题等领域。 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage被认为是本 在像素中的所有字节的大小 37 00:02:26,890 --> 00:02:28,520 和图象的填补处理。 38 00:02:28,520 --> 00:02:34,190 因此我们的单个行的大小 图像是RGB格式的三倍大小,大小 39 00:02:34,190 --> 00:02:39,430 单个像素的,时间的数 在一行像素,加上所述填补在 40 00:02:39,430 --> 00:02:40,910 该行的末尾。 41 00:02:40,910 --> 00:02:45,200 然后我们要乘上 我们高度得到的绝对值 42 00:02:45,200 --> 00:02:48,350 总字节数 中的图像数据。 43 00:02:48,350 --> 00:02:53,050 bf.bfSize仅仅是总数 在我们的图像数据的字节,所以 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage,加 我们的头的大小。 45 00:02:56,530 --> 00:02:59,850 因此,增加对位图文件的大小 头和位图信息大小 46 00:02:59,850 --> 00:03:00,800 头,确定。 47 00:03:00,800 --> 00:03:03,170 所以这就是我们所需要 改变我们的头。 48 00:03:03,170 --> 00:03:07,020 现在,我们将写入位图文件头 我们的输出文件,而我们的位图信息 49 00:03:07,020 --> 00:03:09,880 包头到我们OUTFILE,现在 我们已经准备好开始准备 50 00:03:09,880 --> 00:03:11,990 在实际的像素。 51 00:03:11,990 --> 00:03:15,720 >> 因此,我们要遍历 infile中的扫描线。 52 00:03:15,720 --> 00:03:17,730 因此,我们要遍历oldheight。 53 00:03:17,730 --> 00:03:20,830 这就是为什么我们需要记住的 原来的高度,才改变它 54 00:03:20,830 --> 00:03:23,040 并用n缩放它。 55 00:03:23,040 --> 00:03:27,810 现在,我们要读一个单一的 行infile中的成 56 00:03:27,810 --> 00:03:30,630 缓冲区大小oldwidth的。 57 00:03:30,630 --> 00:03:36,190 RGB的所以在这里,我们freading大小 三,一个像素,和老宽度 58 00:03:36,190 --> 00:03:39,760 他们从INFILE到我们的缓冲区。 59 00:03:39,760 --> 00:03:43,480 而这将是一个完整的 排在这个数组。 60 00:03:43,480 --> 00:03:50,390 所以,现在,我们要迭代N次 打印此行我们的输出文件n次。 61 00:03:50,390 --> 00:03:52,510 所以这就是这个循环在做什么。 62 00:03:52,510 --> 00:03:57,910 这个内层循环遍历 行本身,该数组,印刷 63 00:03:57,910 --> 00:04:00,710 数组n次中的每个像素。 64 00:04:00,710 --> 00:04:04,510 这样第零个元素被打印 n次,第一个元素是 65 00:04:04,510 --> 00:04:05,660 打印n次。 66 00:04:05,660 --> 00:04:10,820 这就是那种怎么样,我们要 横向扩展的输出文件,并 67 00:04:10,820 --> 00:04:13,390 这个循环,因为我们循环Ñ 次,是我们要如何 68 00:04:13,390 --> 00:04:15,580 垂直刻度。 69 00:04:15,580 --> 00:04:19,850 >> 到这里,我们看到,我们需要添加 填充在每一行的末尾。 70 00:04:19,850 --> 00:04:25,050 这就是为什么这个是for循环内 这是打印出n行的只是 71 00:04:25,050 --> 00:04:28,400 此一行从infile中。 72 00:04:28,400 --> 00:04:32,150 那么到这里,我将跳过 在infile中的填充,因为一旦 73 00:04:32,150 --> 00:04:34,560 我们正与的一排做 INFILE,我们不关心 74 00:04:34,560 --> 00:04:35,290 什么是填充了。 75 00:04:35,290 --> 00:04:37,110 我们只是想要得到的第二行。 76 00:04:37,110 --> 00:04:40,870 然后我们将环回,并尽 这再次用于第二行。 77 00:04:40,870 --> 00:04:44,406 >> 最后,当我们做完这些, 我们可以关闭INFILE,靠近 78 00:04:44,406 --> 00:04:47,430 outfile中,并返回 0,因为我们就大功告成了。 79 00:04:47,430 --> 00:04:50,330 >> 我的名字是罗布,这是调整大小。 80 00:04:50,330 --> 00:04:54,934 >> [音乐播放]