1 00:00:00,000 --> 00:00:12,240 >> [Speel van musiek] 2 00:00:12,240 --> 00:00:15,870 >> ROB BOWDEN: Hi, ek is Rob, laat probeer om dit op vir die grootte. 3 00:00:15,870 --> 00:00:21,100 So, ons is weer aan die gang te begin met basies 'n afskrif van die copy.c, en 4 00:00:21,100 --> 00:00:22,860 Maak 'n paar veranderinge. 5 00:00:22,860 --> 00:00:26,280 Let dadelik sien ons 'n verandering, waar in plaas van om te kyk of 6 00:00:26,280 --> 00:00:30,440 argc nie gelyk 3, ons wil om te kyk As argc nie gelyk 4, aangesien 7 00:00:30,440 --> 00:00:34,350 nou is ons nie net om in 'n infile en outfile, maar ons is ook in die neem van 8 00:00:34,350 --> 00:00:38,980 n, wat die bedrag is wat ons is skalering die oorspronklike beeld deur. 9 00:00:38,980 --> 00:00:44,340 Sodra ons is seker van dat ons net omskep N 'n heelgetal met behulp atoi. 10 00:00:44,340 --> 00:00:48,760 >> So, nou gaan ons 'n paar te skep aliasse, bel bevat SPASIES 2 infile, en 11 00:00:48,760 --> 00:00:54,240 bevat SPASIES 3 outfile, want bevat SPASIES 2 en bevat SPASIES 3 is nie baie nuttig name. 12 00:00:54,240 --> 00:00:58,510 Nou wil ons om seker te maak om seker te maak n ' binne die grense wat ons verwag, sodat die 13 00:00:58,510 --> 00:01:02,910 spec bepaal dat as dit is minder as of gelyk aan nul, of meer as 100, 14 00:01:02,910 --> 00:01:08,580 dan is dit 'n ongeldige resize faktor, en ons moet die gebruiker van daardie waarsku. 15 00:01:08,580 --> 00:01:13,090 >> Sodra ons verby al wat ons kan Uiteindelik ons ​​infile oop te maak, en ons moet 16 00:01:13,090 --> 00:01:16,270 aan fout nagaan om seker te maak dat die opening het nie versuim om een ​​of ander rede. 17 00:01:16,270 --> 00:01:19,860 Ons moet ook ons ​​outfile oop te maak, en weer fout nagaan om seker te maak dat 18 00:01:19,860 --> 00:01:21,250 het nie versuim om een ​​of ander rede. 19 00:01:21,250 --> 00:01:26,270 Maar seker wees as die opening van die outfile misluk wat ons nodig het om te sluit 20 00:01:26,270 --> 00:01:29,040 die infile, wat reeds geopen. 21 00:01:29,040 --> 00:01:33,690 >> So, in die veronderstelling dat nie slaag nie, dan we're - net soos in copy.c-- 22 00:01:33,690 --> 00:01:36,140 gaan lees in die kop uit die infile. 23 00:01:36,140 --> 00:01:40,130 Ons gaan om seker te maak dit is 'n geldige bitmap, maar nou is ons gaan 'n paar om te doen 24 00:01:40,130 --> 00:01:41,620 dinge 'n bietjie anders. 25 00:01:41,620 --> 00:01:44,870 So die eerste, ons gaan om te wil onthou die oorspronklike hoogte en breedte 26 00:01:44,870 --> 00:01:48,290 van die infile, want ons gaan word om dit te verander vir die outfile. 27 00:01:48,290 --> 00:01:53,890 So nou onthou dat vir vreemde redes bi.biheight, is negatief, en 28 00:01:53,890 --> 00:01:58,670 sodat die werklike hoogte, in 'n positiewe, ons wil die absolute waarde te neem. 29 00:01:58,670 --> 00:02:02,580 >> Nou, is die padding gaan dieselfde wees berekening soos dit was in copy.c, 30 00:02:02,580 --> 00:02:06,060 gebruik van die ou breedte, en nou is ons gaan eintlik om te verander 31 00:02:06,060 --> 00:02:07,320 Wat is in ons kop. 32 00:02:07,320 --> 00:02:11,200 So ons gaan ons breedte vermenigvuldig met n, omdat ons die breedte skalering deur 33 00:02:11,200 --> 00:02:15,100 n, vermenigvuldig die hoogte deur n, aangesien ons skaal deur n, en nou het ons ' 34 00:02:15,100 --> 00:02:19,250 die berekening vir 'n nuwe padding gebaseer op die nuwe breedte. 35 00:02:19,250 --> 00:02:21,840 >> So nou het ons 'n paar te verander ander velde in ons kop. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage veronderstel is om te wees die grootte van al die grepe in die pixels 37 00:02:26,890 --> 00:02:28,520 en padding van die beeld. 38 00:02:28,520 --> 00:02:34,190 En so het die grootte van 'n enkele ry van ons beeld is die grootte van die RGB trippel, die grootte 39 00:02:34,190 --> 00:02:39,430 van 'n enkele pixel, keer die nommer van pixels in 'n ry, plus die padding op 40 00:02:39,430 --> 00:02:40,910 die einde van die ry. 41 00:02:40,910 --> 00:02:45,200 En dan gaan ons wat om te vermeerder deur absolute waarde van ons hoogte te kry 42 00:02:45,200 --> 00:02:48,350 die totale aantal grepe in die beeld data. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize is net die totale aantal grepe ons beeld data, so 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, plus die grootte van ons hoofde. 45 00:02:56,530 --> 00:02:59,850 So, toe te voeg op die grootte van bitmap lêer kop, en die grootte van bitmap info 46 00:02:59,850 --> 00:03:00,800 kop, OK. 47 00:03:00,800 --> 00:03:03,170 So dit is al wat ons nodig het om te verander in ons kop. 48 00:03:03,170 --> 00:03:07,020 Nou kan ons die bitmap lêer kop skryf ons outfile, en ons bitmap info 49 00:03:07,020 --> 00:03:09,880 header ons outfile, en nou ons is gereed om te begin gaan 50 00:03:09,880 --> 00:03:11,990 oor die werklike pixels. 51 00:03:11,990 --> 00:03:15,720 >> So wil ons Itereer oor die infile se scan lyne. 52 00:03:15,720 --> 00:03:17,730 So wil ons Itereer oor oldheight. 53 00:03:17,730 --> 00:03:20,830 Dit is hoekom ons nodig het om te onthou die oorspronklike hoogte, voordat ons dit verander 54 00:03:20,830 --> 00:03:23,040 en afgeskaal dit deur n. 55 00:03:23,040 --> 00:03:27,810 Nou gaan ons 'n enkele om te lees ry van die infile in 'n 56 00:03:27,810 --> 00:03:30,630 buffer grootte oldwidth. 57 00:03:30,630 --> 00:03:36,190 So hier is ons freading grootte van RGB trippel, een pixel, en ou breedte van 58 00:03:36,190 --> 00:03:39,760 hulle van die infile in ons buffer. 59 00:03:39,760 --> 00:03:43,480 En wat gaan 'n hele te wees ry in hierdie reeks. 60 00:03:43,480 --> 00:03:50,390 So nou, ons wil Itereer n keer te druk hierdie ry ons outfile n keer. 61 00:03:50,390 --> 00:03:52,510 En dit is wat hierdie lus is om te doen. 62 00:03:52,510 --> 00:03:57,910 Hierdie innerlike lus is iterating oor die ry self, oor die skikking, drukwerk 63 00:03:57,910 --> 00:04:00,710 elke pixel in die skikking n keer. 64 00:04:00,710 --> 00:04:04,510 So het die nulde element word gedruk n keer, is die eerste element wat 65 00:04:04,510 --> 00:04:05,660 gedrukte n keer. 66 00:04:05,660 --> 00:04:10,820 En dit is soort van hoe ons gaan horisontaal skaal in die outfile, en 67 00:04:10,820 --> 00:04:13,390 hierdie lus, want ons is herhaling n tye, is hoe ons gaan 68 00:04:13,390 --> 00:04:15,580 vertikaal skaal. 69 00:04:15,580 --> 00:04:19,850 >> Hier, sien ons dat ons nodig het om by te voeg die padding aan die einde van elke ry. 70 00:04:19,850 --> 00:04:25,050 Dit is waarom dit is binne-in die for-lus dit is die druk van die N rye van net 71 00:04:25,050 --> 00:04:28,400 hierdie een ry van die infile. 72 00:04:28,400 --> 00:04:32,150 Dan hier, ek gaan oor te slaan oor die padding in die infile, aangesien een keer 73 00:04:32,150 --> 00:04:34,560 ons klaar is met een ry van die infile, ons gee nie om oor 74 00:04:34,560 --> 00:04:35,290 wat die padding was. 75 00:04:35,290 --> 00:04:37,110 Ons wil net te kry om die tweede ry. 76 00:04:37,110 --> 00:04:40,870 En dan sal ons lus terug en doen alles dit weer vir die tweede ry. 77 00:04:40,870 --> 00:04:44,406 >> Ten slotte, wanneer ons klaar is met al hierdie dinge, ons kan die infile sluit, naby 78 00:04:44,406 --> 00:04:47,430 die outfile, en terugkeer 0, want ons is gedoen. 79 00:04:47,430 --> 00:04:50,330 >> My naam is Rob, en dit was resize. 80 00:04:50,330 --> 00:04:54,934 >> [Speel van musiek]