>> [За възпроизвеждане на музика]
>> ZAMYLA CHAN: удар Да нещата с промяна на размера.
В преоразмеряване, потребителят ще премине в, чрез командния ред, растерно изображение, което
те искат да мащабирате от редица че те също преминават в,
в командния ред.
Как правим това?
>> Е, първите неща, първо, нека да разбие на стъпки.
Вие ще искате да отворите INFILE че те ни дават, както и
създаване и отваряне на outfile че ти започваш да се постави
преоразмерява снимката инча
След това, защото сте преоразмеряване, и защото това е растерна графика, тя глава, така че
ти започваш да се актуализира също хедъра информация за outfile,
и пише, че инча
След това, ти започваш да се прочете в на Scanline на INFILE,
пиксел по пиксел, преоразмеряване хоризонтално и писане на тези пиксели в
outfile, както е посочено по скалата на потребителя.
>> Ти започваш да се помни, за да добави подложка, колкото е необходимо.
Повече за това по-късно.
И тогава, също преоразмеряване вертикално.
OK.
Така че това ще бъде малко по- сложно, отколкото Кой го направи, но
какво е подобен е, че резервното ще, отново, да се окаже много полезно.
Не забравяйте, че резервното отваря файл, актуализира информацията за хедър за на
outfile, след прочита в Scanline, пиксел по пиксел, писане всеки пиксел
в Scanline изходния файл е.
>> Така че отново, първата стъпка може вероятно бъде да кп, резервното, resize.c
във вашия PSET5 директория.
Не забравяйте все пак, преди да го копирате, за да се уверите, че сте разбрали
резервното много старателно.
OK.
>> Така че нека да отворите файл.
Знаеш ли как се прави това.
Ще оставя това на вас.
На следващо място, актуализиране на информацията за хедър за outfile.
Защото ние имаме една нова растерна графика, имаме нова информация с глава.
Какво се променя тук?
Е, размера на файла няма да се промени защото ние ще имаме повече
пиксела, отколкото преди.
Размерът на изображението е, по този начин, също няма да се промени, тъй като е
ширина и височина.
>> Така че, който променливи са тези, по-точно?
Е, ако се вгледате в хедъра информация, ще се видим там е
biSizeImage, което представлява общата сума размер на изображението в байтове,
включително пиксела и подложка.
biWidth е широчината на изображението в пиксели, минус подложка.
biHeight е височината на изображението в пиксели.
И така, тези, които се съдържат в structs BITMAPFILEHEADER и
BITMAPINFOHEADER.
Можете да кажете кой е, който от ще bmp.h и разглеждане на
BITMAPINFOHEADER структура и виждайки които променливи са включени в него.
>> Така че да се актуализира outfiles хедъра информация, вие ще искате да
променят тези стойности на височина и широчина.
Но шансовете са, може да се наложи някои на информация в заглавието на INFILE е
по-късно, така че най-добре да следите и от двете.
Но бъдете много ясно с променлива имена, така че да не случайно
пишат неверни стойности в хедъра за outfile.
>> Така че сега нека се заемем с четене в на Scanline пиксел по пиксел.
Отново, ние ще се обърнем към нашия надежден подаде I / O библиотека, и погледнете
на fread функция.
fread отнема в указател към структура , която ще съдържа байтове, че
четете в, размерът на всяка елемент, който четете -
отново, sizeof ще бъде полезен функционират тук, броят на
елементи с размер, размер, които сте четене, а след това накрая
inpointer, файла, който четете от.
Значи вие сте като брой елементи на площ от inpointer, и
пускането им в данни.
>> Сега е време да преоразмерите хоризонтално.
ако п е равно на 2, а след това за всеки пиксел на INFILE, ние ще го напиша
два пъти в outfile.
Как да пишем файлове?
Е, ние имаме неуспешно функция, така че сме взели показалеца на STRUCT
който съдържа байтове, които сте пише от, и след това се минава през
размер, брой и изход, където ти започваш да се пише това.
И след това да се повтаря един процес, ще бъде може просто повтарящ за контур.
>> Но ние трябва да помним, да добавите подложка инча
Концепцията за подплата е, че, добре, всеки пиксел е три ухапвания, но
размер на всяка Scanline мъст е кратен на 4 байта.
Така че, ако броят на пикселите не е кратен на 4, ние трябва да добавите някои
уплътнение, което е само нули.
Сега, за разлика от Кой го направи, и за разлика от копие, а след това INFILE изображение и
outfile файл са различни има различен пълнеж, защото те са
различни ширини.
>> OK.
Така че може би една формула би дойде по-удобно тук.
Аз ще го оставя на вас да го разберете, но ви кажа, че, за да напишете подплата,
Е, това е просто една проста функция fputc, преминаване в характера
, която искате да напишете, и след това показалеца на файла, който сте
Искам да пиша за.
Така че сега, че сме преоразмерява, хоризонтално, и след това се използва подложка,
не забравяйте, че вие ​​трябва да преместите файл индикатор за положение, защото
не може да fread в подложка.
Значи вие искате да се уверите, че вашият файл индикатор за положение в INFILE
е в правилната точка.
Защото ние също искаме да преоразмеряване вертикално.
Ние не може просто да го разтегнете хоризонтално, защото всеки нужди ред
да бъдат копирани п пъти.
>> Сега, има няколко различни начини да направите това.
Така един, можем да използваме метода на презапис, в че ние си спомняме всичко на пикселите
на даден ред в масив, и След това пишем този масив като
толкова пъти, колкото е необходимо.
Или там е метод прекопиране, където, след като е прочел в един ред в INFILE
и след това писмено, че в outfile, добавяне на пълнежа, ние fseek
Обратно към началото на първоначалния ред и след това се повтаря хоризонталата
преоразмеряване от там.
Независимо от използвания метод, макар че, вие ще Искам всеки пиксел да се повтори
п пъти, и всеки ред, за да бъдат повтаря п пъти, както.
>> С това, вие ще имате растерна графика по-голям от живота.
Моето име е Zamyla, и това е CS50.