1 00:00:00,000 --> 00:00:10,210 >> [MUSIC nagpe-play] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA Chan: suntok sabihin bagay up sa Baguhin ang laki. 3 00:00:13,320 --> 00:00:17,710 Sa baguhin ang laki, ay pumasa sa mga gumagamit, sa pamamagitan ng sa command line, isang bitmap imahe na 4 00:00:17,710 --> 00:00:21,860 gusto nila sa iyo upang masukat sa pamamagitan ng isang numero na sila rin pumasa sa, 5 00:00:21,860 --> 00:00:23,770 sa linya ng command. 6 00:00:23,770 --> 00:00:24,690 Paano ang gagawin namin ito? 7 00:00:24,690 --> 00:00:28,270 >> Well, unang bagay muna, sabihin masira ito down sa mga hakbang na ito. 8 00:00:28,270 --> 00:00:31,510 Ikaw ay pagpunta sa nais upang buksan ang infile na bigyan sila mo, pati na rin ang 9 00:00:31,510 --> 00:00:35,560 lumikha at buksan ang outfile na ka pagpunta sa ilagay ang 10 00:00:35,560 --> 00:00:38,020 Binabago ang laki ng imahe in 11 00:00:38,020 --> 00:00:42,050 Pagkatapos, dahil naka-pagbabago ng laki, at dahil ito ay isang bitmap, ito ang isang header, kaya 12 00:00:42,050 --> 00:00:46,080 ka pagpunta upang i-update din ang header impormasyon para sa outfile, 13 00:00:46,080 --> 00:00:47,950 at magsulat na in 14 00:00:47,950 --> 00:00:51,850 Pagkatapos, ikaw ay pagpunta sa basahin sa ang scanline ng infile, 15 00:00:51,850 --> 00:00:56,890 pixel-by-pixel, pagbabago ng laki ng pahalang at pagsusulat ng mga pixel sa 16 00:00:56,890 --> 00:01:00,910 outfile, tulad ng tinukoy sa pamamagitan ng iskala ng user. 17 00:01:00,910 --> 00:01:03,940 >> Ikaw ay pagpunta sa tandaan na magdagdag ng padding kung kinakailangan. 18 00:01:03,940 --> 00:01:05,400 Higit sa na mamaya. 19 00:01:05,400 --> 00:01:07,790 At pagkatapos, baguhin ang laki din nang patayo. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Kaya ito ay magiging isang maliit na bit higit pa kumplikado kaysa Sino ang Tapos na Ito, ngunit 22 00:01:13,280 --> 00:01:18,310 kung ano ang katulad ay na copy.c pita, muli, patunayan napaka kapaki-pakinabang. 23 00:01:18,310 --> 00:01:23,160 Tandaan na copy.c bubukas ang isang file, ina-update ang impormasyon ng header para sa 24 00:01:23,160 --> 00:01:28,250 outfile, pagkatapos ay bumabasa sa scanline, pixel-by-pixel, pagsusulat ng bawat pixel 25 00:01:28,250 --> 00:01:30,510 sa scanline ang output file. 26 00:01:30,510 --> 00:01:37,040 >> Kaya muli, ang iyong unang hakbang maaari marahil maging sa CP, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 sa iyong direktoryo ng PSET5. 28 00:01:40,560 --> 00:01:43,920 Tandaan bagaman, bago mo kopyahin ito, upang tiyakin na nauunawaan mo 29 00:01:43,920 --> 00:01:46,600 copy.c napaka-lubusan. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Kaya ni magbukas ng file ipaalam. 32 00:01:49,880 --> 00:01:50,870 Alam mo kung paano gawin iyon. 33 00:01:50,870 --> 00:01:52,600 Pupunta ako sa umalis na sa iyo. 34 00:01:52,600 --> 00:01:56,050 Susunod, i-update ang impormasyon ng header para sa outfile. 35 00:01:56,050 --> 00:01:59,240 Dahil mayroon kaming isang bagong bitmap, mayroon kaming bagong impormasyon ng header. 36 00:01:59,240 --> 00:02:00,970 Ano ang pagbabago dito? 37 00:02:00,970 --> 00:02:06,000 Well, ang laki ng file ay pagpunta upang baguhin dahil kami ay pagpunta sa magkaroon ng higit 38 00:02:06,000 --> 00:02:07,900 pixels kaysa dati. 39 00:02:07,900 --> 00:02:11,060 Ang sukat ng imahe ay, sa gayon, din pagpunta sa baguhin, bilang ay ang 40 00:02:11,060 --> 00:02:13,050 lapad at ang taas. 41 00:02:13,050 --> 00:02:17,180 >> Kaya kung aling mga variable ay ang mga, eksakto? 42 00:02:17,180 --> 00:02:20,960 Well, kung titingnan mo sa header impormasyon, tingnan mo doon ay 43 00:02:20,960 --> 00:02:25,640 biSizeImage, na kumakatawan sa kabuuang laki ng imahe sa bytes, 44 00:02:25,640 --> 00:02:28,340 kabilang ang mga pixel at padding. 45 00:02:28,340 --> 00:02:32,520 biWidth ay ang lapad ng imahe sa pixels, minus ang padding. 46 00:02:32,520 --> 00:02:35,580 biHeight ay ang taas ng ang larawan sa pixels. 47 00:02:35,580 --> 00:02:39,200 At kaya iyon ay nakapaloob sa mga structs BITMAPFILEHEADER at 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Maaari mong sabihin kung saan ang isa ay na sa pamamagitan ng pagpunta sa bmp.h at pagtingin sa mga 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struct at nakakakita na mga variable ay nakalista doon. 51 00:02:49,670 --> 00:02:54,700 >> Kaya upang i-update ang outfiles header impormasyon, ikaw ay pagpunta sa nais na 52 00:02:54,700 --> 00:02:57,025 baguhin ang mga halaga ng taas at ang lapad. 53 00:02:57,025 --> 00:03:00,570 Ngunit pagkakataon, maaaring kailangan mo ng ilang ng impormasyon ng header ang infile ni 54 00:03:00,570 --> 00:03:03,670 mamaya, kaya pinakamahusay na upang masubaybayan ang pareho. 55 00:03:03,670 --> 00:03:07,770 Ngunit maging napakalinaw sa iyong mga variable mga pangalan ng sa gayon ay magawa hindi sinasadyang 56 00:03:07,770 --> 00:03:12,490 isulat ang hindi tamang mga halaga sa ang header para sa outfile. 57 00:03:12,490 --> 00:03:16,160 >> Kaya ngayon sabihin makapunta sa pagbabasa sa ang scanline pixel-by-pixel. 58 00:03:16,160 --> 00:03:20,210 Muli, kami ay pagpunta sa i sa aming mapagkakatiwalaan maghain I / O library, at tumingin sa 59 00:03:20,210 --> 00:03:22,100 ang fread function. 60 00:03:22,100 --> 00:03:26,150 fread tumatagal sa isang pointer sa isang struct na maglalaman ng mga bytes na 61 00:03:26,150 --> 00:03:30,130 binabasa mo sa, ang laki ng bawat elemento na binabasa mo - 62 00:03:30,130 --> 00:03:34,410 muli, sizeof ay magiging kapaki-pakinabang gumana dito, ang bilang ng mga 63 00:03:34,410 --> 00:03:38,820 mga elemento ng laki, laki, na ikaw ay pagbabasa sa, at pagkatapos ay sa wakas, ang 64 00:03:38,820 --> 00:03:41,310 inpointer, ang file na binabasa mo mula sa. 65 00:03:41,310 --> 00:03:46,770 Kaya ka pagkuha ng mga elemento ng numero ng laki mula inpointer, at 66 00:03:46,770 --> 00:03:49,040 paglalagay ng mga ito sa data. 67 00:03:49,040 --> 00:03:51,695 >> Ngayon ay oras na upang baguhin ang laki nang pahalang. 68 00:03:51,695 --> 00:03:56,880 kung n ay katumbas ng 2, pagkatapos ay para sa bawat pixel sa ang infile, kami ay pagpunta sa isulat ito 69 00:03:56,880 --> 00:04:00,870 dalawang beses sa outfile. 70 00:04:00,870 --> 00:04:02,210 Paano sumulat kami ng mga file? 71 00:04:02,210 --> 00:04:06,400 Well, mayroon kaming mga fwrite function, kaya nagsagawa kami ng mga pointer sa struct 72 00:04:06,400 --> 00:04:10,170 na naglalaman ng mga byte na ikaw ay sumusulat mula sa, at pagkatapos ay ipasa namin sa 73 00:04:10,170 --> 00:04:14,430 laki, numero, at ang output, kung saan ka pagpunta sa ay sumusulat na iyon. 74 00:04:14,430 --> 00:04:19,200 At pagkatapos ay upang ulitin ang isang proseso, ay magiging magagawa ng isang simpleng umuulit para sa loop. 75 00:04:19,200 --> 00:04:21,740 >> Ngunit kailangan nating tandaan upang magdagdag ng padding in 76 00:04:21,740 --> 00:04:26,040 Ang konsepto ng padding ay na, mahusay, bawat pixel ay tatlong kagat, ngunit ang 77 00:04:26,040 --> 00:04:28,940 laki ng bawat scanline kinakailangan na multiple ng 4 bytes. 78 00:04:28,940 --> 00:04:33,660 Kaya kung ang bilang ng mga pixels ay hindi isang multiple ng 4, kailangan naming magdagdag ng ilang 79 00:04:33,660 --> 00:04:36,630 padding, na kung saan ay lamang zeroes. 80 00:04:36,630 --> 00:04:42,130 Ngayon, hindi katulad Sino ang Tapos na Ito, at hindi magkatulad kopya, pagkatapos ay i-infile imahe at ang 81 00:04:42,130 --> 00:04:44,370 outfile file na iba't ibang mayroon iba't ibang mga padding dahil hindi nila 82 00:04:44,370 --> 00:04:46,360 iba't ibang mga lapad. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Kaya marahil isang formula ng ginagawa dumating sa madaling-gamiting dito. 85 00:04:51,050 --> 00:04:55,120 Makikita ko bang iwan ito sa iyo upang hanapin ito out, ngunit sabihin mo na, magsulat ng padding, 86 00:04:55,120 --> 00:04:59,360 well, ito lamang ay isang simpleng pag-andar fputc, pagpasa sa karakter 87 00:04:59,360 --> 00:05:02,200 na nais mong magsulat, at pagkatapos ay ang file pointer na sa iyo 88 00:05:02,200 --> 00:05:04,280 nais na magsulat sa. 89 00:05:04,280 --> 00:05:08,670 Kaya ngayon na na-laki namin nang pahalang, at pagkatapos ay ginamit padding, 90 00:05:08,670 --> 00:05:12,030 tandaan na kailangan mong ilipat ang iyong mga file tagapagpahiwatig ng posisyon, dahil sa iyo 91 00:05:12,030 --> 00:05:14,480 Hindi maaaring fread sa padding. 92 00:05:14,480 --> 00:05:18,230 Kaya nais mong tiyakin na ang iyong file tagapagpahiwatig ng posisyon sa infile 93 00:05:18,230 --> 00:05:19,980 ay sa tamang punto. 94 00:05:19,980 --> 00:05:23,970 Dahil kagustuhan din namin na baguhin ang laki nang patayo. 95 00:05:23,970 --> 00:05:27,090 Hindi namin maaaring lamang mabatak ito nang pahalang, dahil ang bawat pangangailangan hilera 96 00:05:27,090 --> 00:05:30,370 upang makopya n ulit. 97 00:05:30,370 --> 00:05:33,050 >> Ngayon, mayroong maraming iba't ibang paraan upang magawa ito. 98 00:05:33,050 --> 00:05:39,010 Kaya isa, maaari naming gamitin ang isang pamamaraan sa pagsulat na muli, sa na tandaan namin ang lahat ng mga pixel 99 00:05:39,010 --> 00:05:42,840 ng isang naibigay na hilera sa isang array, at pagkatapos ay isulat namin na array bilang 100 00:05:42,840 --> 00:05:44,730 maraming beses hangga't kailangan. 101 00:05:44,730 --> 00:05:49,530 O kaya mayroong mga pamamaraan recopy kung saan, pagkatapos ng pagbabasa sa isa hilera sa infile 102 00:05:49,530 --> 00:05:53,530 at pagkatapos ay sumusulat na sa outfile, pagdaragdag ng padding, fseek namin 103 00:05:53,530 --> 00:05:57,250 i-back sa simula ng orihinal na sunud-sunod, at pagkatapos ay ulitin ang mga pahalang 104 00:05:57,250 --> 00:05:58,710 pagbabago ng laki mula doon. 105 00:05:58,710 --> 00:06:02,280 Anuman ang pamamaraan, bagaman, ikaw ay nais bawat pixel na paulit-ulit 106 00:06:02,280 --> 00:06:06,370 n beses, at ang bawat hilera upang maging paulit-ulit n beses pati na rin. 107 00:06:06,370 --> 00:06:09,160 >> Gamit na, magkakaroon ka ng bitmap mas malaki kaysa sa buhay. 108 00:06:09,160 --> 00:06:11,760 Ang pangalan ko ay Zamyla, at ito ay CS50. 109 00:06:11,760 --> 00:06:19,542