1 00:00:00,000 --> 00:00:10,210 >> [Mūzikas atskaņošanai] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA Chan: Let 's trieciens lietas, līdz ar izmērus. 3 00:00:13,320 --> 00:00:17,710 In izmērus, lietotājs pāriet, izmantojot komandrindas, bitmap attēlu, kas 4 00:00:17,710 --> 00:00:21,860 viņi vēlas, lai jūs mēroga ar numuru ka tie arī pāriet, 5 00:00:21,860 --> 00:00:23,770 komandrindas. 6 00:00:23,770 --> 00:00:24,690 Kā mēs to darām? 7 00:00:24,690 --> 00:00:28,270 >> Nu, pirmkārt lietas, pirmkārt, pieņemsim lauzt šo leju posmos. 8 00:00:28,270 --> 00:00:31,510 Jūs gatavojas vēlaties, lai atvērtu INFILE ka tie dod jums, kā arī 9 00:00:31,510 --> 00:00:35,560 izveidot un atvērt outfile ka jūs gatavojas īstenot 10 00:00:35,560 --> 00:00:38,020 mainīti attēlu iekšā 11 00:00:38,020 --> 00:00:42,050 Tad, jo jūs esat izmēru maiņas, un jo tas ir bitkarte, tā header, tāpēc 12 00:00:42,050 --> 00:00:46,080 jūs gatavojas arī atjaunināt galveni Informācija par OUTFILE, 13 00:00:46,080 --> 00:00:47,950 un rakstīt, ka iekšā 14 00:00:47,950 --> 00:00:51,850 Tad jūs gatavojaties izlasīt par scanline no INFILE, 15 00:00:51,850 --> 00:00:56,890 pixel-by-pikseļu, izmēru horizontāli un rakstot šos pikseļus uz 16 00:00:56,890 --> 00:01:00,910 outfile, kā norādīts ar lietotāja skalas. 17 00:01:00,910 --> 00:01:03,940 >> Jūs gatavojas atcerēties pievienot polsterējums, ja nepieciešams. 18 00:01:03,940 --> 00:01:05,400 Vairāk par šo vēlāk. 19 00:01:05,400 --> 00:01:07,790 Un tad arī mainīt vertikāli. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Tātad šis būs mazliet vairāk sarežģītāka, nekā Kas izdarīts, bet 22 00:01:13,280 --> 00:01:18,310 kas ir līdzīgs, ka copy.c būs, atkal izrādīties ļoti noderīga. 23 00:01:18,310 --> 00:01:23,160 Atcerieties, ka copy.c atver failu, aktualizē galvenes informāciju 24 00:01:23,160 --> 00:01:28,250 outfile, tad skan uz scanline, pixel-by-pikseļu, rakstot katru pikseli 25 00:01:28,250 --> 00:01:30,510 uz izejas faila scanline. 26 00:01:30,510 --> 00:01:37,040 >> Tātad vēlreiz, jūsu pirmais solis varētu droši jābūt KP, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 savā PSET5 direktorijā. 28 00:01:40,560 --> 00:01:43,920 Atcerieties, lai gan, pirms jūs kopēt to, lai pārliecinātos, ka jūs saprotat 29 00:01:43,920 --> 00:01:46,600 Ļoti rūpīgi copy.c. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Tā ļauj atvērt failu. 32 00:01:49,880 --> 00:01:50,870 Jūs zināt, kā to izdarīt. 33 00:01:50,870 --> 00:01:52,600 Es esmu gatavojas atstāt, ka jums. 34 00:01:52,600 --> 00:01:56,050 Nākamais, atjaunināt galvenes informāciju par OUTFILE. 35 00:01:56,050 --> 00:01:59,240 Tāpēc, ka mums ir jauns bitmap, mums ir jauna galvenes info. 36 00:01:59,240 --> 00:02:00,970 Kas mainās šeit? 37 00:02:00,970 --> 00:02:06,000 Nu, faila izmērs mainīsies tāpēc, ka mēs ejam, lai būtu vairāk 38 00:02:06,000 --> 00:02:07,900 pikseļu nekā pirms tam. 39 00:02:07,900 --> 00:02:11,060 Attēla izmērs ir, līdz ar to arī mainīsies, jo ir 40 00:02:11,060 --> 00:02:13,050 platums un augstums. 41 00:02:13,050 --> 00:02:17,180 >> Tātad, kas mainīgie ir tie, kas precīzi? 42 00:02:17,180 --> 00:02:20,960 Nu, ja paskatās uz galveni informāciju, jūs redzat, ka ir 43 00:02:20,960 --> 00:02:25,640 biSizeImage, kas atspoguļo kopējo attēla baitos lielums, 44 00:02:25,640 --> 00:02:28,340 ieskaitot pikseļiem un polsterējumu. 45 00:02:28,340 --> 00:02:32,520 biWidth ir platums attēla pikseļos, mīnus polsterējums. 46 00:02:32,520 --> 00:02:35,580 biHeight ir augstums attēls pikseļos. 47 00:02:35,580 --> 00:02:39,200 Un tāpēc tie ir ietverti structs BITMAPFILEHEADER un 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Jūs varat pateikt, kura no tām ir kas pēc dodas uz bmp.h un meklē 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struktūrai un redzēt kas mainīgie ir uzskaitītas. 51 00:02:49,670 --> 00:02:54,700 >> Tātad, lai atjauninātu outfiles galveni informāciju, jūs gatavojas vēlaties 52 00:02:54,700 --> 00:02:57,025 mainīt šos vērtības augstumu un platumu. 53 00:02:57,025 --> 00:03:00,570 Bet izredzes ir, jums var būt nepieciešams zināms no inFile ir galvenes informāciju 54 00:03:00,570 --> 00:03:03,670 vēlāk, tāpēc vislabāk ir sekot abiem. 55 00:03:03,670 --> 00:03:07,770 Bet ir ļoti skaidrs, ar savu mainīgo vārdus, lai jums nav nejauši 56 00:03:07,770 --> 00:03:12,490 rakstīt nepareizas vērtības header par OUTFILE. 57 00:03:12,490 --> 00:03:16,160 >> Tātad tagad pieņemsim nokļūt izlasīšanu scanline pikseļu pa pikseļu. 58 00:03:16,160 --> 00:03:20,210 Atkal, mēs spēsim pārvērst mūsu uzticamo failu I / O bibliotēka, un apskatīt 59 00:03:20,210 --> 00:03:22,100 fread funkcija. 60 00:03:22,100 --> 00:03:26,150 fread notiek ar rādītāju uz struct kas satur baiti, kas 61 00:03:26,150 --> 00:03:30,130 jūs lasījumā, lielums katras elements, ka jūs lasāt - 62 00:03:30,130 --> 00:03:34,410 atkal, sizeof būs noderīga darboties šeit, skaits 63 00:03:34,410 --> 00:03:38,820 elementi lieluma, lielums, kas tu esi lasīšanu, un visbeidzot, 64 00:03:38,820 --> 00:03:41,310 inpointer, failu, jūs lasāt no. 65 00:03:41,310 --> 00:03:46,770 Tātad jūs lietojat skaits elementus izmēru no inpointer, un 66 00:03:46,770 --> 00:03:49,040 liekot tos datus. 67 00:03:49,040 --> 00:03:51,695 >> Tagad ir pienācis laiks, lai mainītu horizontāli. 68 00:03:51,695 --> 00:03:56,880 ja n ir vienāds ar 2, tad katram pikselim infile, mēs ejam, lai rakstīt 69 00:03:56,880 --> 00:04:00,870 divreiz OUTFILE. 70 00:04:00,870 --> 00:04:02,210 Kā mēs rakstīt failus? 71 00:04:02,210 --> 00:04:06,400 Nu, mums ir fwrite funkciju, lai Mēs esam veikuši rādītāju uz struct 72 00:04:06,400 --> 00:04:10,170 kas satur baiti, kas jūs esat rakstiski, un pēc tam mēs caurlaide 73 00:04:10,170 --> 00:04:14,430 izmērs, numuru, un izejas, kur jūs esat būs rakstiski to. 74 00:04:14,430 --> 00:04:19,200 Un pēc tam atkārtojiet procesu, būs iespēja vienkārši atkārtotais par cilpu. 75 00:04:19,200 --> 00:04:21,740 >> Bet mums ir jāatceras pievienot polsterējums collas 76 00:04:21,740 --> 00:04:26,040 Polsterējumu koncepcija ir tāda, ka, labi, katram pikselim ir trīs kodumi, bet 77 00:04:26,040 --> 00:04:28,940 lielums katra scanline misas jābūt dalās ar 4 baiti. 78 00:04:28,940 --> 00:04:33,660 Tātad, ja pikseļu skaits nav dalās ar 4, mums ir nepieciešams pievienot dažas 79 00:04:33,660 --> 00:04:36,630 polsterējums, kas ir tikai nulles. 80 00:04:36,630 --> 00:04:42,130 Tagad, atšķirībā Kas darījuši to, un atšķirībā kopēt, tad infile attēlu un 81 00:04:42,130 --> 00:04:44,370 outfile fails ir atšķirīgs, ir atšķirīga polsterējums tāpēc, ka viņi 82 00:04:44,370 --> 00:04:46,360 dažādu platumu. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Tāpēc varbūt formula būtu noderēs šeit. 85 00:04:51,050 --> 00:04:55,120 Es atstāt to jums, lai atrastu to ārā, bet pateiks, ka, lai uzrakstītu polsterējums, 86 00:04:55,120 --> 00:04:59,360 labi, tas ir tikai vienkāršs fputc funkcija, iet raksturā 87 00:04:59,360 --> 00:05:02,200 ka jūs vēlaties rakstīt, un pēc tam failu rādītājs, ka jūs 88 00:05:02,200 --> 00:05:04,280 vēlas rakstīt. 89 00:05:04,280 --> 00:05:08,670 Tāpēc tagad, ka mēs esam mainīti horizontāli, un pēc tam izmanto polsterējums, 90 00:05:08,670 --> 00:05:12,030 atcerieties, ka jums ir nepieciešams, lai pārvietotu failu stāvokļa indikators, jo jums 91 00:05:12,030 --> 00:05:14,480 nevar fread uz polsterējumu. 92 00:05:14,480 --> 00:05:18,230 Tātad jūs vēlaties, lai pārliecinātos, ka jūsu fails pozīcijas rādītājs INFILE 93 00:05:18,230 --> 00:05:19,980 atrodas pareizā punktā. 94 00:05:19,980 --> 00:05:23,970 Jo mēs arī vēlamies, lai izmērus vertikāli. 95 00:05:23,970 --> 00:05:27,090 Mēs nevaram vienkārši stiept to horizontāli, jo katru rindu vajadzībām 96 00:05:27,090 --> 00:05:30,370 kopēt n reizes. 97 00:05:30,370 --> 00:05:33,050 >> Tagad tur ir vairākas atšķirīgas veidi, kā to izdarīt. 98 00:05:33,050 --> 00:05:39,010 Tātad viens, mēs varam izmantot pārrakstīt metodi, kas ka atceramies visi pikseļi 99 00:05:39,010 --> 00:05:42,840 gada dots rindu masīvā, un Tad mēs rakstām, ka masīvs kā 100 00:05:42,840 --> 00:05:44,730 daudz reižu, cik nepieciešams. 101 00:05:44,730 --> 00:05:49,530 Vai tur ir recopy metode, kurā, izlasot vienā rindā ar INFILE 102 00:05:49,530 --> 00:05:53,530 un tad rakstiski, ka uz OUTFILE, pievienojot polsterējums, mēs fseek 103 00:05:53,530 --> 00:05:57,250 atpakaļ uz sākumu sākotnējā rindā, un tad atkārtojiet horizontālā 104 00:05:57,250 --> 00:05:58,710 izmēru no turienes. 105 00:05:58,710 --> 00:06:02,280 Neatkarīgi no metodes, lai gan, jūs vēlamies katru pikseli ir jāatkārto 106 00:06:02,280 --> 00:06:06,370 n reizes, un katrā rindā, lai būtu atkārto n reizes, kā arī. 107 00:06:06,370 --> 00:06:09,160 >> Ar to, ka jums ir bitmap lielāks nekā dzīve. 108 00:06:09,160 --> 00:06:11,760 Mans vārds ir Zamyla, un tas ir CS50. 109 00:06:11,760 --> 00:06:19,542