>> [Παίζει μουσική]
>> ROB BOWDEN: Γεια σου, είμαι Rob, ας δοκιμάστε αυτό το επάνω για το μέγεθος.
Έτσι, είμαστε και πάλι πρόκειται να ξεκινήσει με ουσιαστικά ένα αντίγραφο του copy.c, και
κάνετε μερικές αλλαγές.
Σημείωση αμέσως βλέπουμε μια αλλαγή, όπου αντί για τον έλεγχο για να δούμε αν
argc δεν ισότιμη 3, θέλουμε να ελέγξουμε αν argc δεν είναι ίσο με 4, αφού
τώρα δεν είμαστε απλά λαμβάνοντας μια infile και outfile, αλλά είμαστε επίσης λαμβάνοντας
n, το οποίο είναι το ποσό που είμαστε κλιμάκωση της αρχικής εικόνας.
Μόλις είμαστε σίγουροι ότι μπορούμε ακριβώς n μετατροπή σε ακέραιο χρησιμοποιώντας atoi.
>> Έτσι, τώρα θα πάμε να δημιουργήσουμε κάποια ψευδώνυμα, απλά καλέστε argv 2 infile, και
argv 3 outfile, επειδή argv 2 και argv 3 δεν είναι πολύ χρήσιμη ονόματα.
Τώρα θέλουμε να βεβαιωθείτε ότι n είναι εντός των ορίων που περιμένουμε, έτσι ώστε η
spec ορίζει ότι αν είναι μικρότερο ή ίσο με το μηδέν, ή μεγαλύτερο από 100,
τότε αυτό είναι μια άκυρη παράγοντας αλλαγής μεγέθους, και θα πρέπει να προειδοποιεί τον χρήστη αυτό.
>> Μόλις είμαστε πέρα ​​από όλα αυτά, μπορούμε να ανοίξουν τελικά infile μας, και χρειαζόμαστε
σε λάθος ελέγξτε για να βεβαιωθείτε ότι η άνοιγμα δεν αποτύχει για κάποιο λόγο.
Πρέπει, επίσης, να ανοίξει outfile μας, και και πάλι λάθος ελέγξτε για να βεβαιωθείτε ότι
δεν αποτύχει για κάποιο λόγο.
Αλλά να είστε σίγουροι εάν το άνοιγμα της outfile απέτυχε ότι πρέπει να κλείσει
η infile, η οποία είχε ήδη ανοίξει.
>> Έτσι, αν υποτεθεί ότι δεν απέτυχε, τότε Μπήκαμε - όπως ακριβώς και στην copy.c--
πρόκειται να διαβάσετε στην κεφαλίδα από το infile.
Εμείς πάμε για να βεβαιωθείτε ότι είναι έγκυρη bitmap, αλλά τώρα θα πάμε να κάνουμε κάποιες
τα πράγματα λίγο διαφορετικά.
Έτσι, η πρώτη, θα πάμε να θέλουν να θυμάται το αρχικό πλάτος και ύψος
του εσώτερου αρχείου, επειδή θα πάμε να να την αλλάζει προς το outfile.
Έτσι τώρα να θυμάστε ότι για τους παράξενους λόγους bi.biheight, είναι αρνητική, και
έτσι ώστε το πραγματικό ύψος, σε θετική, εμείς θέλουν να πάρουν την απόλυτη τιμή.
>> Τώρα, το παραγέμισμα πρόκειται να είναι το ίδιο υπολογισμού όπως ήταν στην copy.c,
χρησιμοποιώντας το παλιό πλάτος, και τώρα είμαστε στην πραγματικότητα πρόκειται να αλλάξει
τι στην κεφαλίδα μας.
Έτσι θα πάμε για να πολλαπλασιάσει το πλάτος μας n, δεδομένου ότι είμαστε κλιμάκωση του πλάτους του
n, πολλαπλασιάστε το ύψος από το n, αφού είμαστε κλιμάκωση με n, και τώρα έχουμε
ο υπολογισμός για ένα νέο υλικό παραγεμίσματος με βάση το νέο πλάτος.
>> Έτσι τώρα πρέπει να αλλάξουμε κάποια άλλα πεδία στην κεφαλίδα μας.
Bi.biSizeImage υποτίθεται ότι είναι η μέγεθος όλων των bytes στα pixels
και padding της εικόνας.
Και έτσι το μέγεθος ενός ενιαίου σειρά μας εικόνα είναι το μέγεθος του RGB τριπλή, το μέγεθος
ενός εικονοστοιχείου, φορές τον αριθμό των pixels σε μια σειρά, συν το padding σε
το τέλος της σειράς.
Και μετά θα πάμε να πολλαπλασιάστε το με απόλυτη τιμή του ύψους μας για να πάρετε
ο συνολικός αριθμός των bytes στα δεδομένα εικόνας.
bf.bfSize είναι μόνο ο συνολικός αριθμός των bytes σε δεδομένα εικόνας μας, έτσι
bi.biSizeImage, καθώς και η το μέγεθος των headers μας.
Έτσι, προσθέτοντας με το μέγεθος του αρχείου bitmap κεφαλίδα και το μέγεθος του bitmap πληροφορίες
κεφαλίδα, OK.
Έτσι, αυτό είναι το μόνο που χρειάζεται να αλλάξετε σε κεφαλίδες μας.
Τώρα θα γράψουμε την κεφαλίδα του αρχείου bitmap να outfile μας, και πληροφορίες bitmap μας
header να outfile μας, και τώρα είμαστε έτοιμοι να αρχίσει να πηγαίνει
πάνω από την πραγματική pixels.
>> Έτσι θέλουμε να μετακινηθείτε πάνω γραμμές σάρωσης του εσώτερου αρχείου του.
Έτσι θέλουμε να μετακινηθείτε πάνω oldheight.
Αυτός είναι ο λόγος που χρειάζεται να θυμόμαστε το το αρχικό του ύψος, πριν αλλάξετε
και κλιμακώνεται με n.
Τώρα θα πάμε να διαβάσει ένα σειρά του εσώτερου αρχείου σε ένα
buffer μεγέθους oldwidth.
Έτσι, εδώ, είμαστε freading μέγεθος RGB τρίκλινα, ένα pixel, και παλιά πλάτος
τους από το infile σε ρυθμιστικό μας.
Και αυτό πρόκειται να είναι μια ολόκληρη γραμμή σε αυτή τη σειρά.
Έτσι τώρα, θέλουμε να μετακινηθείτε n φορές να εκτυπώστε αυτή τη σειρά για να outfile n εποχή μας.
Και έτσι αυτό είναι που αυτός ο βρόχος κάνει.
Αυτή η εσωτερική διαδρομή είναι επανάληψη κατά τη διάρκεια των σειρά το ίδιο, πάνω από τον πίνακα, εκτύπωση
Κάθε pixel της συστοιχίας η φορές.
Έτσι, το μηδενικό στοιχείο τυπώνεται n φορές, το πρώτο στοιχείο γίνεται
τυπωμένο n φορές.
Και αυτό είναι το είδος του πώς θα πάμε να οριζόντια κλίμακα στην outfile, και
Αυτό βρόχου, αφού είμαστε looping n φορές, είναι το πώς θα πάμε να
κατακόρυφα κλίμακα.
>> Εδώ κάτω, βλέπουμε ότι πρέπει να προσθέσουμε το παραγέμισμα στο τέλος κάθε σειράς.
Γι 'αυτό είναι μέσα στο for loop που είναι η εκτύπωση των n σειρές μόνο
αυτό μία σειρά από infile.
Στη συνέχεια, εδώ κάτω, Πάω να υπερπηδήσει το γέμισμα του εσώτερου αρχείου, δεδομένου ότι, εφόσον
Τελειώσαμε με μία σειρά από το infile, εμείς δεν ενδιαφερόμαστε για
τι το παραγέμισμα ήταν.
Εμείς απλά θέλουμε να φτάσουμε στην δεύτερη σειρά.
Και τότε θα στραφεί προς τα πίσω και να κάνετε όλα αυτό πάλι για την δεύτερη σειρά.
>> Τέλος, μόλις τελειώσετε με όλα αυτά, μπορούμε να κλείσει το infile, κοντά
η outfile και επιστροφή 0 γιατί τελειώσαμε.
>> Το όνομά μου είναι Rob, και αυτό ήταν αλλαγής μεγέθους.
>> [Παίζει μουσική]