1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [Musikk spilles] 3 00:00:12,470 --> 00:00:13,210 >> ROB BOWDEN: Hei. 4 00:00:13,210 --> 00:00:16,870 Jeg er Rob og la oss størrelse opp dette problemet. 5 00:00:16,870 --> 00:00:20,990 Så vi kommer til å starte med copy.c som en mal, men vi kommer til å være 6 00:00:20,990 --> 00:00:23,340 gjør ganske mange endringer. 7 00:00:23,340 --> 00:00:27,570 >> Nå ser vi vi umiddelbart å gjøre en endre hvor vi ikke lenger kontroll 8 00:00:27,570 --> 00:00:31,560 for vår RXC ikke lik 3, men nå Vi sjekker rc ikke lik fire. 9 00:00:31,560 --> 00:00:34,670 Siden vi også ønsker å inkludere, i tillegg til de i filen og ut filer 10 00:00:34,670 --> 00:00:39,550 argumenter, f som kommer til å være denne faktor som vi skalering. 11 00:00:39,550 --> 00:00:45,430 >> Så når vi er sikker på at vi ønsker å bruke s scan f å konvertere strengen 12 00:00:45,430 --> 00:00:49,030 argv1 til en flåte. 13 00:00:49,030 --> 00:00:51,330 Og vi kommer til å lagre at i faktoren. 14 00:00:51,330 --> 00:00:55,180 Denne ekstra karakter er å sørge at vi ikke er faktisk inn 15 00:00:55,180 --> 00:00:59,200 noe sånt som 1,4 ABC på kommandolinjen. 16 00:00:59,200 --> 00:01:02,960 >> Nå skal vi lage noen aliaser siden RV2 og RV3 er ikke 17 00:01:02,960 --> 00:01:04,310 svært nyttige navn. 18 00:01:04,310 --> 00:01:07,660 Vi er, i stedet, kommer til å ringe dem i filen og ut filen. 19 00:01:07,660 --> 00:01:11,580 Nå skal vi sørge for at vår faktoren var faktisk gyldig. 20 00:01:11,580 --> 00:01:16,330 Så hvis moment er mindre enn eller lik null eller større enn 100, så som per 21 00:01:16,330 --> 00:01:19,660 spec, bør vi forkaste som faktor. 22 00:01:19,660 --> 00:01:23,890 >> Når vi er sikker på at det er bra, nå kan vi åpne n fil, og vi har å gjøre 23 00:01:23,890 --> 00:01:25,950 sikker på at det var vellykket åpnet. 24 00:01:25,950 --> 00:01:28,630 Hvis det gjorde det ikke, vil det returnere null. 25 00:01:28,630 --> 00:01:30,390 Vi kommer til å åpne ut filen. 26 00:01:30,390 --> 00:01:33,420 Og igjen, ønsker vi å sjekke for å være sikker på at det er vellykket åpnet. 27 00:01:33,420 --> 00:01:37,270 Og hvis det ikke lykkes åpne, deretter vi må også være sikker på å lukke 28 00:01:37,270 --> 00:01:40,870 n fil som opprinnelig vellykket åpnet, eller annet vi har en 29 00:01:40,870 --> 00:01:42,600 minnelekkasje. 30 00:01:42,600 --> 00:01:46,350 >> Så nå skal vi lese i bitmap filhodet og bitmap info 31 00:01:46,350 --> 00:01:48,890 header fra n-filen. 32 00:01:48,890 --> 00:01:52,360 Vi kommer til å sørge for at n fil var en gyldig bitmap. 33 00:01:52,360 --> 00:01:52,640 OK. 34 00:01:52,640 --> 00:01:55,100 >> Så nå skal vi begynne å gjøre noen endringer. 35 00:01:55,100 --> 00:01:58,840 Så fordi vi kommer til å være i endring ting, vi først ønsker å huske 36 00:01:58,840 --> 00:02:01,510 old bredden av n-filen. 37 00:02:01,510 --> 00:02:05,160 Vi ønsker å huske den gamle padding av n fil ved å bruke samme beregnings 38 00:02:05,160 --> 00:02:06,990 fra copy.c. 39 00:02:06,990 --> 00:02:09,840 >> Og nå skal vi endre bitmap info header. 40 00:02:09,840 --> 00:02:13,630 Og så er vi multiplisere både bredden og høyden med faktor siden 41 00:02:13,630 --> 00:02:15,750 det er det vi er skalering av. 42 00:02:15,750 --> 00:02:18,420 Vi kommer til å bestemme ny padding av filen ved å 43 00:02:18,420 --> 00:02:21,140 ved hjelp av den nye bredden. 44 00:02:21,140 --> 00:02:27,330 Og vi kommer til å bestemme den nye størrelsen av bildet ved hjelp av antallet 45 00:02:27,330 --> 00:02:31,610 bytes i en enkelt rad som kommer til å være antall piksler i den raden 46 00:02:31,610 --> 00:02:35,960 ganger størrelsen av et bildepunkt pluss antall byte med polstring ved enden 47 00:02:35,960 --> 00:02:40,310 av den raden, og multiplisere alt som med antall rader som vi har. 48 00:02:40,310 --> 00:02:43,800 Så det er antall byte vi har i våre bildedata. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize nå kommer til å være nummer byte i vårt bilde beta pluss 50 00:02:48,190 --> 00:02:49,350 størrelsen på våre overskrifter. 51 00:02:49,350 --> 00:02:53,910 Så pluss størrelsen på bitmap fil header og størrelsen på bitmap info header. 52 00:02:53,910 --> 00:02:54,510 OK. 53 00:02:54,510 --> 00:02:56,440 Så det er det for våre overskrifter. 54 00:02:56,440 --> 00:02:59,030 Vi kan skrive filen hodet og info header til vår ut 55 00:02:59,030 --> 00:03:01,590 fil, og vi er flinke. 56 00:03:01,590 --> 00:03:03,800 >> Nå er det på tide å begynne å faktisk skrive pixel 57 00:03:03,800 --> 00:03:05,120 data til ut filen. 58 00:03:05,120 --> 00:03:10,460 Vi kommer til å erklære en buffer på størrelse gammel bredde RGB tripler, og vi er 59 00:03:10,460 --> 00:03:13,790 kommer til å erklære en variabel kalt rad nummen, som er at vi kommer til å 60 00:03:13,790 --> 00:03:15,640 utgangspunktet satt lik negative 1. 61 00:03:15,640 --> 00:03:19,090 Vi vil se at vi kommer til å bruke at for å holde oversikt over hva 62 00:03:19,090 --> 00:03:22,640 rad vi i dag har lastet inn i denne buffer. 63 00:03:22,640 --> 00:03:23,290 OK. 64 00:03:23,290 --> 00:03:28,750 >> Så nå i motsetning til standardutgaven, i stedet for itera over på i 65 00:03:28,750 --> 00:03:32,900 fil, kommer vi til å iterere over hver rad i den ut-filen og finne ut 66 00:03:32,900 --> 00:03:38,130 hvilken rad i i filen vi ønsker å plassere i denne raden i ut-filen. 67 00:03:38,130 --> 00:03:44,930 Så gjentar fremfor alle radene i ut filen ved hjelp av den nye høyden, vi er først 68 00:03:44,930 --> 00:03:48,890 kommer til å bestemme den rad i det gamle fil vi kommer til å bruke, som vi er 69 00:03:48,890 --> 00:03:53,560 kommer til å gjøre ved å ta denne strømmen rad delt på faktor. 70 00:03:53,560 --> 00:03:58,000 Så det kommer til å gi oss raden i den gamle filen som vi ønsker. 71 00:03:58,000 --> 00:04:03,310 >> Så nå hvis rad nummen ikke lik gammel y, vi er nødt til å lese rad 72 00:04:03,310 --> 00:04:05,940 at vi ønsker inn i vår nå rad buffer. 73 00:04:05,940 --> 00:04:07,700 Så hvordan skal vi gjøre det? 74 00:04:07,700 --> 00:04:11,650 Først skal vi finne ut av posisjon som begynner den raden i 75 00:04:11,650 --> 00:04:13,100 originalfilen. 76 00:04:13,100 --> 00:04:18,630 For at posisjonen skal være forbi alle våre overskrifter og 77 00:04:18,630 --> 00:04:21,589 nå forbi gamle y rader. 78 00:04:21,589 --> 00:04:23,880 >> Og så hvor mange byte er i en enkelt rad? 79 00:04:23,880 --> 00:04:28,740 Igjen, størrelse med RGB trippel ganger gammel bredden pluss gamle padding, så det er 80 00:04:28,740 --> 00:04:30,640 antall byte i en enkelt rad. 81 00:04:30,640 --> 00:04:33,680 Og vi ønsker å hoppe forbi gamle y rader. 82 00:04:33,680 --> 00:04:37,580 Så vi kommer til å f søke og vi er bruker søke satt til å starte fra 83 00:04:37,580 --> 00:04:39,100 begynnelsen av en fil. 84 00:04:39,100 --> 00:04:42,740 Vi kommer til å f søke på denne stillingen i filen, setter oss på 85 00:04:42,740 --> 00:04:46,500 begynnelsen av raden vi ønsker å lese i vår buffer. 86 00:04:46,500 --> 00:04:48,510 >> Vi kommer til å sette rad nummen lik gammel y. 87 00:04:48,510 --> 00:04:53,080 Så nå hvis vi sløyfe tilbake og vi ønsker å bruke samme rad i vår ut filen, 88 00:04:53,080 --> 00:04:55,970 da vi ikke kommer til å lese den inn igjen unødvendig. 89 00:04:55,970 --> 00:04:59,310 Så egentlig, er rad nummen bare en optimalisering. 90 00:04:59,310 --> 00:05:05,500 >> Til slutt kommer vi til å lese inn i gjeldende rad den gamle bredden RGB tredobler 91 00:05:05,500 --> 00:05:08,040 at vi vil ha fra den opprinnelige filen. 92 00:05:08,040 --> 00:05:12,270 Så nå nå rad inneholder pikslene fra den opprinnelige filen som vi ønsker å 93 00:05:12,270 --> 00:05:14,200 skrive inn den ut filen. 94 00:05:14,200 --> 00:05:18,960 Så nå, på samme måte som ovenfor, istedenfor itera over den gamle filen, trenger vi 95 00:05:18,960 --> 00:05:22,560 det å iterere over de nye filene radene. 96 00:05:22,560 --> 00:05:27,450 Vel her, i stedet for itera over alt av de gamle piksler som i nå rad, 97 00:05:27,450 --> 00:05:31,210 vi ønsker å iterere over alle piksler i vår nye fil i dette 98 00:05:31,210 --> 00:05:32,480 bestemt rad. 99 00:05:32,480 --> 00:05:34,140 >> Hvorfor ønsker vi å gjøre det? 100 00:05:34,140 --> 00:05:38,960 Fordi vi ser her at vi ikke er faktisk nødvendigvis ved hjelp av alle de 101 00:05:38,960 --> 00:05:41,020 piksler i den opprinnelige filen. 102 00:05:41,020 --> 00:05:46,630 Fordi hvis vi krymper, kanskje vi faktisk ønsker å hoppe over piksler. 103 00:05:46,630 --> 00:05:48,090 Og vi ser at dette - 104 00:05:48,090 --> 00:05:49,690 x delt på faktor - 105 00:05:49,690 --> 00:05:55,620 speil tett opp her hvor vi sier y delt på faktor å regne ut at 106 00:05:55,620 --> 00:06:02,480 den gamle y-te rad tilsvarer den y-te rekke i denne nye fil. 107 00:06:02,480 --> 00:06:05,880 >> Nå skal vi skrive alle disse piksler fra gamle rad 108 00:06:05,880 --> 00:06:07,440 inn i vårt nye rad. 109 00:06:07,440 --> 00:06:10,890 Når vi har gjort det, må vi bare sette padding på slutten av vår rad 110 00:06:10,890 --> 00:06:15,540 og vi vil sløyfe tilbake og fortsette i alle radene i vår nye fil. 111 00:06:15,540 --> 00:06:19,390 På slutten, må vi stenge vår gamle fil, avslutter vår nye filen, og retur 112 00:06:19,390 --> 00:06:21,540 null fordi alt gikk fint. 113 00:06:21,540 --> 00:06:24,220 >> Mitt navn er Rob, og dette var Recess. 114 00:06:24,220 --> 00:06:29,184 >> [Musikk spilles]