[Музика грає] ROB BOWDEN: Привет. Я Роб і давайте розмір до цієї проблеми. Так що ми збираємося почати з copy.c як шаблон, але ми збираємося бути робить досить багато змін. Тепер ми бачимо, що ми відразу ж робить не змінити, де ми більше не перевіряти для нашого RXC не дорівнює 3, але тепер ми перевіряємо RC не дорівнює 4. Оскільки ми також хочемо включити в додаток до у файл і з файлів аргументи, е, який буде це коефіцієнт, на який ми масштабування. Тому, як тільки ми в цьому впевнені, ми хочемо використовувати з сканування е перетворити рядок argv1 до поплавця. І ми збираємося зберігати , Що в фактор. Цей додатковий символ переконавшись що ми не насправді введення щось на зразок 1.4 ABC в командному рядку. Тепер ми збираємося створити кілька псевдонімів з RV2 і RV3 НЕ дуже корисні імена. Ми, навпаки, буду називати їх у файл і з файлу. Тепер ми збираємося, щоб переконатися, що наша фактором було насправді діє. Таким чином, якщо коефіцієнт менше або дорівнює нуля або більше 100, то згідно специфікація, ми повинні відкинути цей фактор. Коли ми впевнені, що це добре, тепер ми можемо відкрити файл н, і ми повинні зробити упевнений, що це був успішно відкритий. Якщо цього не сталося, що повернеться порожнім. Ми збираємося відкрити файл з положення. І знову ж, ми хочемо перевірити, щоб упевнений, що це успішно відкритий. І якщо це не успішно відкрити, то ми також повинні бути впевнені, щоб закрити файл н який спочатку успішно відкрив, інакше у нас є витік пам'яті. Так що тепер ми збираємося читати в бітової заголовок файлу і растрові інформації заголовок з файлу н. Ми збираємося, щоб переконатися, що н файл був дійсний растровий. ОК. Так що тепер ми збираємося почати внесення деяких змін. Так, тому що ми збираємося бути зміни речі, ми спочатку хочемо пам'ятати старий ширина файлі н. Ми хочемо згадати стару відступ файл н, використовуючи той же розрахунок від copy.c. І тепер ми збираємося змінити растровое інформації заголовка. І тому ми множення і ширину а висота фактором, оскільки це те, що ми масштабування по. Ми збираємося, щоб визначити, Нова оббивка файлу по з використанням нової ширини. І ми збираємося, щоб визначити новий розмір зображення, використовуючи ряд байт в один ряд, який збирається -Число пікселів в цьому рядку разів розмір пікселя плюс Кількість байтів заповнення наприкінці з цього рядка, і множачи все, що за кількістю рядків, які ми маємо. Так от кількість байт ми маємо в наших даних зображення. Bf.Bfsize тепер буде число байтів в нашій зображення бета плюс Розмір наших заголовків. Так плюс розмір заголовка реєстрового файлу і розмір растрового інформація заголовка. ОК. Так ось воно що для наших заголовків. Ми можемо записати файл голову і Інформація заголовка в наш вихід файл, і ми добре. Тепер прийшов час, щоб почати насправді написання піксель дані у файл OUT. Ми збираємося оголосити буфер розміром старий ширина гамма трійок, і ми збирається оголосити змінну рядок оніміли, що ми збираємося спочатку встановлюється рівною негативною 1. Ми побачимо, що ми збираємося використовувати що для того, щоб відстежувати, що рядок в даний час ми завантажили в цей буфер. ОК. Так що тепер, на відміну від стандартної версії, замість ітерації в початковій файл, ми збираємося для перебору кожного рядок в файлові і з'ясувати, який рядок у файлі в ми хочемо місце в цьому ряду у файлі поза. Так перебирає всі рядки у вихід файл за допомогою нового висоту, ми спочатку визначатиме рядок у старому подати ми збираємося використовувати, які ми збираюся зробити, приймаючи цей струм поділене на фактор ряд. Так що відбувається, щоб дати нам рядок в старому файлі, який ми хочемо. Так що тепер, якщо рядок оніміли НЕ дорівнює старий у, ми збираємося повинні прочитати рядок що ми хочемо в нашій CUR буфера рядка. Так як ми збираємося це зробити? По-перше, ми збираємося з'ясувати, позиція, яка починається цей рядок в вихідний файл. Так що позиція буде мимо всіх наших заголовків і Тепер останні старі у рядків. І так, скільки байт знаходяться в одному рядку? Знову ж, розмір RGB потрійні раз старий ширина плюс старий оббивка, так от Число байтів в одному рядку. І ми хочемо, щоб пропустити повз старих Y рядків. Таким чином, ми збираємося е шукати і ми використовуючи шукати безліч почати з початок файлу. Ми збираємося е шукати на цю посаду у файлі, ставлячи себе на початку ряду ми хочемо читати в нашій буфера. Ми збираємося встановити рядок оніміння дорівнює старої у. Так що тепер, якщо ми петля тому, і ми хочемо використовувати цю ж рядок у нашому поза файлу, то ми не збираємося читати його знову без необхідності. Так насправді, ряд оніміння є просто оптимізація. Нарешті, ми збираємося, щоб прочитати в поточна рядок старий ширина гамма трійок що ми хочемо від вихідного файлу. Так що тепер текущ. Рядок містить пікселі від вихідний файл, який ми хочемо написати в файл з. Так що тепер, так само, як вище, замість ітерації старого файлу, ми повинні це перебрати нових файлів рядків. Ну ось, замість того, щоб ітерації по всіх зі старих пікселів, що в CUR поспіль, ми хочемо перебрати всі пікселів в нашому новому файлі в цей конкретна рядок. Чому ми хочемо, щоб це зробити? Тому що ми бачимо тут, що ми не насправді обов'язково, використовуючи всі пікселів у вихідному файлі. Тому що, якщо ми скорочується, ми могли б насправді хочете, щоб пропустити пікселів. І ми бачимо, що це - х поділене на число фактора - близько відображає тут, де ми говоримо, у ділиться на коефіцієнт, щоб з'ясувати, що старий у-я рядок відповідає Y-го рядка в цьому новому файлі. Тепер ми збираємося написати все ці пікселі зі старої рядки в нашій нового рядка. Як тільки ми це зробили, ми повинні просто поставити прокладку наприкінці нашої рядки і ми будемо петлю назад і тривати протягом всі рядки в нашому новому файлі. Зрештою, ми повинні закрити наш старий файл, закрити наш новий файл, і повернення нулю, тому що все пройшло добре. Мене звуть Боб, і це було Перерва. [Музика грає]