[Музыка играет] 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-й строки в этом новом файле. Теперь мы собираемся написать все эти пиксели из старой строки в нашей новой строки. Как только мы это сделали, мы должны просто поставить прокладку в конце нашей строки и мы будем петлю назад и продолжаться в течение все строки в нашем новом файле. В конце концов, мы должны закрыть наш старый файл, закрыть наш новый файл, и возвращение нулю, потому что все прошло хорошо. Меня зовут Боб, и это было Перерыв. [Музыка играет]