[MUSIC PLAYBACK] ZAMYLA CHAN: Poďme rana čo sa s veľkosť. V zmeny veľkosti, bude užívateľ odovzdať prostredníctvom príkazového riadku, bitmapový obraz, ktorý chcú, aby ste mierku podľa čísla že tiež odovzdať, v príkazovom riadku. Ako to robíme? No, v prvej veci Po prvé, poďme rozčleniť tento systém do krokov. Budeš chcieť otvoriť uložená_hra že sa vám, rovnako ako vytvoriť a otvoriť outfile, že sa chystáte dať Snímku so zmenenou veľkosťou palcov Potom, pretože ste zmenu veľkosti, a pretože je to bitmapa, to záhlavie, tak budete tiež aktualizovať hlavičku Informácie o outFile, a napísať, že dovnútra Potom budete čítať do scanline na vstupný súbor, pixel-by-pixel, veľkosti horizontálne a písanie tých pixelov do outfile, ako je uvedené podľa stupnice užívateľa. Budeš mať na pamäti, pridať výplň podľa potreby. Viac o tom neskôr. A potom tiež zmeniť veľkosť v zvislom smere. OK. Takže to bude trochu viac zložitejšie, než kto to urobil, ale čo je podobné je to copy.c bude, opäť ukázať ako veľmi užitočné. Pamätajte si, že copy.c otvorí súbor, aktualizuje informácie o záhlavie pre outfile, potom prečíta do scanline, pixel-by-pixel, písať každý pixel do scanline výstupného súboru. Takže znova, môže váš prvý krok pravdepodobne bolo cp, copy.c, resize.c do PSET5 adresára. Pamätajte, že pred kopírovaním, Uistite sa, že ste pochopili, copy.c veľmi dôkladne. OK. Takže poďme otvoriť súbor. Viete, ako to urobiť. Chystám sa nechať, že na vás. Ďalšie, aktualizujte informácie o záhlaví outFile. Vzhľadom k tomu, že máme nové bitmapy, máme nové informácie hlavičky. Čo sa mení tu? No, veľkosť súboru sa zmení pretože budeme mať viac pixelov než predtým. Veľkosť obrazu, tak aj zmení, ako je šírka a výška. Takže, ktoré premenné sú tie, presne? No, keď sa pozriete do záhlavia informácie, môžete vidieť, že je biSizeImage, čo predstavuje celkový Veľkosť obrazu v bajtoch, vrátane pixelov a polstrovanie. biWidth je šírka obrázku v pixeloch, bez polstrovania. biHeight je výška obrázku v pixeloch. A tak tie sú obsiahnuté v structs BITMAPFILEHEADER a BITMAPINFOHEADER. Môžete povedať, ktorý z nich je ktorý by bude bmp.h a pri pohľade na BITMAPINFOHEADER struct a videnie premenných, ktoré sú v ňom uvedené. Takže aktualizovať outfiles záhlavia informácie, budete chcieť, aby Zmena týchto hodnôt výška a šírka. Ale šanca, že možno budete musieť niektoré informácie hlavičku v Infil je neskôr, tak najlepšie sledovať z oboch. Ale byť veľmi jasné, s premennou mená tak, že nemáte náhodou napísať nesprávne hodnoty v záhlavie outFile. Takže teraz poďme na čítanie do scanline pixel-by-pixel. Opäť budeme sa obrátiť na náš trusty súbor I / O knižnice, a pozrieť sa na fread funkcie. fread sa na ukazovateľ na struct ktorý bude obsahovať bajtov, ktoré čítate v, veľkosť každého prvok, ktorý čítate - opäť, sizeof bude užitočný funkcia tu, počet prvky veľkosti, veľkosti, že ste čítanie, a potom konečne, inpointer, súbor, ktorý čítate z Takže ste s číselnými prvkami veľkosti od inpointer, a ich uvedenie do dát. Teraz je čas na zmenu veľkosti vodorovne. ak n sa rovná 2, potom pre každý pixel v Infil, budeme písať dvakrát v outFile. Ako píšeme súbory? No, máme fwrite funkciu, tak sme vzali ukazovateľ na struct ktorý obsahuje bajty, že ste písomné, a potom sme sa prejsť v veľkosť, počet, a výstup, kde budete písať, že. A potom opakovať proces, bude schopní jednoduché iteračné slučky for. Ale musíme si uvedomiť, pridať výplň palcov Koncept polstrovanie je, že dobre, Každý pixel je tri uhryznutie, ale Veľkosť každého Scanline muštu byť násobkom 4 bajty. Takže v prípade, že počet pixelov nie je násobkom 4, musíme pridať niektoré polstrovanie, ktoré je len nuly. Teraz, na rozdiel Kto to urobil, a na rozdiel od kópie, potom Infil obrazu a outfile súboru sa líši majú rôzne vypchávky, pretože sú rôzne šírky. OK. Tak snáď vzorec by hodiť sem. Nechám to na vás, aby ste si to, ale ti, že písať polstrovanie, dobre, je to len jednoduchá funkcia fputc, prechádzajúcej v charaktere že chcete písať, a potom ukazovateľ súbor, ktorý ste chcem písať. Takže teraz, že sme zmene veľkosti horizontálne, a potom použiť padding, nezabudnite, že budete musieť presunúť súbor ukazovateľ polohy, pretože vám nemôže fread do polstrovanie. Takže chcete, aby sa ubezpečil, že váš súbor ukazovateľ polohy v Infil je v správnom mieste. Pretože chceme tiež, aby Zmena veľkosti zvisle. Nemôžeme len tak roztiahnuť vodorovne, pretože každý riadok potreby ktorý má byť kopírovaný n-krát. Teraz, tam je niekoľko rôznych spôsoby, ako to urobiť. Takže jedna, môžeme použiť metódu prepísať, v pamätať, že všetky pixely na daný riadok v poli, a potom napísať, že pole ako toľkokrát, koľkokrát je potrebné. Alebo je tu spôsob prekopírovať, kde po prečítaní jedného riadku v Infil a potom napísal, že do outFile, pridanie polstrovanie, sme fseek späť na začiatok pôvodného riadku, a potom opakujte horizontálne veľkosti od tam. Bez ohľadu na metódu, keď budete aby každý pixel sa bude opakovať n krát, a každý riadok sa opakovať n krát, rovnako. S tým budete mať bitmapu väčší ako život. Volám sa Zamyla, a to je CS50.