>> [Музика грає]
>> ROB Боуден: Привіт, я Роб, давайте спробуйте це на розмір.
Таким чином, ми знову почнемо з в основному копія copy.c і
зробити кілька змін.
Примітка відразу ми бачимо зміни, де замість перевірки, щоб переконатися,
агдс не рівні 3, ми хочемо перевірити якщо агдс не дорівнює 4, так як
тепер ми не просто приймати в INFILE і вихідний файл, але ми також беручи до
п, що це сума, яку ми масштабування вихідне зображення на.
Як тільки ми в цьому впевнені, ми можемо просто конвертувати п до цілого числа, використовуючи atoi.
>> Отже, тепер ми збираємося створити деякі псевдоніми, просто зателефонуйте агду 2 INFILE, і
агду 3 вихідний_файл, тому агду 2 і агду 3 не надто корисним імена.
Тепер ми хочемо перевірити, щоб переконатися, п в межах ми очікуємо, так
спец вказує, що, якщо це менше або дорівнюють нулю, або більше, ніж 100,
то це інвалід фактором зміни розміру, і ми повинні попередити користувача про те, що.
>> Після того, як ми за все це, ми можемо нарешті, відкрити наш INFILE, і ми повинні
до помилок перевірити, щоб переконатися, що Відкриття не забув з деяких причин.
Ми також повинні відкрити наш OUTFILE, і знову помилка перевірити, щоб переконатися, що
не забув з деяких причин.
Але будьте впевнені, якщо відкриття вихідний_файл вдалося, що ми повинні закрити
вхідний_файл, який був вже відкритий.
>> Так, якщо припустити, що не забув, то we're - так само, як в copy.c--
читатиме в заголовку від INFILE.
Ми збираємося, щоб переконатися, що це діє растрові, але тепер ми збираємося зробити деякі
речі трохи по-іншому.
Отже, спочатку ми збираємося хочете пам'ятати оригінальний ширину і висоту
з INFILE, тому що ми збираємося змінюється його для OUTFILE.
Так що тепер, пам'ятайте, що для дивних причин bi.biheight, має від'ємне значення, і
тому фактична висота, на позитивний, ми хочу взяти абсолютне значення.
>> Тепер, прокладка буде те ж саме Розрахунок, як це було в copy.c,
використовуючи старий ширину, і тепер ми насправді відбувається, щоб змінити
Що в нашому заголовку.
Так що ми збираємося, щоб помножити нашу ширину п, так як ми масштабування ширину
п, помножити висоту на п, так як ми масштабування на п, і тепер у нас є
розрахунок для нового заповнення на основі нової ширині.
>> Так що тепер ми повинні змінити деякі Інші поля в нашій заголовку.
Bi.biSizeImage, як передбачається, розмір усіх байтів в пікселях
і оббивка зображення.
І таким чином, розмір одного рядка нашої зображення розмір RGB потрійний, розмір
з одного пікселя, разів число пікселів в рядку, плюс оббивка в
кінець рядка.
А потім ми збираємося помножте це на абсолютне значення нашої висоти, щоб отримати
Загальне число байтів в даних зображення.
bf.bfSize просто загальне число байтів в наших даних зображення, тому
bi.biSizeImage, плюс Розмір наших заголовків.
Таким чином, додавання від розміру графічного файлу заголовок, і розмір растрового інформація
заголовок, ОК.
Так ось все, що потрібно змінити в наших заголовків.
Тепер ми напишемо заголовок растровий файл в наш вихідний файл, і нашою інформацією реєстрового
заголовок до нашої OUTFILE, і тепер ми готові почати рухатися
поверх фактичних пікселях.
>> Тому ми хочемо, щоб перебрати рядків розгортки в INFILE в.
Тому ми хочемо, щоб перебрати oldheight.
Ось чому ми повинні пам'ятати, Первісна висота, перш ніж ми його змінити
і масштабувати його на п.
Тепер ми збираємося, щоб прочитати один рядок INFILE в
буфер розміром oldwidth.
Так от, ми freading розмір RGB потрійний, один піксель, і старий ширина
їм з INFILE в нашій буфера.
І це буде ціла гребти в цьому масиві.
Так що тепер, ми хочемо перебрати п раз, щоб роздрукувати цю рядок в наш вихідний файл п раз.
І так це те, що цей цикл робить.
Це внутрішній цикл ітерації гребти себе, по масиву, друку
кожен піксель в масиві п раз.
Таким чином, нульова елемент друкується п раз, перший елемент в даний час
надруковані п раз.
І це свого роду як ми збираємося горизонтально масштабувати у вихідний файл, і
цей цикл, так як ми пробігаємо п раз, то, як ми збираємося
вертикально масштаб.
>> Тут, внизу, ми бачимо, що нам потрібно додати заповнення в кінці кожного рядка.
Ось чому це всередині для петлі який роздрукувавши п рядків просто
це один рядок з INFILE.
Тоді тут, я збираюся пропустити оббивка в INFILE, оскільки після
ми закінчили з одним рядом вхідний_файл, ми не дбаємо про
що оббивка була.
Ми просто хочемо, щоб дістатися до другого рядка.
А потім ми будемо петля назад і зробити все це знову для другого ряду.
>> Нарешті, коли ми закінчимо з усім, що, ми можемо закрити INFILE, недалеко
вихідний_файл, і повернення 0, тому що ми зробили.
>> Мене звуть Боб, і це була зміна розміру.
>> [Музика грає]