[Glazba svira] ZAMYLA Chan: Idemo udarac stvari s stanovati. U stanovati, korisnik će proći u, putem naredbenog retka, uzorkovana slika koje hoće li na ljestvici po broju da i oni prođu, u zapovjednoj liniji. Kako ćemo to učiniti? Pa, krenimo redom, hajdemo razbiti ovaj dolje u koracima. Vi idete da želite otvoriti INFILE koji su ti dali, kao i stvoriti i otvoriti outfile da idete staviti mijenjati image u. Zatim, jer ste mijenjanje veličine, a zato što je bitmapa, to header, pa ti ćeš također ažurirati zaglavlje Informacije za outfile, i napisati da u. Zatim, ti ćeš čitati u scanline od infile, pixel-by-pixel, mijenjanje veličine vodoravno i pisanje tih piksela u outfile, kao što je navedeno korisnikovim skali. Ti ćeš se sjetiti dodavanje padding potrebi. Više o tome kasnije. A onda, također veličinu vertikalno. OK. Dakle, to će biti malo više kompliciranije nego Tko je to učinio, ali što je slično je da copy.c će, opet, bilo vrlo korisno. Zapamtite da copy.c otvara datoteku, ažurira podatke zaglavlju outfile, onda čita u scanline, pixel-by-pixel, pisanje svaki piksel u izlazne datoteke je scanline. Pa opet, vaš prvi korak bi se vjerojatno biti na SP, copy.c, resize.c u svoj PSET5 imenik. Sjeti se ipak, prije nego što ga kopirati, kako bi bili sigurni da ste razumjeli copy.c vrlo temeljito. OK. Tako ćemo otvoriti datoteku. Znate kako se to radi. Ja ću prepustiti vama. Dalje, ažurirati podatke u zaglavlju za outfile. Budući da imamo novi bitova, imamo novi header informacije. Ono što se mijenja ovdje? Pa, veličina datoteke će se promijeniti zato jer ćemo imati više piksela nego prije. Veličina slike je, dakle, također Promijenit će se, kao što je širina i visina. Dakle koje varijable su oni, točno? Pa, ako pogledate u zaglavlju Informacije, vidim da postoji biSizeImage, što predstavlja ukupno veličina slike u bajtovima, uključujući piksela i padding. biWidth je širina slike u pikselima, minus padding. biHeight je visina slike u pikselima. I tako one su sadržane u tvorevina BITMAPFILEHEADER i BITMAPINFOHEADER. Možete reći koje je što po će bmp.h i gledajući BITMAPINFOHEADER rekonstruirati i vidim koje su varijable na popisu ima. Dakle ažurirati outfiles zaglavlje Informacije, idete da želite promijeniti te vrijednosti Visina i širina. No, šanse su, možda trebate neke informacija zaglavlju infile-a kasnije, tako najbolje pratiti oboje. No, vrlo jasno s varijablom imena, tako da ne slučajno pisati netočne vrijednosti u header za outfile. Pa sad idemo na čitanje u scanline pixel-by-pixel. Opet, mi ćemo se okrenuti našim vjernim file I / O biblioteka, i pogledati fread funkcija. fread traje u pointer na struct koji će sadržavati bajtova koje što čitate u, veličina svakog element koji čitate - opet, sizeof će biti korisna funkcionirati ovdje, broj elementi veličine, veličine, da si čitanje u, a zatim konačno, inpointer, datoteka koja što čitate iz. Dakle, ti si uzimate broj elemenata veličine od inpointer, i stavljajući ih u podacima. Sada je vrijeme za promjenu veličine vodoravno. ako je n jednak 2, a zatim na svaki piksel infile, idemo to napisati dva puta u outfile. Kako ćemo pisati datoteke? Pa, imamo fwrite funkciju, pa uzeli smo pokazivač na struct koji sadrži bajtova koje ste pismenog, a onda ćemo proći u veličina, broj i izlaz, gdje je ti si idući u pisati da. A onda za ponavljanje postupka, bit će mogli jednostavno iterativni za petlju. No, moramo se sjetiti dodati padding u. Koncept padding je da, dobro, svaki piksel je tri uboda, već Veličina svakog scanline mošta biti višestruka od 4 bajta. Dakle, ako je broj piksela nije višekratnik broja 4, moramo dodati neke padding, što je samo nula. Sada, za razliku Tko je to učinio, a za razliku od kopija, onda infile slika i outfile datoteke su različite imaju drugačija padding, jer oni su različite širine. OK. Dakle, možda bi formula dobro doći ovdje. Ja ću ga ostaviti na vama je da to saznate, ali vam reći da, napisati padding, dobro, to je samo jednostavna funkcija fputc, prolazi u liku koji želite pisati, a zatim file pointer da želim pisati. Dakle, sada kada smo mijenjati vodoravno, a zatim koristiti padding, zapamtite da morate premjestiti svoje datoteke Pokazivač položaja, jer vam Ne možete fread u padding. Dakle, želite da biste bili sigurni da je vaš predmet Indikator položaja na infile je na ispravnom mjestu. Jer, mi također želimo veličinu vertikalno. Ne možemo ga se protežu vodoravno, jer svaki redak potrebe treba kopirati n puta. Sada, postoji nekoliko različitih načina za to. Tako je jedan, možemo koristiti metodu prepisivanja, u da se sjetimo svih piksela od obzirom red u niz, te onda ćemo napisati da je niz kao onoliko puta koliko je potrebno. Ili postoji metoda recopy gdje, nakon što je pročitao u jednom redu u infile a zatim pisao da je u outfile, Dodavanjem padding, mi fseek Natrag na početku izvorne redom, a zatim ponovite horizontalna mijenjanje veličine od tamo. Bez obzira na metodu, međutim, da ćete želite svaki piksel da se ponavlja n puta, i svaki redak se ponavlja n puta, kao dobro. Uz to, imat ćete bitmapa veći od života. Moje ime je Zamyla, a to je CS50.