>> [Музыка играет]
>> ZAMYLA Чан: удар Давайте вещи с изменением размера.
В изменении размера, пользователь будет проходить в, через командная строка, растровое изображение,
они хотят масштабировать по ряд что они также проходят в,
в командной строке.
Как мы это делаем?
>> Ну, обо всем по порядку, давайте разорвать этот вниз на шаги.
Вы будете хотеть, чтобы открыть INFILE что у них есть, а также
создать и открыть OUTFILE, что вы собираетесь поставить
Изображение с измененным размером дюйма
Тогда, потому что вы изменения размера и потому что это растровый, это заголовок, так
вы собираетесь также обновить заголовок информация для OUTFILE,
и пишут, что дюйма
Тогда, вы собираетесь читать в Scanline из INFILE,
пиксель за пикселем, изменение размера по горизонтали и писать эти пиксели в
выходной_файл, как указано по шкале пользователя.
>> Вы собираетесь забудьте добавить отступы по мере необходимости.
Подробнее об этом позже.
А потом, также изменять размеры по вертикали.
ОК.
Так что это будет немного больше сложнее, чем, кто это сделал, но
что похоже, что copy.c будет, опять же, оказаться весьма полезным.
Помните, что copy.c открывает файл, обновляет информацию заголовка для
выходной_файл, затем считывает в строки развертки, пиксель за пикселем, писать каждый пиксель
в строки развертки выходного файла.
>> Итак, еще раз, ваш первый шаг мог бы, вероятно, в том, чтобы CP, copy.c, Изменение размера
в каталог PSET5.
Помните, прежде чем скопировать его, чтобы убедиться, что вы понимаете,
copy.c очень тщательно.
ОК.
>> Так что давайте открыть файл.
Вы знаете, как это сделать.
Я собираюсь оставить это для вас.
Затем, обновите информацию заголовка для OUTFILE.
Потому что у нас новое растровое изображение, у нас есть новый информационный заголовок.
Что здесь меняется?
Ну, размер файла будет меняться потому что мы собираемся иметь больше
пикселей, чем раньше.
Размер изображения, таким образом, также изменится, как это
ширина и высота.
>> Итак, какие переменные являются те, точно?
Ну, если вы посмотрите в заголовок информация, вы видите там
biSizeImage, которая представляет собой итог Размер изображения в байтах,
в том числе пикселей и дополнения.
biWidth является ширина изображения в пикселях, минус обивка.
biHeight это высота изображения в пикселях.
И поэтому те, которые содержатся в Структуры BITMAPFILEHEADER и
BITMAPINFOHEADER.
Вы можете сказать, какой из них, которые по собирается bmp.h и, глядя на
BITMAPINFOHEADER структура и видение какие переменные перечислены там.
>> Таким образом, чтобы обновить outfiles заголовок информация, вы будете хотеть, чтобы
изменить эти значения высота и ширина.
Но скорее всего, вы, возможно, потребуется некоторое информации заголовка в INFILE в
позже, так что лучше, чтобы отслеживать и другое.
Но будьте очень ясно с вашим переменной имена, так что вы случайно не
написать неправильные значения в заголовок для OUTFILE.
>> Так что теперь давайте перейдем к чтения в Scanline пиксель-на-пиксель.
Опять же, мы собираемся обратиться к нашей велеречивых файл библиотеки ввода / вывода, и посмотреть на
FREAD функция.
FREAD занимает в указатель на структуру , который будет содержать байты,
вы читаете в, размер каждой элемент, который вы читаете -
снова, SizeOf будет полезно функционировать здесь, число
элементы размер, размер, что вы находитесь чтение, и затем, наконец,
inpointer, файл, который вы читаете с.
Так вы принимаете число элементов от размера от inpointer и
положить их в данные.
>> Теперь пришло время для изменения размера по горизонтали.
если п равно 2, то для каждого пикселя в входной_файл, мы собираемся записать его
дважды в выходной файл.
Как мы писать файлы?
Ну, у нас есть FWRITE функцию, поэтому мы взяли указатель на структуры
, который содержит байты, вы письменного, а затем мы переходим в
Размер, число и выход, где вы собираетесь писать, что.
А потом повторить процесс, будет состоянии простой итерационный цикл.
>> Но мы должны помнить, добавить отступы дюйма
Концепция обивка является то, что, ну, каждый пиксель три укусы, но
Размер каждой строки принадлежат сусла быть кратно 4 байта.
Таким образом, если количество пикселей не кратно 4, нам нужно добавить некоторые
обивка, который находится всего в нули.
Теперь, в отличие от, кто это сделал, и в отличие от копия, то входной_файл изображение и
выходной_файл файл имеет различные имеют отличается обивка, потому что они
различной ширины.
>> ОК.
Так что, возможно формула будет пригодиться здесь.
Я оставлю это для вас, чтобы найти его, но вам сказать, что, чтобы написать обивка,
ну, это просто простая функция fputc, проходящей в характере
что вы хотите написать, а потом указатель файла, который вы
хотите написать в.
Так что теперь мы изменен по горизонтали, а затем использовать отступы,
помните, что вам нужно, чтобы переместить файл Индикатор положения, потому что вам
не может FREAD в дополнения.
Итак, вы хотите, чтобы убедиться, что ваш файл Индикатор положения на INFILE
в правильной точки.
Потому что мы также хотим изменить размер по вертикали.
Мы не можем просто растянуть его по горизонтали, потому что каждый потребности строк
должны быть скопированы п раз.
>> Сейчас есть несколько различных способов сделать это.
Так что, мы можем использовать метод перезаписи, в что мы помним все пиксели
из данная строка в массиве, и то мы пишем этот массив как
столько раз, сколько это необходимо.
Или есть способ переписать где, после прочтения в один ряд в INFILE
а затем письменной форме, что в выходной файл, добавив заполнение, мы FSEEK
назад к началу исходной строки, а затем повторите горизонтальная
изменение размера оттуда.
Независимо от метода, тем не менее, вы будете хочу, чтобы каждый пиксель повторяться
п раз, и каждая строка будет повторяется п раз, а также.
>> При том, что вы будете иметь точечный рисунок больше, чем жизнь.
Меня зовут Zamyla, и это CS50.