[Музыка играет] 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, потому что мы сделали. Меня зовут Боб, и это было изменение размера. [Музыка играет]