1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [Speel van musiek] 3 00:00:12,470 --> 00:00:13,210 >> ROB BOWDEN: Hi. 4 00:00:13,210 --> 00:00:16,870 Ek is Rob en laat die grootte hierdie probleem. 5 00:00:16,870 --> 00:00:20,990 So ons gaan begin met copy.c as 'n sjabloon, maar ons gaan wees 6 00:00:20,990 --> 00:00:23,340 maak nogal 'n paar veranderinge. 7 00:00:23,340 --> 00:00:27,570 >> Nou sien ons ons onmiddellik 'n verander waar ons nie meer te keur 8 00:00:27,570 --> 00:00:31,560 vir ons rxc nie gelyk 3, maar nou Ons monitor rc nie gelyk 4. 9 00:00:31,560 --> 00:00:34,670 Sedert ons wil ook in te sluit, in Benewens die lêer in en uit lêers 10 00:00:34,670 --> 00:00:39,550 argumente, f wat gaan om dit te wees faktor waarmee ons te skaal. 11 00:00:39,550 --> 00:00:45,430 >> So wanneer ons seker is van wat ons wil gebruik s scan f die string te omskep 12 00:00:45,430 --> 00:00:49,030 argv1 na 'n float. 13 00:00:49,030 --> 00:00:51,330 En ons gaan te stoor wat in faktor. 14 00:00:51,330 --> 00:00:55,180 Hierdie addisionele karakter is om seker te dat ons nie eintlik aangaan 15 00:00:55,180 --> 00:00:59,200 iets soos 1,4 ABC op die opdrag lyn. 16 00:00:59,200 --> 00:01:02,960 >> Nou gaan ons 'n paar aliasse te skep sedert RV2 en RV3 is nie 17 00:01:02,960 --> 00:01:04,310 baie nuttig name. 18 00:01:04,310 --> 00:01:07,660 Ons is, in plaas daarvan, gaan roep hulle in die lêer en uit lêer. 19 00:01:07,660 --> 00:01:11,580 Nou gaan ons om seker te maak dat ons faktor was eintlik geldig is. 20 00:01:11,580 --> 00:01:16,330 So as faktor minder as of gelyk aan nul of groter as 100, en dan as per 21 00:01:16,330 --> 00:01:19,660 die spec, moet ons verwerp dat faktor. 22 00:01:19,660 --> 00:01:23,890 >> Wanneer ons seker is dat dit is goed, nou kan ons maak die n lêer, en ons het om te maak 23 00:01:23,890 --> 00:01:25,950 seker te maak dat dit suksesvol oopgemaak. 24 00:01:25,950 --> 00:01:28,630 As dit gedoen het nie, sal die terugkeer van nul. 25 00:01:28,630 --> 00:01:30,390 Ons gaan die uit lêer oop te maak. 26 00:01:30,390 --> 00:01:33,420 En weer, ons wil om te kyk om te maak seker dit is suksesvol oopgemaak. 27 00:01:33,420 --> 00:01:37,270 En as dit nie suksesvol oop te maak, dan Ons moet ook seker te maak wees 28 00:01:37,270 --> 00:01:40,870 die n lêer wat oorspronklik suksesvol oopgemaak het, of anders het ons 'n 29 00:01:40,870 --> 00:01:42,600 geheue lek. 30 00:01:42,600 --> 00:01:46,350 >> So nou gaan ons om te lees in die bitmap lêer kop en bitmap info 31 00:01:46,350 --> 00:01:48,890 header van die n lêer. 32 00:01:48,890 --> 00:01:52,360 Ons gaan om seker te maak dat die n lêer 'n geldige bitmap. 33 00:01:52,360 --> 00:01:52,640 OK. 34 00:01:52,640 --> 00:01:55,100 >> So nou het ons gaan begin maak 'n paar veranderinge. 35 00:01:55,100 --> 00:01:58,840 So, want ons gaan word verander dinge, moet ons eers wil om te onthou die 36 00:01:58,840 --> 00:02:01,510 ou breedte van die n lêer. 37 00:02:01,510 --> 00:02:05,160 Ons wil die ou padding van om te onthou die n lêer met dieselfde berekening 38 00:02:05,160 --> 00:02:06,990 van copy.c. 39 00:02:06,990 --> 00:02:09,840 >> En nou gaan ons te verander die bitmap info kop. 40 00:02:09,840 --> 00:02:13,630 En so is ons beide die breedte vermenigvuldig en die hoogte deur faktor sedert 41 00:02:13,630 --> 00:02:15,750 dit is wat ons deur is skaal. 42 00:02:15,750 --> 00:02:18,420 Ons gaan om te bepaal wat die nuwe padding van die lêer deur 43 00:02:18,420 --> 00:02:21,140 die gebruik van die nuwe breedte. 44 00:02:21,140 --> 00:02:27,330 En ons gaan die nuwe te bepaal grootte van die beeld met behulp van die aantal 45 00:02:27,330 --> 00:02:31,610 grepe in 'n enkele ry wat gaan die aantal pixels in die ry 46 00:02:31,610 --> 00:02:35,960 keer die grootte van 'n pixel plus die aantal grepe van padding aan die einde 47 00:02:35,960 --> 00:02:40,310 van die ry, en vermenigvuldig alles wat deur die aantal rye wat ons het. 48 00:02:40,310 --> 00:02:43,800 So wat is die aantal grepe Ons het in ons beeld data. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize nou gaan om die nommer te wees grepe ons beeld beta plus 50 00:02:48,190 --> 00:02:49,350 die grootte van ons hoofde. 51 00:02:49,350 --> 00:02:53,910 So plus grootte van bitmap lêer kop en grootte van bitmap info kop. 52 00:02:53,910 --> 00:02:54,510 OK. 53 00:02:54,510 --> 00:02:56,440 So dit is dit vir ons hoofde. 54 00:02:56,440 --> 00:02:59,030 Ons kan die lêer kop skryf en info kop aan ons uit 55 00:02:59,030 --> 00:03:01,590 dien, en ons is goed. 56 00:03:01,590 --> 00:03:03,800 >> Nou is dit tyd om werklik te begin skryf die pixel 57 00:03:03,800 --> 00:03:05,120 data na die lêer uit. 58 00:03:05,120 --> 00:03:10,460 Ons gaan 'n buffer grootte te verklaar ou breedte RGB verdriedubbel, en ons is 59 00:03:10,460 --> 00:03:13,790 gaan 'n veranderlike genoem te verklaar ry lam, wat ons gaan 60 00:03:13,790 --> 00:03:15,640 aanvanklik gelyk aan negatiewe 1. 61 00:03:15,640 --> 00:03:19,090 Ons sal sien dat ons gaan word met behulp dat ten einde tred te hou van wat 62 00:03:19,090 --> 00:03:22,640 ry ons tans gelaai in hierdie buffer. 63 00:03:22,640 --> 00:03:23,290 OK. 64 00:03:23,290 --> 00:03:28,750 >> So nou in teenstelling met die standaard uitgawe, in plaas van iterating oor aan die in 65 00:03:28,750 --> 00:03:32,900 lêer, gaan ons Itereer oor elke ry in die buite-lêer en uit te vind 66 00:03:32,900 --> 00:03:38,130 wat ry in die lêer in wat ons wil plaas in die ry in die buite-lêer. 67 00:03:38,130 --> 00:03:44,930 So iterating oor al die rye in die buite lêer met die nuwe hoogte, ons is die eerste 68 00:03:44,930 --> 00:03:48,890 gaan die ry in die ou te bepaal dien ons gaan gebruik, wat ons 69 00:03:48,890 --> 00:03:53,560 gaan doen deur die neem van die huidige ry, gedeel deur faktor. 70 00:03:53,560 --> 00:03:58,000 So wat gaan ons te gee die ry in die ou lêer wat ons wil hê. 71 00:03:58,000 --> 00:04:03,310 >> So nou as ry afgestomp is nie gelyk aan die ou y, ons gaan die ry om te lees 72 00:04:03,310 --> 00:04:05,940 wat ons wil in ons huidige ry buffer. 73 00:04:05,940 --> 00:04:07,700 So hoe gaan ons dit doen? 74 00:04:07,700 --> 00:04:11,650 Eerste, ons gaan om uit te vind die posisie wat begin die ry in die 75 00:04:11,650 --> 00:04:13,100 oorspronklike lêer. 76 00:04:13,100 --> 00:04:18,630 So daardie posisie gaan wees verlede almal van ons kop-en 77 00:04:18,630 --> 00:04:21,589 nou verby 'n ou y rye. 78 00:04:21,589 --> 00:04:23,880 >> En so hoeveel bytes is in 'n enkele ry? 79 00:04:23,880 --> 00:04:28,740 Weereens, die grootte van RGB trippel keer ou breedte plus ou padding, so dit is die 80 00:04:28,740 --> 00:04:30,640 aantal grepe in 'n enkele ry. 81 00:04:30,640 --> 00:04:33,680 En ons wil afgelope ou y rye te slaan. 82 00:04:33,680 --> 00:04:37,580 So ons gaan f soek en ons is gebruik soek stel om te begin van die 83 00:04:37,580 --> 00:04:39,100 begin van 'n lêer. 84 00:04:39,100 --> 00:04:42,740 Ons gaan om te f probeer om hierdie posisie in die lêer, om ons by die 85 00:04:42,740 --> 00:04:46,500 die begin van die ry ons wil om te lees in ons buffer. 86 00:04:46,500 --> 00:04:48,510 >> Ons gaan ry te stel lam gelyk aan ou y. 87 00:04:48,510 --> 00:04:53,080 So nou as ons lus rug en ons wil gebruik dieselfde ry in ons uit lêer, 88 00:04:53,080 --> 00:04:55,970 dan is ons nie van plan om te lees dit weer onnodig. 89 00:04:55,970 --> 00:04:59,310 So regtig, ry afgestomp is net 'n optimalisering. 90 00:04:59,310 --> 00:05:05,500 >> Ten slotte, ons gaan om te lees in die huidige ry die ou breedte RGB verdriedubbel 91 00:05:05,500 --> 00:05:08,040 wat ons wil van die oorspronklike lêer. 92 00:05:08,040 --> 00:05:12,270 So nou huidig ​​ry bevat die pixels van die oorspronklike lêer wat ons wil 93 00:05:12,270 --> 00:05:14,200 skryf in die buite-lêer. 94 00:05:14,200 --> 00:05:18,960 So nou, hou net bokant, in plaas van iterating oor die ou lêer, moet ons 95 00:05:18,960 --> 00:05:22,560 om dit te Itereer oor die nuwe lêers rye. 96 00:05:22,560 --> 00:05:27,450 Wel, hier, in plaas van iterating oor al van die ou pixels wat in huidige ry, 97 00:05:27,450 --> 00:05:31,210 ons wil Itereer oor al die pixels in ons nuwe lêer in hierdie 98 00:05:31,210 --> 00:05:32,480 spesifieke ry. 99 00:05:32,480 --> 00:05:34,140 >> Waarom wil ons dit te doen? 100 00:05:34,140 --> 00:05:38,960 Omdat ons hier te sien dat ons nie eintlik noodwendig met al die 101 00:05:38,960 --> 00:05:41,020 pixels in die oorspronklike lêer. 102 00:05:41,020 --> 00:05:46,630 Want as ons krimp, ons kan werklik die pixels te slaan. 103 00:05:46,630 --> 00:05:48,090 En ons sien dat dit - 104 00:05:48,090 --> 00:05:49,690 x gedeel deur faktor - 105 00:05:49,690 --> 00:05:55,620 goed weerspieël hier waar ons sê y gedeel deur faktor om uit te vind wat 106 00:05:55,620 --> 00:06:02,480 die ou y-de ry ooreenstem met die y-de ry in hierdie nuwe lêer. 107 00:06:02,480 --> 00:06:05,880 >> Nou gaan ons almal om te skryf hierdie pixels van die ou ry 108 00:06:05,880 --> 00:06:07,440 in ons nuwe ry. 109 00:06:07,440 --> 00:06:10,890 Sodra ons dit gedoen het, moet ons net sit die padding aan die einde van ons ry 110 00:06:10,890 --> 00:06:15,540 En ons sal loop terug en gaan voort om al die rye in ons nuwe lêer. 111 00:06:15,540 --> 00:06:19,390 Aan die einde, moet ons ons ou te sluit dien, sluit ons nuwe lêer, en terugkeer 112 00:06:19,390 --> 00:06:21,540 nul, want alles gaan goed. 113 00:06:21,540 --> 00:06:24,220 >> My naam is Rob en dit was reses. 114 00:06:24,220 --> 00:06:29,184 >> [Speel van musiek]