1 00:00:00,000 --> 00:00:10,210 >> [MUSIC PLAYING] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA Chan: Gəlin zərbə boyutlandırma ilə şeyi. 3 00:00:13,320 --> 00:00:17,710 Ölçüsünü, istifadəçi vasitəsilə keçiriləcək command line, bir bitmap image ki, 4 00:00:17,710 --> 00:00:21,860 Onlar bir sıra miqyaslı istəyirəm onlar da, keçmək ki, 5 00:00:21,860 --> 00:00:23,770 command line. 6 00:00:23,770 --> 00:00:24,690 Bunu necə etməliyəm? 7 00:00:24,690 --> 00:00:28,270 >> Bəli, ilk şey, edək addımlar bu qırmaq. 8 00:00:28,270 --> 00:00:31,510 Siz INFILE açmaq istəyirəm olacaq onlar sizə, eləcə də 9 00:00:31,510 --> 00:00:35,560 yaratmaq və OUTFILE açmaq Siz qoymaq olacaq 10 00:00:35,560 --> 00:00:38,020 daxil boyutlandırılır image 11 00:00:38,020 --> 00:00:42,050 Daha sonra, boyutlandırma və edirik, çünki bir bitmap, çünki bir header, belə ki, 12 00:00:42,050 --> 00:00:46,080 siz də mövzu yeniləmə olacaq Bu outfile üçün məlumat, 13 00:00:46,080 --> 00:00:47,950 və daxil ki, yazmaq 14 00:00:47,950 --> 00:00:51,850 Sonra, siz oxumaq olacaq Bu INFILE və scanline, 15 00:00:51,850 --> 00:00:56,890 pixel-by-pixel, üfüqi boyutlandırma və o piksel yazılı 16 00:00:56,890 --> 00:01:00,910 outfile ifadə edildi istifadəçi miqyaslı. 17 00:01:00,910 --> 00:01:03,940 >> Siz yadda olacaq zəruri padding əlavə edin. 18 00:01:03,940 --> 00:01:05,400 Ki, sonra daha çox. 19 00:01:05,400 --> 00:01:07,790 Və sonra da şaquli ölçüsünü. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Belə ki, bu bir az daha olacaq It Done Kim daha mürəkkəb, lakin 22 00:01:13,280 --> 00:01:18,310 nə bənzər ki copy.c verəcəyik, yenə, çox faydalı sübut edir. 23 00:01:18,310 --> 00:01:23,160 , Copy.c bir fayl açılır Unutmayın ki, üçün mövzu məlumatları yeniləyir 24 00:01:23,160 --> 00:01:28,250 outfile, sonra scanline daxil oxuyur pixel-by-pixel, hər pixel yazı 25 00:01:28,250 --> 00:01:30,510 çıxış fayl scanline daxil. 26 00:01:30,510 --> 00:01:37,040 >> Belə ki, yenə ilk addım yəqin ki, bilər cp, copy.c, resize.c ola 27 00:01:37,040 --> 00:01:40,560 Sizin PSET5 dizine. 28 00:01:40,560 --> 00:01:43,920 Siz surəti əvvəl, baxmayaraq ki saxla, Siz anlamaq əmin etmək 29 00:01:43,920 --> 00:01:46,600 çox hərtərəfli copy.c. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Belə ki, bir fayl açmaq bildirin. 32 00:01:49,880 --> 00:01:50,870 Siz bunu necə. 33 00:01:50,870 --> 00:01:52,600 Mən sizə ki, tərk gedirəm. 34 00:01:52,600 --> 00:01:56,050 Sonrakı, header məlumat güncellemek Bu outfile üçün. 35 00:01:56,050 --> 00:01:59,240 Biz yeni bitmap var, biz yeni header info var. 36 00:01:59,240 --> 00:02:00,970 Burada dəyişən var? 37 00:02:00,970 --> 00:02:06,000 Yaxşı, fayl həcmi dəyişdirmək üçün gedir biz daha çox olacaq, çünki 38 00:02:06,000 --> 00:02:07,900 daha pixels. 39 00:02:07,900 --> 00:02:11,060 Təsvir ölçüsü də, belə deyil, kimi dəyişdirmək üçün gedir 40 00:02:11,060 --> 00:02:13,050 eni və hündürlüyü. 41 00:02:13,050 --> 00:02:17,180 >> Belə olan dəyişənlər o dəqiq var? 42 00:02:17,180 --> 00:02:20,960 Yaxşı, siz mövzu baxmaq əgər məlumat, orada görmək 43 00:02:20,960 --> 00:02:25,640 cəmi təmsil edən biSizeImage, bayt image ölçüsü, 44 00:02:25,640 --> 00:02:28,340 piksel və padding daxil olmaqla. 45 00:02:28,340 --> 00:02:32,520 biWidth image eni piksel, padding minus. 46 00:02:32,520 --> 00:02:35,580 biHeight hündürlüyü piksel təsvirin. 47 00:02:35,580 --> 00:02:39,200 Və bu da əks olunur structs BITMAPFILEHEADER və 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Siz olan bir deyə bilərsiniz bmp.h gedən və baxaraq 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struct və görən dəyişənlər var siyahıda olan. 51 00:02:49,670 --> 00:02:54,700 >> Belə ki, outfiles mövzu yeniləmə məlumat istədiyiniz olacaq 52 00:02:54,700 --> 00:02:57,025 Bu o dəyərləri dəyişdirmək hündürlüyü və eni. 53 00:02:57,025 --> 00:03:00,570 Amma şansını, bəzi oluna bilər Bu INFILE header məlumat 54 00:03:00,570 --> 00:03:03,670 sonra, belə ki, yaxşı, həm də takip. 55 00:03:03,670 --> 00:03:07,770 Lakin dəyişən çox aydın adları ki, siz təsadüfən 56 00:03:07,770 --> 00:03:12,490 yanlış dəyərlər yazmaq Bu outfile üçün header. 57 00:03:12,490 --> 00:03:16,160 >> Belə ki, indi oxu almaq olsun Bu scanline pixel-by-pixel. 58 00:03:16,160 --> 00:03:20,210 Yenə bizim etibarlı çevirmək olacaq I / O kitabxana fayl, və baxmaq 59 00:03:20,210 --> 00:03:22,100 Bu fread funksiyası. 60 00:03:22,100 --> 00:03:26,150 fread bir struct bir pointer edir bytes ehtiva edir ki, 61 00:03:26,150 --> 00:03:30,130 Siz oxuyursunuz, hər birinin ölçüsü Siz oxu etdiyiniz element - 62 00:03:30,130 --> 00:03:34,410 yenə sizeof faydalı olacaq burada funksiyası, sayı 63 00:03:34,410 --> 00:03:38,820 sen ölçüsü, ölçüsü elementləri, sonra nəhayət oxu, və, 64 00:03:38,820 --> 00:03:41,310 inpointer, fayl ki, Siz oxuyursunuz. 65 00:03:41,310 --> 00:03:46,770 Beləliklə, siz sayı elementləri alaraq etdiyiniz inpointer ölçüsü, və 66 00:03:46,770 --> 00:03:49,040 data onları qoyulması. 67 00:03:49,040 --> 00:03:51,695 >> İndi üfüqi ölçüsünü üçün vaxt var. 68 00:03:51,695 --> 00:03:56,880 n hər pixel sonra, 2 bərabərdir əgər Bu INFILE, biz onu yazmaq olacaq 69 00:03:56,880 --> 00:04:00,870 iki dəfə outfile ilə. 70 00:04:00,870 --> 00:04:02,210 Necə faylları yazmaq edirsiniz? 71 00:04:02,210 --> 00:04:06,400 Yaxşı, biz fwrite funksiyası var, belə ki, biz struct göstərici qəbul etdik 72 00:04:06,400 --> 00:04:10,170 ki, siz bytes ehtiva edir yazılı, sonra biz keçmək 73 00:04:10,170 --> 00:04:14,430 ölçüsü, sayı, çıxış, harada ki, yazılı olacaq. 74 00:04:14,430 --> 00:04:19,200 Və sonra bir prosesi təkrar olacaq loop üçün edə sadə iterasiya. 75 00:04:19,200 --> 00:04:21,740 >> Amma biz xatırlamaq lazımdır daxil padding əlavə etmək 76 00:04:21,740 --> 00:04:26,040 Padding konsepsiyası ki, yaxşı deyil, hər pixel üç sokması, lakin 77 00:04:26,040 --> 00:04:28,940 hər scanline lazımdır ölçüsü 4 bayt çox ola. 78 00:04:28,940 --> 00:04:33,660 Belə ki, piksel sayı deyil, əgər bir 4 çox, biz bəzi əlavə etmək lazımdır 79 00:04:33,660 --> 00:04:36,630 yalnız zeroes olan padding. 80 00:04:36,630 --> 00:04:42,130 İndi bunu kim fərqli olaraq, və fərqli surəti, sonra INFILE image və 81 00:04:42,130 --> 00:04:44,370 outfile fayl müxtəlif var müxtəlif padding onlar istəyirik, çünki 82 00:04:44,370 --> 00:04:46,360 müxtəlif genişlikleri. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Belə ki, bəlkə bir formula ki burada yararlı. 85 00:04:51,050 --> 00:04:55,120 Mən bunu tapmaq üçün sizə tərk edəcəyik, ancaq padding yazmaq üçün, ki, demək, 86 00:04:55,120 --> 00:04:59,360 yaxşı, yalnız bir sadə fputc funksiyası var, xarakter keçən 87 00:04:59,360 --> 00:05:02,200 Əgər yazmaq istəyirəm ki, fayl pointer ki 88 00:05:02,200 --> 00:05:04,280 yazmaq istəyirəm. 89 00:05:04,280 --> 00:05:08,670 Belə ki, indi biz, üfüqi boyutlandırılır etdik ki, və sonra, padding istifadə 90 00:05:08,670 --> 00:05:12,030 Siz fayl hərəkət etmək lazımdır ki, unutmayın mövqe göstərici, siz, çünki 91 00:05:12,030 --> 00:05:14,480 padding daxil fread bilməz. 92 00:05:14,480 --> 00:05:18,230 Belə ki, əmin etmək istəyirəm fayl Bu INFILE mövqe göstərici 93 00:05:18,230 --> 00:05:19,980 doğru nöqtədə deyil. 94 00:05:19,980 --> 00:05:23,970 Biz də istəyirik, çünki şaquli ölçüsünü. 95 00:05:23,970 --> 00:05:27,090 Biz yalnız yatay uzanır bilməz hər satır ehtiyacları çünki 96 00:05:27,090 --> 00:05:30,370 n dəfə kopyalanamaz bilər. 97 00:05:30,370 --> 00:05:33,050 >> İndi, müxtəlif bir neçə var Bunu yolları. 98 00:05:33,050 --> 00:05:39,010 Bir sözlə, biz, bir yeniden yazma metodu istifadə edə bilərsiniz biz piksel bütün xatırlayıram ki, 99 00:05:39,010 --> 00:05:42,840 verilmiş bir sıra satır, və sonra biz kimi ki array yazmaq 100 00:05:42,840 --> 00:05:44,730 Lazım olan qədər. 101 00:05:44,730 --> 00:05:49,530 Və ya burada köçürmək üsul var, Bu INFILE bir sıra oxuduqdan sonra 102 00:05:49,530 --> 00:05:53,530 və sonra outfile daxil yazılı, padding əlavə, biz fseek 103 00:05:53,530 --> 00:05:57,250 orijinal sıra başlamaq üçün geri, və sonra üfüqi təkrar 104 00:05:57,250 --> 00:05:58,710 oradan boyutlandırma. 105 00:05:58,710 --> 00:06:02,280 Asılı olmayaraq metodu, baxmayaraq ki, will hər pixel təkrar etmək istəyirəm 106 00:06:02,280 --> 00:06:06,370 n dəfə, hər sıra olmaq habelə n dəfə təkrarladı. 107 00:06:06,370 --> 00:06:09,160 >> Ki, siz bitmap lazımdır həyat daha. 108 00:06:09,160 --> 00:06:11,760 My name Zamyla və bu CS50 edir. 109 00:06:11,760 --> 00:06:19,542