[MUZIK Bermain] ROB Bowden: Hi. Saya Rob dan biarkan saiz ini sehingga masalah ini. Jadi, kita akan bermula dengan copy.c sebagai templat, tetapi kita akan menjadi membuat agak beberapa perubahan. Sekarang kita lihat kita segera membuat menukar mana kita tidak lagi memeriksa untuk rxc kita tidak sama 3, tetapi sekarang kami memeriksa rc tidak sama 4. Oleh kerana kita juga mahu termasuk, Selain dalam fail dan fail yang hujah, f yang akan menjadi ini faktor yang mana kita mendaki. Jadi sebaik sahaja kami pasti itu, kami ingin menggunakan s imbasan f untuk menukar tali argv1 kepada apungan. Dan kita akan menyimpan bahawa dalam faktor. Ini watak tambahan adalah memastikan bahawa kita tidak sebenarnya memasuki sesuatu seperti 1.4 ABC pada baris arahan. Sekarang kita akan membuat beberapa nama samaran yang berbeza sejak RV2 dan RV3 tidak nama sangat membantu. Kami, sebaliknya, akan memanggil di dalam fail dan keluar fail. Sekarang kita akan memastikan bahawa faktor kami sebenarnya sah. Jadi, jika faktor kurang daripada atau sama dengan sifar atau lebih daripada 100, maka seperti spec, kita harus menolak faktor yang. Apabila kita pasti ia baik, sekarang kita boleh membuka fail n, dan kita perlu membuat memastikan bahawa ia telah berjaya dibuka. Jika ia tidak, yang akan kembali null. Kami akan membuka fail keluar. Dan sekali lagi, kita mahu periksa untuk memastikan ia berjaya dibuka. Dan jika ia tidak berjaya membuka, maka kita juga perlu pastikan anda menutup file n yang asalnya berjaya dibuka, jika tidak kita mempunyai memori kebocoran. Jadi sekarang kita akan dibaca bitmap header fail dan maklumat bitmap header dari fail n. Kami akan memastikan bahawa n fail adalah bitmap yang sah. OK. Jadi sekarang kita akan memulakan membuat beberapa perubahan. Jadi kerana kita akan berubah perkara, kita mahu ingat lebar lama fail n. Kami mahu ingat padding lama file n dengan menggunakan pengiraan yang sama dari copy.c. Dan sekarang kita akan berubah maklumat header bitmap. Dan jadi kita mendarabkan kedua-dua lebar dan ketinggian dengan faktor sejak itulah yang kita sedang mendaki oleh. Kami akan menentukan padding baru fail dengan menggunakan lebar baru. Dan kita akan menentukan baru saiz imej dengan menggunakan jumlah bait dalam barisan tunggal yang akan menjadi bilangan piksel berturut-turut yang kali saiz pixel tambah yang beberapa bait padding di hujung baris itu, dan mendarabkan semua yang oleh bilangan baris yang kita ada. Jadi, itu bilangan bait kita ada dalam data imej kami. Bf.Bfsize kini akan menjadi bilangan daripada bait dalam beta imej kami ditambah saiz header kami. Saiz supaya plus header fail bitmap dan saiz info bitmap header. OK. Jadi itu sahaja untuk header kami. Kita boleh menulis kepala fail dan maklumat header untuk keluar kami memfailkan, dan kami baik. Kini sudah tiba masanya untuk memulakan sebenarnya menulis piksel data ke fail keluar. Kami akan mengisytiharkan penampan saiz lebar RGB lama Pahat,, dan kami akan mengisytiharkan pembolehubah yang dipanggil kebas berturut-turut, yang kita akan pada mulanya ditetapkan sama dengan negatif 1. Kita akan melihat bahawa kita akan menggunakan bahawa untuk mengesan apa berturut-turut kita kini telah dimuatkan ke dalam buffer ini. OK. Jadi sekarang tidak seperti edisi standard, bukan iterating alih di dalam fail, kita akan melelar atas setiap baris dalam fail keluar dan memikirkan yang baris dalam fail dalam kita mahu meletakkan di baris ini dalam fail keluar. Jadi iterating atas semua baris dalam keluar memfailkan menggunakan ketinggian baru, kami pertama akan menentukan barisan di lama memfailkan kita akan digunakan, yang kami akan melakukan dengan mengambil semasa ini berturut-turut dibahagikan dengan faktor. Jadi perkara yang berlaku untuk memberikan kita barisan dalam fail lama yang kita mahu. Jadi sekarang jika barisan kebas tidak sama y lama, kita akan perlu membaca barisan yang kita mahu ke dalam berturut-turut kini penampan kami. Jadi bagaimana kita boleh berbuat demikian? Pertama, kita akan memikirkan kedudukan yang bermula berturut-turut bahawa dalam fail asal. Jadi kedudukan itu akan menjadi lalu semua header dan baris y lama kini yang lalu. Dan sebagainya berapa banyak bait berada dalam barisan tunggal? Sekali lagi, saiz RGB kali tiga kali ganda lama lebar ditambah padding lama, jadi itulah beberapa bait dalam satu baris. Dan kita mahu melangkau baris lalu y lama. Oleh itu, kita akan mendapatkan f dan kami menggunakan mendapatkan set untuk bermula dari permulaan fail. Kami akan berusaha untuk f kedudukan ini dalam fail, meletakkan kita di permulaan baris yang kita mahu untuk membaca ke dalam buffer kami. Kami akan menetapkan berturut-turut kebas sama dengan y lama. Jadi sekarang jika kita kembali gelung dan kami mahu menggunakan baris ini sama dalam fail daripada kami, maka kita tidak akan membaca ia semula tidak perlu. Jadi benar-benar, baris kebas adalah hanya pengoptimuman. Akhir sekali, kita akan membaca ke dalam berturut-turut semasa lebar RGB lama Pahat, yang kita mahu dari fail asal. Jadi sekarang berturut-turut kini mengandungi piksel daripada fail asal yang kita mahu menulis ke dalam fail keluar. Jadi sekarang, sama seperti di atas, dan bukannya iterating lebih fail lama, kita perlu kepada melelar lebih fail baris baru. Nah di sini, bukan iterating ke atas semua piksel lama yang berturut-turut kini, kita mahu melelar atas semua piksel dalam fail baru di ini berturut-turut tertentu. Mengapa kita mahu berbuat demikian? Kerana kita lihat di sini bahawa kita tidak sebenarnya semestinya menggunakan semua piksel dalam fail asal. Kerana jika kita semakin kecil, kita mungkin sebenarnya mahu melangkau piksel. Dan kita melihat bahawa ini - x dibahagikan dengan faktor - erat cermin di sini di mana kita katakan y dibahagikan dengan faktor untuk memikirkan bahawa barisan ke-y-tua sepadan dengan y-ke-baris dalam fail baru ini. Sekarang kita akan menulis semua ini piksel dari barisan lama ke dalam barisan baru kami. Apabila kita melakukan itu, kita hanya perlu meletakkan pelapik di akhir baris kami dan kita akan kembali gelung dan berterusan selama semua baris dalam fail baru kami. Pada akhirnya, kita perlu menutup lama kami fail, menutup fail baru kami, dan pulangan sifar kerana semuanya berjalan baik. Nama saya Rob dan ini adalah Recess. [MUZIK Bermain]