>> [MUSIC PLAYING]
>> ROB Bowden: Hi, saya Rob, mari kita coba ini untuk ukuran.
Jadi, kita lagi akan mulai dengan pada dasarnya salinan copy.c, dan
membuat beberapa perubahan.
Catatan segera kita melihat perubahan, di mana bukannya memeriksa untuk melihat apakah
argc tidak sama 3, kita ingin memeriksa jika argc tidak sama dengan 4, karena
sekarang kita tidak hanya mengambil dalam INFILE dan outfile, tapi kita juga mengambil dalam
n, yang merupakan jumlah yang kita skala gambar asli oleh.
Setelah kita yakin akan hal itu, kami hanya bisa mengkonversi n ke integer menggunakan atoi.
>> Jadi, sekarang kita akan membuat beberapa alias, hanya panggilan argv 2 INFILE, dan
argv 3 outfile, karena argv 2 dan argv 3 tidak nama yang sangat membantu.
Sekarang kita ingin memeriksa untuk memastikan n adalah dalam batas-batas yang kita harapkan, sehingga
spesifikasi menetapkan bahwa jika kurang dari atau sama dengan nol, atau lebih besar dari 100,
maka itulah faktor resize valid, dan kita harus memperingatkan pengguna itu.
>> Begitu kita di luar semua itu, kita bisa akhirnya membuka INFILE kita, dan kita perlu
kesalahan memeriksa untuk memastikan bahwa pembukaan tidak gagal untuk beberapa alasan.
Kita juga perlu membuka outfile kami, dan lagi kesalahan periksa untuk memastikan bahwa
tidak gagal untuk beberapa alasan.
Tetapi pastikan jika pembukaan outfile gagal bahwa kita harus menutup
yang INFILE, yang sudah dibuka.
>> Jadi, dengan asumsi bahwa tidak gagal, maka kami sedang - seperti dalam copy.c--
akan membaca di header dari INFILE tersebut.
Kita akan memastikan itu valid bitmap, tapi sekarang kita akan melakukan beberapa
hal-hal sedikit berbeda.
Jadi pertama, kita akan ingin ingat lebar asli dan tinggi
dari INFILE, karena kita akan berubah untuk outfile tersebut.
Jadi sekarang ingat bahwa untuk alasan yang aneh bi.biheight, negatif, dan
jadi tinggi sebenarnya, dalam positif, kita ingin mengambil nilai absolut.
>> Sekarang, padding akan menjadi sama perhitungan seperti di copy.c,
menggunakan lebar lama, dan sekarang kita benar-benar akan mengubah
apa di kepala kami.
Jadi kita akan kalikan lebar kami dengan n, karena kita sedang skala lebar oleh
n, kalikan tinggi dengan n, karena kita scaling dengan n, dan sekarang kami memiliki
perhitungan untuk padding baru berdasarkan lebar baru.
>> Jadi sekarang kita perlu mengubah beberapa bidang lain dalam header kita.
Bi.biSizeImage seharusnya menjadi ukuran semua byte dalam pixel
dan padding gambar.
Dan ukuran satu baris kami gambar ukuran RGB tiga, ukuran
dari satu piksel, kali jumlah piksel berturut-turut, ditambah padding di
akhir baris.
Dan kemudian kita akan kalikan dengan nilai absolut tinggi kami untuk mendapatkan
jumlah byte dalam data gambar.
bf.bfSize hanya jumlah dari byte di data citra kami, jadi
bi.biSizeImage, ditambah ukuran header kita.
Jadi, menambahkan pada ukuran file bitmap header, dan ukuran info bitmap
header, OK.
Jadi itu yang kita perlu perubahan header kita.
Sekarang kita akan menulis header file bitmap untuk outfile kami, dan info bitmap kami
sundulan ke outfile kami, dan sekarang kita siap untuk mulai terjadi
atas piksel sebenarnya.
>> Jadi kami ingin iterate atas garis scan infile itu.
Jadi kami ingin iterate atas oldheight.
Inilah sebabnya mengapa kita perlu mengingat ketinggian aslinya, sebelum kita mengubahnya
dan skala dengan n.
Sekarang kita akan membaca satu deretan INFILE ke dalam
penyangga ukuran oldwidth.
Jadi di sini, kita freading ukuran RGB tiga, satu piksel, dan lebar lama
mereka dari infile ke dalam buffer kita.
Dan itu akan menjadi seluruh baris dalam array ini.
Jadi sekarang, kami ingin beralih n kali untuk mencetak baris ini untuk outfile n zaman kita.
Dan itulah apa lingkaran ini lakukan.
Loop batin ini iterasi baris sendiri, atas array, pencetakan
setiap pixel dalam array n kali.
Jadi unsur zeroth sedang dicetak n kali, elemen pertama sedang
dicetak n kali.
Dan itu semacam bagaimana kita akan horizontal skala dalam outfile, dan
lingkaran ini, karena kita sedang perulangan n kali, adalah bagaimana kita akan
skala vertikal.
>> Di sini, kita melihat bahwa kita perlu menambahkan padding pada akhir setiap baris.
Itulah mengapa hal ini di dalam untuk loop yang mencetak baris n hanya
ini satu baris dari infile tersebut.
Kemudian di sini, aku akan melewatkan padding di INFILE, karena sekali
kita sudah selesai dengan satu baris dari INFILE, kita tidak peduli tentang
apa padding itu.
Kami hanya ingin mendapatkan baris kedua.
Dan kemudian kita akan loop kembali dan melakukan semua ini lagi untuk baris kedua.
>> Akhirnya, setelah kami selesai dengan semua itu, kita dapat menutup INFILE, dekat
yang outfile, dan kembali 0 karena kita sudah selesai.
>> Nama saya Rob, dan ini adalah resize.
>> [MUSIC PLAYING]