>> [MUSIC PLAYING]
>> ROB Bowden: Hi.
Aku Rob dan biarkan ukuran ini up masalah ini.
Jadi kita akan mulai dengan copy.c sebagai template, tapi kami akan menjadi
membuat beberapa perubahan.
>> Sekarang kita melihat kita segera membuat mengubah di mana kita tidak lagi memeriksa
untuk rxc kami tidak sama dengan 3, tapi sekarang kita memeriksa rc tidak sama 4.
Karena kita juga ingin memasukkan, dalam Selain dalam file dan file yang
argumen, f yang akan menjadi ini faktor dengan yang kita skala.
>> Jadi sekali kita yakin akan hal itu, kami ingin menggunakan s memindai f untuk mengkonversi string
argv1 ke float.
Dan kita akan menyimpan bahwa dalam faktor.
Karakter tambahan ini adalah memastikan bahwa kita tidak benar-benar masuk
sesuatu seperti 1.4 ABC pada baris perintah.
>> Sekarang kita akan membuat beberapa alias sejak RV2 dan RV3 tidak
nama yang sangat membantu.
Kita, sebagai gantinya, akan menelepon mereka dalam file dan keluar berkas.
Sekarang kita akan memastikan bahwa Faktor kami benar-benar valid.
Jadi, jika faktor kurang dari atau sama dengan nol atau lebih besar dari 100, maka sesuai
spec, kita harus menolak Faktor itu.
>> Ketika kami yakin itu baik, sekarang kita bisa buka file n, dan kita harus membuat
yakin bahwa itu berhasil dibuka.
Jika tidak, itu akan mengembalikan null.
Kita akan membuka berkas keluar.
Dan lagi, kita ingin memeriksa untuk membuat yakin itu berhasil dibuka.
Dan jika itu tidak berhasil dibuka, maka kami juga harus yakin untuk menutup
file n yang awalnya berhasil dibuka, atau kita memiliki
kebocoran memori.
>> Jadi sekarang kita akan membaca bitmap file header dan info bitmap
sundulan dari file n.
Kita akan memastikan bahwa n berkas adalah bitmap valid.
OK.
>> Jadi sekarang kita akan mulai membuat beberapa perubahan.
Jadi karena kita akan berubah hal, pertama kita ingin mengingat
lebar lama file n.
Kami ingin mengingat padding lama file n menggunakan perhitungan yang sama
dari copy.c.
>> Dan sekarang kita akan mengubah info bitmap sundulan.
Dan jadi kita mengalikan kedua lebar dan tinggi dengan faktor sejak
itulah yang kita scaling dengan.
Kita akan menentukan bantalan baru dari file dengan
menggunakan lebar baru.
Dan kita akan menentukan baru ukuran gambar menggunakan jumlah
byte dalam satu baris yang akan menjadi jumlah piksel dalam baris yang
kali ukuran pixel ditambah jumlah byte padding di akhir
baris itu, dan mengalikan semua yang dengan jumlah baris yang kita miliki.
Jadi itulah jumlah byte kita miliki dalam data citra kami.
>> Bf.Bfsize sekarang akan menjadi nomor dari byte dalam versi beta image kami ditambah
ukuran header kita.
Jadi ukuran plus file bitmap sundulan dan ukuran info bitmap sundulan.
OK.
Jadi itu saja untuk header kita.
Kita bisa menulis kepala berkas dan Info header untuk keluar
mengajukan, dan kita baik-baik.
>> Sekarang saatnya untuk mulai benar-benar menulis pixel
data ke luar berkas.
Kita akan mendeklarasikan penyangga ukuran tua lebar RGB tiga kali lipat, dan kami
akan mendeklarasikan variabel disebut baris mati rasa, yang kita akan
awalnya ditetapkan sama dengan negatif 1.
Kita akan melihat bahwa kita akan menggunakan bahwa untuk melacak apa
baris saat ini kami telah dimuat ke dalam buffer ini.
OK.
>> Jadi sekarang tidak seperti edisi standar, bukannya iterasi di dalam
berkas, kita akan beralih di atas masing-masing baris dalam berkas keluar dan mencari tahu
yang baris dalam file yang kita ingin tempat di baris ini dalam berkas keluar.
Jadi iterasi semua baris di luar mengajukan menggunakan ketinggian baru, kami pertama
akan menentukan baris dalam lama mengajukan kita akan gunakan, yang kita
akan melakukan dengan mengambil saat ini baris dibagi dengan faktor.
Jadi itu akan memberi kita baris di file lama yang kita inginkan.
>> Jadi sekarang jika baris mati rasa tidak sama dengan y tua, kita akan harus membaca baris
yang kita inginkan ke skr baris penyangga kami.
Jadi bagaimana yang akan kita melakukan itu?
Pertama, kita akan mengetahui Posisi yang dimulai baris yang di
file asli.
Jadi posisi itu akan menjadi melewati semua header dan
tua y baris sekarang masa lalu.
>> Dan berapa banyak byte berada dalam satu baris?
Sekali lagi, ukuran RGB kali tiga tua lebar ditambah bantalan tua, jadi itu
jumlah byte dalam satu baris.
Dan kami ingin melewatkan tua y baris terakhir.
Jadi kita akan mencari f dan kami menggunakan mencari set mulai dari
awal file.
Kita akan f berusaha untuk posisi ini dalam file, menempatkan kami di
dimulai dari baris yang kita inginkan membaca ke dalam buffer kita.
>> Kita akan mengatur baris mati rasa sama dengan y tua.
Jadi sekarang jika kita loop kembali dan kami ingin menggunakan baris ini sama dalam file keluar kami,
maka kita tidak akan membaca dalam lagi perlu.
Jadi benar-benar, baris mati rasa adalah hanya optimasi.
>> Akhirnya, kita akan membaca ke dalam baris saat ini lebar RGB tua tiga kali lipat
yang kita inginkan dari file asli.
Jadi sekarang baris skr berisi piksel dari file asli yang kita ingin
menulis ke dalam berkas keluar.
Jadi sekarang, sama seperti di atas, bukan iterasi file lama, kita perlu
untuk iterate atas file baris baru.
Nah di sini, bukannya iterasi semua piksel tua yang berturut-turut skr,
kami ingin iterate atas semua piksel dalam file baru kami dalam hal ini
baris tertentu.
>> Mengapa kita ingin melakukan itu?
Karena kita lihat di sini bahwa kita tidak benar-benar harus menggunakan semua
piksel di file asli.
Karena jika kita menyusut, kita mungkin benar-benar ingin melewatkan piksel.
Dan kita melihat bahwa ini -
x dibagi dengan faktor -
erat cermin di sini di mana kita katakan y dibagi dengan faktor untuk mengetahui bahwa
lama y-th baris sesuai dengan y-th baris dalam file baru ini.
>> Sekarang kita akan menulis semua piksel tersebut dari baris tua
ke baris baru kami.
Setelah kami melakukan itu, kita hanya perlu menempatkan padding pada akhir baris kami
dan kami akan loop kembali dan melanjutkan untuk semua baris dalam file baru.
Pada akhirnya, kita harus menutup lama kita mengajukan, tutup file baru kami, dan kembali
nol karena semuanya berjalan baik-baik saja.
>> Nama saya Rob dan ini adalah Recess.
>> [MUSIC PLAYING]