1 00:00:00,000 --> 00:00:10,210 >> [音樂播放] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA陳:讓我們一擊 事情並調整其大小。 3 00:00:13,320 --> 00:00:17,710 在調整大小時,用戶將通過在通過 在命令行中,位圖圖像的 4 00:00:17,710 --> 00:00:21,860 他們希望你擴展一個數字 他們還傳遞, 5 00:00:21,860 --> 00:00:23,770 在命令行中。 6 00:00:23,770 --> 00:00:24,690 我們怎麼做呢? 7 00:00:24,690 --> 00:00:28,270 >> 嗯,首先第一件事情,讓我們 打破這種分解成步驟。 8 00:00:28,270 --> 00:00:31,510 你將要打開的INFILE 他們給你,以及 9 00:00:31,510 --> 00:00:35,560 創建並打開輸出文件的 你要放 10 00:00:35,560 --> 00:00:38,020 調整後的影像英寸 11 00:00:38,020 --> 00:00:42,050 然後,因為你調整大小和 因為它是一個位圖,它一個頭,所以 12 00:00:42,050 --> 00:00:46,080 你要同時更新標題 信息的輸出文件, 13 00:00:46,080 --> 00:00:47,950 並編寫英寸 14 00:00:47,950 --> 00:00:51,850 然後,你要讀入 infile中的掃描線, 15 00:00:51,850 --> 00:00:56,890 逐像素,水平縮放 和寫入這些像素進 16 00:00:56,890 --> 00:01:00,910 輸出文件,指定 通過用戶的規模。 17 00:01:00,910 --> 00:01:03,940 >> 你要記住, 添加填充物是必要的。 18 00:01:03,940 --> 00:01:05,400 更多的後來。 19 00:01:05,400 --> 00:01:07,790 然後,還調整垂直。 20 00:01:07,790 --> 00:01:08,890 確定。 21 00:01:08,890 --> 00:01:13,280 因此,這將是多一點點 複雜得多,做到了誰,但 22 00:01:13,280 --> 00:01:18,310 什麼是相似的是,copy.c會, 再次,證明是非常有用的。 23 00:01:18,310 --> 00:01:23,160 請記住,copy.c打開一個文件, 更新了的頭信息 24 00:01:23,160 --> 00:01:28,250 輸出文件,然後讀入掃描線, 逐個像素,寫入每個像素 25 00:01:28,250 --> 00:01:30,510 到輸出文件中的掃描線。 26 00:01:30,510 --> 00:01:37,040 >> 所以,再一次,你的第一個步驟可能可能 是CP,copy.c,resize.c 27 00:01:37,040 --> 00:01:40,560 到PSET5目錄。 28 00:01:40,560 --> 00:01:43,920 但請記住,您複製它之前, 確保你了解 29 00:01:43,920 --> 00:01:46,600 copy.c得很徹底。 30 00:01:46,600 --> 00:01:47,620 確定。 31 00:01:47,620 --> 00:01:49,880 >> 因此,讓我們打開一個文件。 32 00:01:49,880 --> 00:01:50,870 你知道該怎麼做。 33 00:01:50,870 --> 00:01:52,600 我要離開這個給你。 34 00:01:52,600 --> 00:01:56,050 接著,更新的標題信息 為輸出文件。 35 00:01:56,050 --> 00:01:59,240 因為我們有一個新的位圖, 我們有新的頭信息。 36 00:01:59,240 --> 00:02:00,970 什麼改變嗎? 37 00:02:00,970 --> 00:02:06,000 好了,文件的大小都不會改變 因為我們將有更多的 38 00:02:06,000 --> 00:02:07,900 像素比以前。 39 00:02:07,900 --> 00:02:11,060 圖像尺寸為,因此,也 要改變,因為是 40 00:02:11,060 --> 00:02:13,050 寬度和高度。 41 00:02:13,050 --> 00:02:17,180 >> 那麼哪些變量是那些,到底是什麼? 42 00:02:17,180 --> 00:02:20,960 好吧,如果你直視頭 信息,你看到有 43 00:02:20,960 --> 00:02:25,640 成員biSizeImage,它代表總 以字節為單位的圖像的大小, 44 00:02:25,640 --> 00:02:28,340 包括像素和填充。 45 00:02:28,340 --> 00:02:32,520 biWidth是圖像的寬度 以像素為單位減去填充。 46 00:02:32,520 --> 00:02:35,580 biHeight是高度 圖像中的像素。 47 00:02:35,580 --> 00:02:39,200 等等這些都包含在 結構BITMAPFILEHEADER和 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER。 49 00:02:40,390 --> 00:02:45,300 你可以分辨出哪一個是由 要在bmp.h和看 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER結構和看 其中的變量被列在那裡。 51 00:02:49,670 --> 00:02:54,700 >> 因此,要更新outfiles頭 信息,你會想 52 00:02:54,700 --> 00:02:57,025 改變的那些價值觀 高度和寬度。 53 00:02:57,025 --> 00:03:00,570 但機會是,你可能需要一些 的infile中的報頭信息 54 00:03:00,570 --> 00:03:03,670 後來,所以最好是保持兩者的軌道。 55 00:03:03,670 --> 00:03:07,770 但很清楚你的變量 名稱,以便您不小心 56 00:03:07,770 --> 00:03:12,490 寫在不正確的值 為輸出文件的標頭。 57 00:03:12,490 --> 00:03:16,160 >> 所以,現在讓我們來讀入 該掃描線的像素逐個像素。 58 00:03:16,160 --> 00:03:20,210 再次,我們要談談我們的信賴 文件I / O庫,並期待在 59 00:03:20,210 --> 00:03:22,100 是fread函數。 60 00:03:22,100 --> 00:03:26,150 用fread接受一個指向結構的指針 將包含字節 61 00:03:26,150 --> 00:03:30,130 您正在閱讀的,每一個的大小 元素,你正在閱讀 - 62 00:03:30,130 --> 00:03:34,410 再次,的sizeof將是有用 這裡起作用,對數 63 00:03:34,410 --> 00:03:38,820 的尺寸,大小的元素,你是 讀取中,然後最終的 64 00:03:38,820 --> 00:03:41,310 inpointer,該文件是 您正在閱讀的。 65 00:03:41,310 --> 00:03:46,770 所以,你正在做許多元素 從inpointer大小和 66 00:03:46,770 --> 00:03:49,040 把它們轉換成數據。 67 00:03:49,040 --> 00:03:51,695 >> 現在,是時候調整水平。 68 00:03:51,695 --> 00:03:56,880 如果n等於2,則對每一個像素中 infile中,我們將它寫 69 00:03:56,880 --> 00:04:00,870 兩次在輸出文件。 70 00:04:00,870 --> 00:04:02,210 我們如何寫文件? 71 00:04:02,210 --> 00:04:06,400 那麼,我們有fwrite函數,所以 我們已經採取了指針的struct 72 00:04:06,400 --> 00:04:10,170 包含你的字節 從編寫,然後我們通過在 73 00:04:10,170 --> 00:04:14,430 大小,數量,以及輸出端,其中 你將要編寫。 74 00:04:14,430 --> 00:04:19,200 然後以重複的過程,將 能夠簡單迭代的for循環。 75 00:04:19,200 --> 00:04:21,740 >> 但我們需要記住 添加填充英寸 76 00:04:21,740 --> 00:04:26,040 填充的概念是,好了, 每個像素是3叮咬,但 77 00:04:26,040 --> 00:04:28,940 每個掃描線必須大小 是4字節的倍數。 78 00:04:28,940 --> 00:04:33,660 因此,如果像素的數目不是 4的倍數,我們需要添加一些 79 00:04:33,660 --> 00:04:36,630 填充,這僅僅是零。 80 00:04:36,630 --> 00:04:42,130 現在,不像做到了誰,而不像 副本,然後INFILE圖像和 81 00:04:42,130 --> 00:04:44,370 輸出文件的文件有不同的有 不同的填充,因為他們是 82 00:04:44,370 --> 00:04:46,360 不同的寬度。 83 00:04:46,360 --> 00:04:46,690 >> 確定。 84 00:04:46,690 --> 00:04:51,050 因此,也許一個公式會 在這裡派上用場。 85 00:04:51,050 --> 00:04:55,120 我將它留給你找到它了,但 告訴你,寫填充, 86 00:04:55,120 --> 00:04:59,360 好了,它只是一個簡單的fputc函數, 通過在字符 87 00:04:59,360 --> 00:05:02,200 你想寫點什麼,然後 文件指針,你 88 00:05:02,200 --> 00:05:04,280 要寫入。 89 00:05:04,280 --> 00:05:08,670 所以,現在我們已經水平調整大小, 然後使用填充, 90 00:05:08,670 --> 00:05:12,030 記住,你需要將你的文件 位置指示器,因為你 91 00:05:12,030 --> 00:05:14,480 不能用fread到填充。 92 00:05:14,480 --> 00:05:18,230 所以,你要確保你的文件 在INFILE位置指示器 93 00:05:18,230 --> 00:05:19,980 是在正確的點。 94 00:05:19,980 --> 00:05:23,970 因為我們也想 垂直調整大小。 95 00:05:23,970 --> 00:05:27,090 我們不能只是它舒展水平, 因為每一行的需求 96 00:05:27,090 --> 00:05:30,370 要複製n次。 97 00:05:30,370 --> 00:05:33,050 >> 目前,有幾種不同的 方法可以做到這一點。 98 00:05:33,050 --> 00:05:39,010 因此,人們,我們可以使用一個重寫的方法,在 我們記得所有的像素 99 00:05:39,010 --> 00:05:42,840 的一個給定行中的陣列,並且 那麼我們該數組寫入作為 100 00:05:42,840 --> 00:05:44,730 根據需要多次。 101 00:05:44,730 --> 00:05:49,530 或有重新複製方法,其中, 讀一行在INFILE後 102 00:05:49,530 --> 00:05:53,530 然後編寫到輸出文件, 添加填充,我們FSEEK 103 00:05:53,530 --> 00:05:57,250 回到原來的行的開始, 然後重複水平 104 00:05:57,250 --> 00:05:58,710 從那裡調整大小。 105 00:05:58,710 --> 00:06:02,280 不論採用何種方法,雖然,你會 要重複每一個像素 106 00:06:02,280 --> 00:06:06,370 n次,每排是 重複n次為好。 107 00:06:06,370 --> 00:06:09,160 >> 就這樣,你就會有位圖 比生命更大。 108 00:06:09,160 --> 00:06:11,760 我的名字是Zamyla,這是CS50。 109 00:06:11,760 --> 00:06:19,542