>> [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.