1 00:00:00,000 --> 00:00:10,210 >> [Muzikavimo] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: Leiskite smūgis things up su dydžio keitimo. 3 00:00:13,320 --> 00:00:17,710 Be dydžio keitimo, vartotojas turės praeiti per komandinės eilutės, rastras vaizdas, kuris 4 00:00:17,710 --> 00:00:21,860 jie nori jums masto numerį kad jie taip pat praeiti, 5 00:00:21,860 --> 00:00:23,770 į komandų eilutę. 6 00:00:23,770 --> 00:00:24,690 Kaip mes tai darome? 7 00:00:24,690 --> 00:00:28,270 >> Na, Pirmasis ko pirma, tegul padalyti į veiksmus. 8 00:00:28,270 --> 00:00:31,510 Jūs ketinate norite atidaryti infile kad jie jums, taip pat 9 00:00:31,510 --> 00:00:35,560 sukurti ir atidaryti outfile kad jūs ketinate daryti 10 00:00:35,560 --> 00:00:38,020 dydžio nuotrauka in 11 00:00:38,020 --> 00:00:42,050 Tada, nes jūs dydį, ir nes tai Bitmap, tai galva, todėl 12 00:00:42,050 --> 00:00:46,080 jūs ketinate pat atnaujina antraštę informacija apie outfile, 13 00:00:46,080 --> 00:00:47,950 ir rašyti, kad in 14 00:00:47,950 --> 00:00:51,850 Tada jūs ketinate skaityti į iš INFILE Scanline, 15 00:00:51,850 --> 00:00:56,890 pikselių-by-pixel, dydį horizontaliai ir rašyti šiuos vaizdo į 16 00:00:56,890 --> 00:01:00,910 outfile, kaip nurodyta pagal vartotojo mastu. 17 00:01:00,910 --> 00:01:03,940 >> Jūs ketinate prisiminti pridėti išklojimui, kaip reikia. 18 00:01:03,940 --> 00:01:05,400 Daugiau apie tai vėliau. 19 00:01:05,400 --> 00:01:07,790 Ir tada, taip pat keisti vertikaliai. 20 00:01:07,790 --> 00:01:08,890 Gerai. 21 00:01:08,890 --> 00:01:13,280 Taigi, tai bus šiek tiek daugiau sudėtingiau nei kas tai padarė, bet 22 00:01:13,280 --> 00:01:18,310 kas panašu tai, kad copy.c bus, vėl pasirodyti labai naudinga. 23 00:01:18,310 --> 00:01:23,160 Atminkite, kad copy.c atidaro failą, atnaujina antraštės informaciją 24 00:01:23,160 --> 00:01:28,250 outfile, tada rašoma į Scanline, pikselių-by-pixel, rašyti kiekvieną pikselį 25 00:01:28,250 --> 00:01:30,510 į išvesties failo Scanline. 26 00:01:30,510 --> 00:01:37,040 >> Taigi dar kartą, jūsų pirmas žingsnis galėtų tikriausiai būti cp, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 į savo PSET5 kataloge. 28 00:01:40,560 --> 00:01:43,920 Atminkite, nors, kol jūs nukopijuokite jį, įsitikinkite, kad jums suprasti, 29 00:01:43,920 --> 00:01:46,600 copy.c labai kruopščiai. 30 00:01:46,600 --> 00:01:47,620 Gerai. 31 00:01:47,620 --> 00:01:49,880 >> Taigi galime atidaryti failą. 32 00:01:49,880 --> 00:01:50,870 Jūs žinote, kaip tai padaryti. 33 00:01:50,870 --> 00:01:52,600 Aš ruošiuosi palikti, kad jums. 34 00:01:52,600 --> 00:01:56,050 Be to, atnaujinti antraštės informaciją už outfile. 35 00:01:56,050 --> 00:01:59,240 Kadangi mes turime naują Bitmap, mes turime naują antraštės informacijos. 36 00:01:59,240 --> 00:02:00,970 Kas keičiasi čia? 37 00:02:00,970 --> 00:02:06,000 Na, failo dydis keisis nes mes ketiname turėti daugiau 38 00:02:06,000 --> 00:02:07,900 taškų, nei anksčiau. 39 00:02:07,900 --> 00:02:11,060 Vaizdo dydis, taigi ir ketina keisti, kaip yra 40 00:02:11,060 --> 00:02:13,050 plotis ir aukštis. 41 00:02:13,050 --> 00:02:17,180 >> Taigi, kuris kintamieji yra tie, tiksliai? 42 00:02:17,180 --> 00:02:20,960 Na, jei jūs žiūrite į antraštę informacija, kaip matote yra 43 00:02:20,960 --> 00:02:25,640 biSizeImage, atstovaujanti viso dydis baitais paveiksliuko 44 00:02:25,640 --> 00:02:28,340 įskaitant pikselių ir kamšalu. 45 00:02:28,340 --> 00:02:32,520 biWidth yra iš paveikslėlio plotis pikseliais, atėmus apdaila. 46 00:02:32,520 --> 00:02:35,580 biHeight yra aukštis pikseliais paveikslėlis. 47 00:02:35,580 --> 00:02:39,200 Ir todėl tie yra išdėstytos structs BITMAPFILEHEADER ir 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Jūs galite pasakyti, kuri iš jų yra kuris, ketina bmp.h ir žiūri 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struct ir nepatikėsiu kurie kintamieji yra išvardytos. 51 00:02:49,670 --> 00:02:54,700 >> Taigi, norint atnaujinti outfiles antraštę informacija, jūs ketinate norite 52 00:02:54,700 --> 00:02:57,025 pakeisti tas vertybes aukštis ir plotis. 53 00:02:57,025 --> 00:03:00,570 Tačiau yra tikimybė, kad jums gali prireikti iš infile Header informacijos 54 00:03:00,570 --> 00:03:03,670 vėliau, todėl geriausia sekti abu. 55 00:03:03,670 --> 00:03:07,770 Bet labai aiškiai savo kintamojo pavadinimai, kad jūs ne atsitiktinai 56 00:03:07,770 --> 00:03:12,490 rašyti neteisingus vertybes už outfile antraštė. 57 00:03:12,490 --> 00:03:16,160 >> Taigi dabar galime gauti skaityti į Scanline pikselių-by-pixel. 58 00:03:16,160 --> 00:03:20,210 Vėlgi, mes ketiname kreiptis į mūsų patikimas failą I / O biblioteka, ir pažvelgti į 59 00:03:20,210 --> 00:03:22,100 fread funkcija. 60 00:03:22,100 --> 00:03:26,150 fread trunka rodyklė į struct kad bus pateiktos baitų kad 61 00:03:26,150 --> 00:03:30,130 jūs skaityti, vienas dydis elementas, kad jūs skaitote - 62 00:03:30,130 --> 00:03:34,410 vėl, sizeof bus naudinga veikti čia ir numeris 63 00:03:34,410 --> 00:03:38,820 elementai dydis, dydis, kad jūs esate skaityti, ir galiausiai, 64 00:03:38,820 --> 00:03:41,310 inpointer, failas, jūs skaitote iš. 65 00:03:41,310 --> 00:03:46,770 Taigi jūs vartojate numeris elementai dydžio nuo inpointer ir 66 00:03:46,770 --> 00:03:49,040 jų išleidimą į duomenis. 67 00:03:49,040 --> 00:03:51,695 >> Dabar atėjo laikas keisti horizontaliai. 68 00:03:51,695 --> 00:03:56,880 jei n yra lygus 2, tada kiekvienam piksel INFILE, mes ketiname rašyti 69 00:03:56,880 --> 00:04:00,870 du kartus per outfile. 70 00:04:00,870 --> 00:04:02,210 Kaip mes rašyti failus? 71 00:04:02,210 --> 00:04:06,400 Na, mes turime fwrite funkciją, todėl mes atlikome žymiklį į struct 72 00:04:06,400 --> 00:04:10,170 kad yra baitai, kad jūs raštu, o tada mes pereiname į 73 00:04:10,170 --> 00:04:14,430 dydis, numeris, ir išėjimo, kur jūs ketinate būti raštu. 74 00:04:14,430 --> 00:04:19,200 Ir tada kartoti procesą, bus galėtų paprastas kartotinis už linijos. 75 00:04:19,200 --> 00:04:21,740 >> Bet mes turime prisiminti pridėti išklojimui in 76 00:04:21,740 --> 00:04:26,040 Iš išklojimui koncepcija, kad gerai, kiekvienas pikselis yra trys įkandimų, bet 77 00:04:26,040 --> 00:04:28,940 dydis kiekvienam Scanline misa būti iš 4 baitų kartotinis. 78 00:04:28,940 --> 00:04:33,660 Taigi, jei taškų skaičių nėra kartotinis 4, mes turime pridėti šiek tiek 79 00:04:33,660 --> 00:04:36,630 kamšalas, kuris yra tik nuliai. 80 00:04:36,630 --> 00:04:42,130 Dabar, skirtingai Kas tai padarė, ir, priešingai nei kopija, tada INFILE vaizdo ir 81 00:04:42,130 --> 00:04:44,370 outfile failas yra skirtingi turi skiriasi apdaila, nes jie 82 00:04:44,370 --> 00:04:46,360 skirtingų pločių. 83 00:04:46,360 --> 00:04:46,690 >> Gerai. 84 00:04:46,690 --> 00:04:51,050 Taigi, galbūt formulė būtų praversti čia. 85 00:04:51,050 --> 00:04:55,120 Aš palikti jį jums rasti ją, bet pasakyti, kad rašyti išklojimui, 86 00:04:55,120 --> 00:04:59,360 gerai, kad tai tik paprastas fputc funkcija, einančios į simbolį 87 00:04:59,360 --> 00:05:02,200 kad jūs norite rašyti, ir tada Failas žymeklis, kad jūs 88 00:05:02,200 --> 00:05:04,280 nori rašyti. 89 00:05:04,280 --> 00:05:08,670 Taigi dabar, kad mes keičiamas horizontaliai, ir tada naudojamas išklojimui, 90 00:05:08,670 --> 00:05:12,030 Atminkite, kad jums reikia perkelti savo failą padėties indikatorius, nes jums 91 00:05:12,030 --> 00:05:14,480 negali fread į paminkštinimas. 92 00:05:14,480 --> 00:05:18,230 Taigi, jūs norite įsitikinti, kad jūsų failas pozicija rodiklis INFILE 93 00:05:18,230 --> 00:05:19,980 yra teisinga vietoje. 94 00:05:19,980 --> 00:05:23,970 Nes mes taip pat norime dydį vertikaliai. 95 00:05:23,970 --> 00:05:27,090 Mes galime ne tik ištempti jį horizontaliai, nes kiekviena eilutė poreikiai 96 00:05:27,090 --> 00:05:30,370 būti kopijuojami n kartų. 97 00:05:30,370 --> 00:05:33,050 >> Dabar, yra keletas skirtingų būdų, kaip tai padaryti. 98 00:05:33,050 --> 00:05:39,010 Taigi vienas, mes galime naudoti perrašyti metodą, kad mes prisimename visus pikselių 99 00:05:39,010 --> 00:05:42,840 iš suteikta eilutėje masyvo ir tada rašome, kad matrica, kaip 100 00:05:42,840 --> 00:05:44,730 tiek kartų, kiek reikia. 101 00:05:44,730 --> 00:05:49,530 Arba ten atkartoja metodas, kai, perskaičius vienoje eilėje į INFILE 102 00:05:49,530 --> 00:05:53,530 ir tada rašyti, kad į outfile, pridėti išklojimui, mes fseek 103 00:05:53,530 --> 00:05:57,250 Grįžti į pradinį eilės pradžioje, ir tada pakartokite horizontalus 104 00:05:57,250 --> 00:05:58,710 dydį iš ten. 105 00:05:58,710 --> 00:06:02,280 Nepaisant metodo, nors, jums norime, kad kiekvienas pikselis būti pakartota 106 00:06:02,280 --> 00:06:06,370 n kartų, o kiekviena eilutė turi būti kartojamas n kartų, taip pat. 107 00:06:06,370 --> 00:06:09,160 >> Su tuo, jūs turite bitmap didesnis nei gyvenime. 108 00:06:09,160 --> 00:06:11,760 Mano vardas Zamyla, ir tai yra CS50. 109 00:06:11,760 --> 00:06:19,542