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 >> [音樂播放]