>> [Музички]
>> ZAMYLA Чан: Ајде удар работите со менување на големината.
Во големината, корисникот ќе помине во, преку на командната линија, bitmap слика дека
тие сакаат да скала од голем број дека тие исто така се помине во,
во командната линија.
Како го правиме тоа?
>> Па, првите нешта прво, да се скрши оваа долу во чекори.
Ви се случува да сакаат да се отвори infile што тие ви даде, како и
создаде и ги отвори outfile дека ви се случува да се стави на
променета сликата внатре
Тогаш, затоа што ти си промена на димензиите, и затоа што тоа е битмапа, тоа насловот, па
сте ќе исто така, ажурирање насловот информации за outfile,
и пишува дека внатре
Потоа, си оди за да прочитате во на scanline на infile,
пиксел по пиксел, промена на големината на хоризонтално и пишување оние пиксели во
outfile, како што е наведено од скала на корисникот.
>> Сте ќе треба да се сеќавам да се додадете баласт како што е потребно.
Повеќе за тоа подоцна.
А потоа, исто така, менување на големината вертикално.
OK.
Па ова ќе биде малку повеќе покомплицирано отколку Кој го сториле тоа, но
што е слично е дека copy.c волја, повторно, да докаже многу корисни.
Се сеќавам дека copy.c отвора датотека, ажурира заглавието информации за
outfile, тогаш чита во scanline, пиксел по пиксел, пишувајќи секој пиксел
во scanline излезната датотека е.
>> Значи, повторно, вашиот прв чекор може да веројатно биде да се cp, copy.c, resize.c
во вашиот PSET5 директориум.
Се сеќавам иако, пред да го умножувате, да бидете сигурни дека ви е јасно
copy.c многу темелно.
OK.
>> Па ајде да се отвори датотеката.
Знаете како да го направите тоа.
Одам да го оставиме тоа за вас.
Следно, ажурирање на технички податоци за outfile.
Бидејќи имаме нова bitmap, имаме нов наслов информации.
Што се менува тука?
Па, големината на датотеката ќе се промени бидејќи ние се случува да имаат повеќе
пиксели отколку порано.
Големината на сликата е, на тој начин, исто така, ќе се промени, како што е
ширина и висина.
>> Така што променливи се оние, точно?
Па, ако се погледне во насловот информации, ќе се видиме таму е
biSizeImage, што претставува вкупно големината на сликата во бајти,
вклучувајќи пиксели и баласт.
biWidth е ширина на сликата во пиксели, минус баласт.
biHeight е на висината на сликата во пиксели.
И така тие се содржани во structs BITMAPFILEHEADER и
BITMAPINFOHEADER.
Може да се каже кој е кој од ќе bmp.h и да гледа во
BITMAPINFOHEADER struct и гледање кој променливи се наведени таму.
>> Па да се ажурира на outfiles насловот информации, ви се случува да сакаат да
промена оние вредности на висина и ширина.
Но, шансите се, можеби ќе треба некои на технички податоци на infile е
подоцна, па најдобро е да ги пратите на двете.
Но да биде многу јасно со вашата променлива имиња, така што ќе не случајно
напише неточни вредности во насловот за outfile.
>> Па сега ајде стигнете до читање во на scanline пиксел по пиксел.
Повторно, ние ќе треба да се свртиме кон нашата сигурен датотека I / O библиотека, и се погледне на
на fread функција.
fread зема во покажувач кон struct која ќе содржат бајти кои
ти ја читаш во, големината на секоја елемент кој ја читаш -
повторно, sizeof се случува да биде корисно функционира тука, бројот на
елементи на големина, големината, дека сте читање, а потоа да конечно,
inpointer, на датотеката што што ти ја читаш од.
Значи сте преземање број елементи на големина од inpointer, и
ставајќи ги во податоците.
>> Сега е време за менување на големината хоризонтално.
ако n е еднакво на 2, тогаш за секој пиксел во на infile, ние ќе го напише
двапати во outfile.
Како да се напише датотеки?
Па, имаме запишување функција, така ние сме земени на покажувачот на struct
која содржи бајти кои сте писмена форма од, а потоа ние помине во
големина, бројот, и излез, каде што ви се случува да се пишува тоа.
А потоа да се повторува процесот, ќе биде можност на едноставен итеративен за телефонска линија.
>> Но, ние треба да се запамети за да додадете баласт внатре
Концептот на Соочи е дека, добро, секој пиксел е три каснувања, но
Големината на секоја scanline мора да биде повеќе од 4 бајти.
Значи, ако бројот на пиксели не е повеќе од 4, ние треба да додадете некои
баласт, што е само нули.
Сега, за разлика Кој го сториле тоа, и за разлика од копија, а потоа infile сликата и
outfile датотека имаат различни имаат различни баласт, бидејќи тие се
различни ширини.
>> OK.
Па можеби формула би ни се најде овде.
Ќе го оставиме тоа на вас останува да го дознаете, но ви кажам дека, за да напишете баласт,
добро, тоа е само едноставна fputc функција, поминува во ликот
што сакате да се напише, а потоа покажувачот на датотеката која сте
сакате да запишувате.
Па сега дека ние сме променета хоризонтално, и потоа се користи баласт,
запомнете дека треба да се движи вашата датотека позиција индикатор, затоа што
не може да fread во баласт.
Значи сакате да бидете сигурни дека вашата датотека позиција индикатор во infile
е во точниот момент.
Затоа што ние така сакаме да менување на големината вертикално.
Ние не само да го водат хоризонтално, затоа што секој ред потреби
да бидат копирани n пати.
>> Сега, постојат неколку различни начини да го направите тоа.
Значи еден, можеме да го користиме преработи метод, во дека ние се сеќаваме сите на пиксели
на даден ред во низа, и тогаш ние пишуваме дека низа како
пати колку што е потребно.
Или тука е recopy метод каде што, по читањето во еден ред во infile
а потоа и пишување дека во outfile, додавање баласт, ние fseek
Назад кон почетокот на оригиналниот ред, а потоа се повторува на хоризонталната
промена на големината од таму.
Без разлика на методот, сепак, ќе сакате секој пиксел да се повтори
n пати, и секој ред да се биде повторува n пати, како и.
>> Со тоа, ќе треба битмапа поголема од живот.
Моето име е Zamyla, а тоа е CS50.