>> [MUSIC PŘEHRÁVÁNÍ]
>> ZAMYLA CHAN: Pojďme rána co se s velikost.
V změny velikosti, bude uživatel předat prostřednictvím příkazového řádku, bitmapový obraz, který
chtějí, abyste měřítko podle čísla že také předat,
v příkazovém řádku.
Jak to děláme?
>> No, v první věci Za prvé, pojďme rozčlenit tento systém do kroků.
Budeš chtít otevřít soubor_se_hrou že se vám, stejně jako
vytvořit a otevřít outfile, že se chystáte dát
Snímek se změněnou velikostí palců
Potom, protože jste změnu velikosti, a protože je to bitmapa, to záhlaví, tak
budete také aktualizovat záhlaví Informace o outFile,
a napsat, že dovnitř
Pak budete číst do scanline na vstupni soubor,
pixel-by-pixel, velikosti horizontálně a psaní těch pixelů do
outfile, jak je uvedeno podle stupnice uživatele.
>> Budeš mít na paměti, přidat výplň podle potřeby.
Více o tom později.
A pak také změnit velikost ve svislém směru.
OK.
Takže to bude trochu víc složitější, než kdo to udělal, ale
co je podobné je to copy.c bude, opět ukázat jako velmi užitečné.
Pamatujte si, že copy.c otevře soubor, aktualizuje informace o záhlaví pro
outfile, pak přečte do scanline, pixel-by-pixel, psát každý pixel
do scanline výstupního souboru.
>> Takže znovu, může váš první krok pravděpodobně bylo cp, copy.c, resize.c
do PSET5 adresáře.
Pamatujte, že před kopírováním, Ujistěte se, že jste pochopili,
copy.c velmi důkladně.
OK.
>> Takže pojďme otevřít soubor.
Víte, jak to udělat.
Chystám se nechat, že na vás.
Další, aktualizujte informace o záhlaví outFile.
Vzhledem k tomu, že máme nové bitmapy, máme nové informace záhlaví.
Co se mění tady?
No, velikost souboru se změní protože budeme mít více
pixelů než dříve.
Velikost obrazu, tak i změní, jak je
šířka a výška.
>> Takže, které proměnné jsou ty, přesně?
No, když se podíváte do záhlaví informace, můžete vidět, že je
biSizeImage, což představuje celkový Velikost obrazu v bajtech,
včetně pixelů a polstrování.
biWidth je šířka obrázku v pixelech, bez polstrování.
biHeight je výška obrázku v pixelech.
A tak ty jsou obsaženy v structs BITMAPFILEHEADER a
BITMAPINFOHEADER.
Můžete říci, který z nich je který by bude bmp.h a při pohledu na
BITMAPINFOHEADER struct a vidění proměnných, které jsou v něm uvedeny.
>> Takže aktualizovat outfiles záhlaví informace, budete chtít, aby
Změna těchto hodnot výška a šířka.
Ale šance, že možná budete muset některé informace záhlaví v INFILE je
později, tak nejlépe sledovat z obou.
Ale být velmi jasné, s proměnnou jména tak, že nemáte náhodou
napsat nesprávné hodnoty v záhlaví outFile.
>> Takže teď pojďme na čtení do scanline pixel-by-pixel.
Opět budeme se obrátit na náš trusty soubor I / O knihovny, a podívat se na
fread funkce.
fread se na ukazatel na struct který bude obsahovat bajtů, které
čtete v, velikost každého prvek, který čtete -
opět, sizeof bude užitečný funkce zde, počet
prvky velikosti, velikosti, že jste čtení, a pak konečně,
inpointer, soubor, který čtete z.
Takže jste s číselnými prvky velikosti od inpointer, a
jejich uvedení do dat.
>> Nyní je čas na změnu velikosti vodorovně.
pokud n se rovná 2, pak pro každý pixel v infile, budeme psát
dvakrát v outFile.
Jak píšeme soubory?
No, máme fwrite funkci, tak jsme vzali ukazatel na struct
který obsahuje bajty, že jste písemné, a pak jsme se projít v
velikost, počet, a výstup, kde budete psát, že.
A pak opakovat proces, bude schopni jednoduché iterační smyčky for.
>> Ale musíme si uvědomit, přidat výplň palců
Koncept polstrování je, že dobře, Každý pixel je tři kousnutí, ale
Velikost každého Scanline moštu být násobkem 4 bajty.
Takže v případě, že počet pixelů není násobkem 4, musíme přidat některé
polstrování, které je jen nuly.
Nyní, na rozdíl Kdo to udělal, a na rozdíl od kopie, pak infile obrazu a
outfile souboru se liší mají různé vycpávky, protože jsou
různé šířky.
>> OK.
Tak snad vzorec by hodit sem.
Nechám to na vás, abyste si to, ale ti, že psát polstrování,
dobře, je to jen jednoduchá funkce fputc, procházející v charakteru
že chcete psát, a pak ukazatel soubor, který jste
chci psát.
Takže teď, že jsme změně velikosti horizontálně, a pak použít padding,
nezapomeňte, že budete muset přesunout soubor ukazatel polohy, protože vám
nemůže fread do polstrování.
Takže chcete, aby se ujistil, že váš soubor ukazatel polohy v INFILE
je ve správném místě.
Protože chceme také, aby Změna velikosti svisle.
Nemůžeme jen tak roztáhnout vodorovně, protože každý řádek potřeby
který má být kopírován n-krát.
>> Nyní, tam je několik různých způsoby, jak to udělat.
Takže jedna, můžeme použít metodu přepsat, v pamatovat, že všechny pixely
na daný řádek v poli, a pak napsat, že pole jako
tolikrát, kolikrát je potřeba.
Nebo je tu způsob překopírovat, kde po přečtení jednoho řádku v INFILE
a pak napsal, že do outFile, přidání polstrování, jsme fseek
zpět na začátek původního řádku, a pak opakujte horizontální
velikosti od tam.
Bez ohledu na metodu, když budete aby každý pixel se bude opakovat
n krát, a každý řádek se opakovat n-krát, stejně.
>> S tím budete mít bitmapu větší než život.
Jmenuji se Zamyla, a to je CS50.