1 00:00:00,000 --> 00:00:10,210 >> [Tónlist spila] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: blása skulum það upp með búa. 3 00:00:13,320 --> 00:00:17,710 Í búa, the notandi vilja fara í, með stjórn lína, punktamynd mynd sem 4 00:00:17,710 --> 00:00:21,860 þeir vilja að þú mælikvarði af mörgum að þeir fara líka í, 5 00:00:21,860 --> 00:00:23,770 í stjórn lína. 6 00:00:23,770 --> 00:00:24,690 Hvernig gerum við þetta? 7 00:00:24,690 --> 00:00:28,270 >> Jæja, fyrst hlutur fyrstur, við skulum brjóta þetta niður í skrefum. 8 00:00:28,270 --> 00:00:31,510 Þú ert að fara til að vilja opna INFILE að þeir gefa þér, eins og heilbrigður eins og 9 00:00:31,510 --> 00:00:35,560 búa til og opna OUTFILE sem þú ert að fara að setja 10 00:00:35,560 --> 00:00:38,020 búa ímynd inn 11 00:00:38,020 --> 00:00:42,050 Þá, því að þú ert að breyta stærð, og því það er punktamynd, það haus, svo 12 00:00:42,050 --> 00:00:46,080 þú ert að fara að einnig uppfæra haus upplýsingar fyrir OUTFILE, 13 00:00:46,080 --> 00:00:47,950 og skrifa það inn 14 00:00:47,950 --> 00:00:51,850 Þá ert þú að fara að lesa inn að scanline af INFILE, 15 00:00:51,850 --> 00:00:56,890 pixla-fyrir-pixla, breyta stærð lárétt og skrifa þær punktar inn í 16 00:00:56,890 --> 00:01:00,910 OUTFILE, eins og tilgreint eftir mælikvarða notandans. 17 00:01:00,910 --> 00:01:03,940 >> Þú ert að fara að muna að bæta padding eins og þörf krefur. 18 00:01:03,940 --> 00:01:05,400 Meira um það síðar. 19 00:01:05,400 --> 00:01:07,790 Og þá, einnig búa lóðrétt. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Þannig að þetta er að fara til vera a lítill hluti fleiri flókið en hver gert það, en 22 00:01:13,280 --> 00:01:18,310 hvað er svipað er að copy.c mun, aftur, sanna mjög gagnleg. 23 00:01:18,310 --> 00:01:23,160 Mundu að copy.c opnar skrána, uppfærir hausinn upplýsingar fyrir 24 00:01:23,160 --> 00:01:28,250 OUTFILE, þá les í scanline, pixla-fyrir-pixla, skrifa hvert pixla 25 00:01:28,250 --> 00:01:30,510 í scanline the framleiðsla skrá er. 26 00:01:30,510 --> 00:01:37,040 >> Svo aftur, gæti fyrsta skrefið sennilega vera að CP, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 í PSET5 möppuna. 28 00:01:40,560 --> 00:01:43,920 Mundu þó, áður en þú afritað það, að ganga úr skugga um að þú skiljir 29 00:01:43,920 --> 00:01:46,600 copy.c mjög rækilega. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Svo skulum opna skrá. 32 00:01:49,880 --> 00:01:50,870 Þú veist hvernig á að gera það. 33 00:01:50,870 --> 00:01:52,600 Ég ætla að yfirgefa það fyrir þig. 34 00:01:52,600 --> 00:01:56,050 Næst skaltu uppfæra haus fyrir OUTFILE. 35 00:01:56,050 --> 00:01:59,240 Vegna þess að við höfum nýja punktamynd, við höfum nýja haus upplýsingar. 36 00:01:59,240 --> 00:02:00,970 Hvað er að breytast hér? 37 00:02:00,970 --> 00:02:06,000 Jæja, the skrá stærð er að fara að breyta vegna þess að við erum að fara að hafa meira 38 00:02:06,000 --> 00:02:07,900 punktar en áður. 39 00:02:07,900 --> 00:02:11,060 Stærð mynda er, svona, einnig að fara að breyta, eins og er 40 00:02:11,060 --> 00:02:13,050 breidd og hæð. 41 00:02:13,050 --> 00:02:17,180 >> Svo sem breytur eru þeir, nákvæmlega? 42 00:02:17,180 --> 00:02:20,960 Jæja, ef þú lítur inn í haus upplýsingar, sjá þig það er 43 00:02:20,960 --> 00:02:25,640 biSizeImage, sem táknar samtals stærð myndarinnar í bætum, 44 00:02:25,640 --> 00:02:28,340 þ.mt punkta og padding. 45 00:02:28,340 --> 00:02:32,520 biWidth er breidd myndarinnar í dílar, mínus padding. 46 00:02:32,520 --> 00:02:35,580 biHeight er hæð myndarinnar í punktum. 47 00:02:35,580 --> 00:02:39,200 Og svo þeir eru að finna í structs BITMAPFILEHEADER og 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Þú getur sagt hver einn er hver með fara að bmp.h og horfir á 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER strúktúr og sjá sem breytur eru skráð þar. 51 00:02:49,670 --> 00:02:54,700 >> Svo til að uppfæra outfiles haus upplýsingar, þú ert að fara til að vilja 52 00:02:54,700 --> 00:02:57,025 breyta þeim gildum sem hæð og breidd. 53 00:02:57,025 --> 00:03:00,570 En líkurnar eru, þú gætir þurft nokkur á haus í INFILE er 54 00:03:00,570 --> 00:03:03,670 síðar, þannig best að halda utan um bæði. 55 00:03:03,670 --> 00:03:07,770 En vera mjög skýr með þínu breyta nöfn svo að þú gerir ekki óvart 56 00:03:07,770 --> 00:03:12,490 skrifa rangt gildi í haus fyrir OUTFILE. 57 00:03:12,490 --> 00:03:16,160 >> Svo nú skulum við fá að lesa inn að scanline pixla-við-pixla. 58 00:03:16,160 --> 00:03:20,210 Aftur erum við að fara að snúa sér til traustur okkar skrá I / O bókasafn og líta á 59 00:03:20,210 --> 00:03:22,100 á fread virka. 60 00:03:22,100 --> 00:03:26,150 fread tekur í bendi til strúktúrinn sem mun innihalda bæti sem 61 00:03:26,150 --> 00:03:30,130 þú ert að lesa í, stærð hvers þáttur sem þú ert að lesa - 62 00:03:30,130 --> 00:03:34,410 aftur, sizeof er að fara að vera gagnlegt virka hér, fjölda af 63 00:03:34,410 --> 00:03:38,820 þættir stærð, stærð, sem þú ert lesa í, og síðan að lokum, 64 00:03:38,820 --> 00:03:41,310 inpointer, skrá sem þú ert að lesa úr. 65 00:03:41,310 --> 00:03:46,770 Svo þú ert að taka númer þætti af stærð frá inpointer og 66 00:03:46,770 --> 00:03:49,040 setja þau í gögnum. 67 00:03:49,040 --> 00:03:51,695 >> Nú er kominn tími til að búa lárétt. 68 00:03:51,695 --> 00:03:56,880 ef n er jafnt 2, þá fyrir hvern pixla í á INFILE, við erum að fara að skrifa það 69 00:03:56,880 --> 00:04:00,870 tvisvar í OUTFILE. 70 00:04:00,870 --> 00:04:02,210 Hvernig eigum við að skrifa skrá? 71 00:04:02,210 --> 00:04:06,400 Jæja, höfum við fwrite virka, svo við höfum tekið bendi á strúktúrinn 72 00:04:06,400 --> 00:04:10,170 sem inniheldur bytes sem þú ert að skrifa frá, og þá erum við að gefa í 73 00:04:10,170 --> 00:04:14,430 stærð, númer og framleiðsla, þar þú ert að fara að vera að skrifa það. 74 00:04:14,430 --> 00:04:19,200 Og þá til að endurtaka ferlið, verður fær einfalt endurtekningu til hliðar. 75 00:04:19,200 --> 00:04:21,740 >> En við þurfum að muna að bæta padding inn 76 00:04:21,740 --> 00:04:26,040 Hugmyndin um padding er að vel Hver pixla er þrjú bit, en 77 00:04:26,040 --> 00:04:28,940 stærð hvers scanline Verða vera margfeldi af 4 bæti. 78 00:04:28,940 --> 00:04:33,660 Þannig að ef fjöldi punkta er ekki margfeldi af 4, þurfum við að bæta við nokkrum 79 00:04:33,660 --> 00:04:36,630 padding, sem er bara zeroes. 80 00:04:36,630 --> 00:04:42,130 Nú, ólíkt Hver gert það, og ólíkt afrita, þá INFILE ímynd og 81 00:04:42,130 --> 00:04:44,370 OUTFILE skrá hafa öðruvísi hafa mismunandi padding því þeir eru 82 00:04:44,370 --> 00:04:46,360 mismunandi breiddum. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Svo kannski uppskrift vildi koma sér vel hér. 85 00:04:51,050 --> 00:04:55,120 Ég skal fara með það til þín til að finna það út, en segja þér það, að skrifa padding, 86 00:04:55,120 --> 00:04:59,360 Jæja, það er bara einfalt fputc virka, liggur í eðli 87 00:04:59,360 --> 00:05:02,200 sem þú vilt að skrifa, og þá skráin músina sem þú 88 00:05:02,200 --> 00:05:04,280 langar að skrifa til. 89 00:05:04,280 --> 00:05:08,670 Svo nú er að við höfum breytt lárétt, og síðan notað padding, 90 00:05:08,670 --> 00:05:12,030 mundu að þú þarft að færa skrá þína stöðu vísir, því þú 91 00:05:12,030 --> 00:05:14,480 getur ekki fread inn padding. 92 00:05:14,480 --> 00:05:18,230 Svo þú vilja til vera viss um að skrá staða vísir í INFILE 93 00:05:18,230 --> 00:05:19,980 er í réttum stað. 94 00:05:19,980 --> 00:05:23,970 Vegna þess að við viljum líka að búa lóðrétt. 95 00:05:23,970 --> 00:05:27,090 Við getum ekki bara teygja það lárétt, vegna þess að sérhver röð þarfir 96 00:05:27,090 --> 00:05:30,370 að afrita n sinnum. 97 00:05:30,370 --> 00:05:33,050 >> Nú, það eru nokkrir mismunandi leiðir til að gera þetta. 98 00:05:33,050 --> 00:05:39,010 Svo einn, getum við notað umrita aðferð, í að við muna öll dílar 99 00:05:39,010 --> 00:05:42,840 af tiltekinni röð í fylki, og þá erum við að skrifa þessi fylking sem 100 00:05:42,840 --> 00:05:44,730 oft og þörf krefur. 101 00:05:44,730 --> 00:05:49,530 Eða það er recopy aðferð þar, eftir að hafa lesið í eina röð í INFILE 102 00:05:49,530 --> 00:05:53,530 og þá skrifa það inn í the OUTFILE, bæta padding, fseek við 103 00:05:53,530 --> 00:05:57,250 aftur til the byrjun af upprunalegri röð, og þá endurtaka lárétt 104 00:05:57,250 --> 00:05:58,710 resizing þaðan. 105 00:05:58,710 --> 00:06:02,280 Óháð því hvaða aðferð, þó, þú munt vil að allir punkta til að endurtaka 106 00:06:02,280 --> 00:06:06,370 n sinnum, og í hvert róður að vera endurtekin n sinnum eins vel. 107 00:06:06,370 --> 00:06:09,160 >> Með þessi, munt þú hafa punktamynd stærri en lífið. 108 00:06:09,160 --> 00:06:11,760 Mitt nafn er Zamyla, og þetta er CS50. 109 00:06:11,760 --> 00:06:19,542