1 00:00:00,000 --> 00:00:12,240 >> [Музика грає] 2 00:00:12,240 --> 00:00:15,870 >> ROB Боуден: Привіт, я Роб, давайте спробуйте це на розмір. 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 агдс не рівні 3, ми хочемо перевірити якщо агдс не дорівнює 4, так як 7 00:00:30,440 --> 00:00:34,350 тепер ми не просто приймати в INFILE і вихідний файл, але ми також беручи до 8 00:00:34,350 --> 00:00:38,980 п, що це сума, яку ми масштабування вихідне зображення на. 9 00:00:38,980 --> 00:00:44,340 Як тільки ми в цьому впевнені, ми можемо просто конвертувати п до цілого числа, використовуючи atoi. 10 00:00:44,340 --> 00:00:48,760 >> Отже, тепер ми збираємося створити деякі псевдоніми, просто зателефонуйте агду 2 INFILE, і 11 00:00:48,760 --> 00:00:54,240 агду 3 вихідний_файл, тому агду 2 і агду 3 не надто корисним імена. 12 00:00:54,240 --> 00:00:58,510 Тепер ми хочемо перевірити, щоб переконатися, п в межах ми очікуємо, так 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 Ми також повинні відкрити наш OUTFILE, і знову помилка перевірити, щоб переконатися, що 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 вхідний_файл, який був вже відкритий. 21 00:01:29,040 --> 00:01:33,690 >> Так, якщо припустити, що не забув, то we're - так само, як в 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, тому що ми збираємося змінюється його для OUTFILE. 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 Так що ми збираємося, щоб помножити нашу ширину п, так як ми масштабування ширину 33 00:02:11,200 --> 00:02:15,100 п, помножити висоту на п, так як ми масштабування на п, і тепер у нас є 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 і масштабувати його на п. 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 Так от, ми freading розмір RGB потрійний, один піксель, і старий ширина 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 Так що тепер, ми хочемо перебрати п раз, щоб роздрукувати цю рядок в наш вихідний файл п раз. 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 кожен піксель в масиві п раз. 64 00:04:00,710 --> 00:04:04,510 Таким чином, нульова елемент друкується п раз, перший елемент в даний час 65 00:04:04,510 --> 00:04:05,660 надруковані п раз. 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 Ось чому це всередині для петлі який роздрукувавши п рядків просто 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 ми закінчили з одним рядом вхідний_файл, ми не дбаємо про 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 вихідний_файл, і повернення 0, тому що ми зробили. 79 00:04:47,430 --> 00:04:50,330 >> Мене звуть Боб, і це була зміна розміру. 80 00:04:50,330 --> 00:04:54,934 >> [Музика грає]