[MUSIC PLAYING] ZAMYLA Chan: Gəlin zərbə boyutlandırma ilə şeyi. Ölçüsünü, istifadəçi vasitəsilə keçiriləcək command line, bir bitmap image ki, Onlar bir sıra miqyaslı istəyirəm onlar da, keçmək ki, command line. Bunu necə etməliyəm? Bəli, ilk şey, edək addımlar bu qırmaq. Siz INFILE açmaq istəyirəm olacaq onlar sizə, eləcə də yaratmaq və OUTFILE açmaq Siz qoymaq olacaq daxil boyutlandırılır image Daha sonra, boyutlandırma və edirik, çünki bir bitmap, çünki bir header, belə ki, siz də mövzu yeniləmə olacaq Bu outfile üçün məlumat, və daxil ki, yazmaq Sonra, siz oxumaq olacaq Bu INFILE və scanline, pixel-by-pixel, üfüqi boyutlandırma və o piksel yazılı outfile ifadə edildi istifadəçi miqyaslı. Siz yadda olacaq zəruri padding əlavə edin. Ki, sonra daha çox. Və sonra da şaquli ölçüsünü. OK. Belə ki, bu bir az daha olacaq It Done Kim daha mürəkkəb, lakin nə bənzər ki copy.c verəcəyik, yenə, çox faydalı sübut edir. , Copy.c bir fayl açılır Unutmayın ki, üçün mövzu məlumatları yeniləyir outfile, sonra scanline daxil oxuyur pixel-by-pixel, hər pixel yazı çıxış fayl scanline daxil. Belə ki, yenə ilk addım yəqin ki, bilər cp, copy.c, resize.c ola Sizin PSET5 dizine. Siz surəti əvvəl, baxmayaraq ki saxla, Siz anlamaq əmin etmək çox hərtərəfli copy.c. OK. Belə ki, bir fayl açmaq bildirin. Siz bunu necə. Mən sizə ki, tərk gedirəm. Sonrakı, header məlumat güncellemek Bu outfile üçün. Biz yeni bitmap var, biz yeni header info var. Burada dəyişən var? Yaxşı, fayl həcmi dəyişdirmək üçün gedir biz daha çox olacaq, çünki daha pixels. Təsvir ölçüsü də, belə deyil, kimi dəyişdirmək üçün gedir eni və hündürlüyü. Belə olan dəyişənlər o dəqiq var? Yaxşı, siz mövzu baxmaq əgər məlumat, orada görmək cəmi təmsil edən biSizeImage, bayt image ölçüsü, piksel və padding daxil olmaqla. biWidth image eni piksel, padding minus. biHeight hündürlüyü piksel təsvirin. Və bu da əks olunur structs BITMAPFILEHEADER və BITMAPINFOHEADER. Siz olan bir deyə bilərsiniz bmp.h gedən və baxaraq BITMAPINFOHEADER struct və görən dəyişənlər var siyahıda olan. Belə ki, outfiles mövzu yeniləmə məlumat istədiyiniz olacaq Bu o dəyərləri dəyişdirmək hündürlüyü və eni. Amma şansını, bəzi oluna bilər Bu INFILE header məlumat sonra, belə ki, yaxşı, həm də takip. Lakin dəyişən çox aydın adları ki, siz təsadüfən yanlış dəyərlər yazmaq Bu outfile üçün header. Belə ki, indi oxu almaq olsun Bu scanline pixel-by-pixel. Yenə bizim etibarlı çevirmək olacaq I / O kitabxana fayl, və baxmaq Bu fread funksiyası. fread bir struct bir pointer edir bytes ehtiva edir ki, Siz oxuyursunuz, hər birinin ölçüsü Siz oxu etdiyiniz element - yenə sizeof faydalı olacaq burada funksiyası, sayı sen ölçüsü, ölçüsü elementləri, sonra nəhayət oxu, və, inpointer, fayl ki, Siz oxuyursunuz. Beləliklə, siz sayı elementləri alaraq etdiyiniz inpointer ölçüsü, və data onları qoyulması. İndi üfüqi ölçüsünü üçün vaxt var. n hər pixel sonra, 2 bərabərdir əgər Bu INFILE, biz onu yazmaq olacaq iki dəfə outfile ilə. Necə faylları yazmaq edirsiniz? Yaxşı, biz fwrite funksiyası var, belə ki, biz struct göstərici qəbul etdik ki, siz bytes ehtiva edir yazılı, sonra biz keçmək ölçüsü, sayı, çıxış, harada ki, yazılı olacaq. Və sonra bir prosesi təkrar olacaq loop üçün edə sadə iterasiya. Amma biz xatırlamaq lazımdır daxil padding əlavə etmək Padding konsepsiyası ki, yaxşı deyil, hər pixel üç sokması, lakin hər scanline lazımdır ölçüsü 4 bayt çox ola. Belə ki, piksel sayı deyil, əgər bir 4 çox, biz bəzi əlavə etmək lazımdır yalnız zeroes olan padding. İndi bunu kim fərqli olaraq, və fərqli surəti, sonra INFILE image və outfile fayl müxtəlif var müxtəlif padding onlar istəyirik, çünki müxtəlif genişlikleri. OK. Belə ki, bəlkə bir formula ki burada yararlı. Mən bunu tapmaq üçün sizə tərk edəcəyik, ancaq padding yazmaq üçün, ki, demək, yaxşı, yalnız bir sadə fputc funksiyası var, xarakter keçən Əgər yazmaq istəyirəm ki, fayl pointer ki yazmaq istəyirəm. Belə ki, indi biz, üfüqi boyutlandırılır etdik ki, və sonra, padding istifadə Siz fayl hərəkət etmək lazımdır ki, unutmayın mövqe göstərici, siz, çünki padding daxil fread bilməz. Belə ki, əmin etmək istəyirəm fayl Bu INFILE mövqe göstərici doğru nöqtədə deyil. Biz də istəyirik, çünki şaquli ölçüsünü. Biz yalnız yatay uzanır bilməz hər satır ehtiyacları çünki n dəfə kopyalanamaz bilər. İndi, müxtəlif bir neçə var Bunu yolları. Bir sözlə, biz, bir yeniden yazma metodu istifadə edə bilərsiniz biz piksel bütün xatırlayıram ki, verilmiş bir sıra satır, və sonra biz kimi ki array yazmaq Lazım olan qədər. Və ya burada köçürmək üsul var, Bu INFILE bir sıra oxuduqdan sonra və sonra outfile daxil yazılı, padding əlavə, biz fseek orijinal sıra başlamaq üçün geri, və sonra üfüqi təkrar oradan boyutlandırma. Asılı olmayaraq metodu, baxmayaraq ki, will hər pixel təkrar etmək istəyirəm n dəfə, hər sıra olmaq habelə n dəfə təkrarladı. Ki, siz bitmap lazımdır həyat daha. My name Zamyla və bu CS50 edir.