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