[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.