1 00:00:00,000 --> 00:00:12,240 >> [Παίζει μουσική] 2 00:00:12,240 --> 00:00:15,870 >> ROB BOWDEN: Γεια σου, είμαι Rob, ας δοκιμάστε αυτό το επάνω για το μέγεθος. 3 00:00:15,870 --> 00:00:21,100 Έτσι, είμαστε και πάλι πρόκειται να ξεκινήσει με ουσιαστικά ένα αντίγραφο του copy.c, και 4 00:00:21,100 --> 00:00:22,860 κάνετε μερικές αλλαγές. 5 00:00:22,860 --> 00:00:26,280 Σημείωση αμέσως βλέπουμε μια αλλαγή, όπου αντί για τον έλεγχο για να δούμε αν 6 00:00:26,280 --> 00:00:30,440 argc δεν ισότιμη 3, θέλουμε να ελέγξουμε αν argc δεν είναι ίσο με 4, αφού 7 00:00:30,440 --> 00:00:34,350 τώρα δεν είμαστε απλά λαμβάνοντας μια infile και outfile, αλλά είμαστε επίσης λαμβάνοντας 8 00:00:34,350 --> 00:00:38,980 n, το οποίο είναι το ποσό που είμαστε κλιμάκωση της αρχικής εικόνας. 9 00:00:38,980 --> 00:00:44,340 Μόλις είμαστε σίγουροι ότι μπορούμε ακριβώς n μετατροπή σε ακέραιο χρησιμοποιώντας atoi. 10 00:00:44,340 --> 00:00:48,760 >> Έτσι, τώρα θα πάμε να δημιουργήσουμε κάποια ψευδώνυμα, απλά καλέστε argv 2 infile, και 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, επειδή argv 2 και argv 3 δεν είναι πολύ χρήσιμη ονόματα. 12 00:00:54,240 --> 00:00:58,510 Τώρα θέλουμε να βεβαιωθείτε ότι n είναι εντός των ορίων που περιμένουμε, έτσι ώστε η 13 00:00:58,510 --> 00:01:02,910 spec ορίζει ότι αν είναι μικρότερο ή ίσο με το μηδέν, ή μεγαλύτερο από 100, 14 00:01:02,910 --> 00:01:08,580 τότε αυτό είναι μια άκυρη παράγοντας αλλαγής μεγέθους, και θα πρέπει να προειδοποιεί τον χρήστη αυτό. 15 00:01:08,580 --> 00:01:13,090 >> Μόλις είμαστε πέρα ​​από όλα αυτά, μπορούμε να ανοίξουν τελικά infile μας, και χρειαζόμαστε 16 00:01:13,090 --> 00:01:16,270 σε λάθος ελέγξτε για να βεβαιωθείτε ότι η άνοιγμα δεν αποτύχει για κάποιο λόγο. 17 00:01:16,270 --> 00:01:19,860 Πρέπει, επίσης, να ανοίξει outfile μας, και και πάλι λάθος ελέγξτε για να βεβαιωθείτε ότι 18 00:01:19,860 --> 00:01:21,250 δεν αποτύχει για κάποιο λόγο. 19 00:01:21,250 --> 00:01:26,270 Αλλά να είστε σίγουροι εάν το άνοιγμα της outfile απέτυχε ότι πρέπει να κλείσει 20 00:01:26,270 --> 00:01:29,040 η infile, η οποία είχε ήδη ανοίξει. 21 00:01:29,040 --> 00:01:33,690 >> Έτσι, αν υποτεθεί ότι δεν απέτυχε, τότε Μπήκαμε - όπως ακριβώς και στην copy.c-- 22 00:01:33,690 --> 00:01:36,140 πρόκειται να διαβάσετε στην κεφαλίδα από το infile. 23 00:01:36,140 --> 00:01:40,130 Εμείς πάμε για να βεβαιωθείτε ότι είναι έγκυρη bitmap, αλλά τώρα θα πάμε να κάνουμε κάποιες 24 00:01:40,130 --> 00:01:41,620 τα πράγματα λίγο διαφορετικά. 25 00:01:41,620 --> 00:01:44,870 Έτσι, η πρώτη, θα πάμε να θέλουν να θυμάται το αρχικό πλάτος και ύψος 26 00:01:44,870 --> 00:01:48,290 του εσώτερου αρχείου, επειδή θα πάμε να να την αλλάζει προς το outfile. 27 00:01:48,290 --> 00:01:53,890 Έτσι τώρα να θυμάστε ότι για τους παράξενους λόγους bi.biheight, είναι αρνητική, και 28 00:01:53,890 --> 00:01:58,670 έτσι ώστε το πραγματικό ύψος, σε θετική, εμείς θέλουν να πάρουν την απόλυτη τιμή. 29 00:01:58,670 --> 00:02:02,580 >> Τώρα, το παραγέμισμα πρόκειται να είναι το ίδιο υπολογισμού όπως ήταν στην copy.c, 30 00:02:02,580 --> 00:02:06,060 χρησιμοποιώντας το παλιό πλάτος, και τώρα είμαστε στην πραγματικότητα πρόκειται να αλλάξει 31 00:02:06,060 --> 00:02:07,320 τι στην κεφαλίδα μας. 32 00:02:07,320 --> 00:02:11,200 Έτσι θα πάμε για να πολλαπλασιάσει το πλάτος μας n, δεδομένου ότι είμαστε κλιμάκωση του πλάτους του 33 00:02:11,200 --> 00:02:15,100 n, πολλαπλασιάστε το ύψος από το n, αφού είμαστε κλιμάκωση με n, και τώρα έχουμε 34 00:02:15,100 --> 00:02:19,250 ο υπολογισμός για ένα νέο υλικό παραγεμίσματος με βάση το νέο πλάτος. 35 00:02:19,250 --> 00:02:21,840 >> Έτσι τώρα πρέπει να αλλάξουμε κάποια άλλα πεδία στην κεφαλίδα μας. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage υποτίθεται ότι είναι η μέγεθος όλων των bytes στα pixels 37 00:02:26,890 --> 00:02:28,520 και padding της εικόνας. 38 00:02:28,520 --> 00:02:34,190 Και έτσι το μέγεθος ενός ενιαίου σειρά μας εικόνα είναι το μέγεθος του RGB τριπλή, το μέγεθος 39 00:02:34,190 --> 00:02:39,430 ενός εικονοστοιχείου, φορές τον αριθμό των pixels σε μια σειρά, συν το padding σε 40 00:02:39,430 --> 00:02:40,910 το τέλος της σειράς. 41 00:02:40,910 --> 00:02:45,200 Και μετά θα πάμε να πολλαπλασιάστε το με απόλυτη τιμή του ύψους μας για να πάρετε 42 00:02:45,200 --> 00:02:48,350 ο συνολικός αριθμός των bytes στα δεδομένα εικόνας. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize είναι μόνο ο συνολικός αριθμός των bytes σε δεδομένα εικόνας μας, έτσι 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, καθώς και η το μέγεθος των headers μας. 45 00:02:56,530 --> 00:02:59,850 Έτσι, προσθέτοντας με το μέγεθος του αρχείου bitmap κεφαλίδα και το μέγεθος του bitmap πληροφορίες 46 00:02:59,850 --> 00:03:00,800 κεφαλίδα, OK. 47 00:03:00,800 --> 00:03:03,170 Έτσι, αυτό είναι το μόνο που χρειάζεται να αλλάξετε σε κεφαλίδες μας. 48 00:03:03,170 --> 00:03:07,020 Τώρα θα γράψουμε την κεφαλίδα του αρχείου bitmap να outfile μας, και πληροφορίες bitmap μας 49 00:03:07,020 --> 00:03:09,880 header να outfile μας, και τώρα είμαστε έτοιμοι να αρχίσει να πηγαίνει 50 00:03:09,880 --> 00:03:11,990 πάνω από την πραγματική pixels. 51 00:03:11,990 --> 00:03:15,720 >> Έτσι θέλουμε να μετακινηθείτε πάνω γραμμές σάρωσης του εσώτερου αρχείου του. 52 00:03:15,720 --> 00:03:17,730 Έτσι θέλουμε να μετακινηθείτε πάνω oldheight. 53 00:03:17,730 --> 00:03:20,830 Αυτός είναι ο λόγος που χρειάζεται να θυμόμαστε το το αρχικό του ύψος, πριν αλλάξετε 54 00:03:20,830 --> 00:03:23,040 και κλιμακώνεται με n. 55 00:03:23,040 --> 00:03:27,810 Τώρα θα πάμε να διαβάσει ένα σειρά του εσώτερου αρχείου σε ένα 56 00:03:27,810 --> 00:03:30,630 buffer μεγέθους oldwidth. 57 00:03:30,630 --> 00:03:36,190 Έτσι, εδώ, είμαστε freading μέγεθος RGB τρίκλινα, ένα pixel, και παλιά πλάτος 58 00:03:36,190 --> 00:03:39,760 τους από το infile σε ρυθμιστικό μας. 59 00:03:39,760 --> 00:03:43,480 Και αυτό πρόκειται να είναι μια ολόκληρη γραμμή σε αυτή τη σειρά. 60 00:03:43,480 --> 00:03:50,390 Έτσι τώρα, θέλουμε να μετακινηθείτε n φορές να εκτυπώστε αυτή τη σειρά για να outfile n εποχή μας. 61 00:03:50,390 --> 00:03:52,510 Και έτσι αυτό είναι που αυτός ο βρόχος κάνει. 62 00:03:52,510 --> 00:03:57,910 Αυτή η εσωτερική διαδρομή είναι επανάληψη κατά τη διάρκεια των σειρά το ίδιο, πάνω από τον πίνακα, εκτύπωση 63 00:03:57,910 --> 00:04:00,710 Κάθε pixel της συστοιχίας η φορές. 64 00:04:00,710 --> 00:04:04,510 Έτσι, το μηδενικό στοιχείο τυπώνεται n φορές, το πρώτο στοιχείο γίνεται 65 00:04:04,510 --> 00:04:05,660 τυπωμένο n φορές. 66 00:04:05,660 --> 00:04:10,820 Και αυτό είναι το είδος του πώς θα πάμε να οριζόντια κλίμακα στην outfile, και 67 00:04:10,820 --> 00:04:13,390 Αυτό βρόχου, αφού είμαστε looping n φορές, είναι το πώς θα πάμε να 68 00:04:13,390 --> 00:04:15,580 κατακόρυφα κλίμακα. 69 00:04:15,580 --> 00:04:19,850 >> Εδώ κάτω, βλέπουμε ότι πρέπει να προσθέσουμε το παραγέμισμα στο τέλος κάθε σειράς. 70 00:04:19,850 --> 00:04:25,050 Γι 'αυτό είναι μέσα στο for loop που είναι η εκτύπωση των n σειρές μόνο 71 00:04:25,050 --> 00:04:28,400 αυτό μία σειρά από infile. 72 00:04:28,400 --> 00:04:32,150 Στη συνέχεια, εδώ κάτω, Πάω να υπερπηδήσει το γέμισμα του εσώτερου αρχείου, δεδομένου ότι, εφόσον 73 00:04:32,150 --> 00:04:34,560 Τελειώσαμε με μία σειρά από το infile, εμείς δεν ενδιαφερόμαστε για 74 00:04:34,560 --> 00:04:35,290 τι το παραγέμισμα ήταν. 75 00:04:35,290 --> 00:04:37,110 Εμείς απλά θέλουμε να φτάσουμε στην δεύτερη σειρά. 76 00:04:37,110 --> 00:04:40,870 Και τότε θα στραφεί προς τα πίσω και να κάνετε όλα αυτό πάλι για την δεύτερη σειρά. 77 00:04:40,870 --> 00:04:44,406 >> Τέλος, μόλις τελειώσετε με όλα αυτά, μπορούμε να κλείσει το infile, κοντά 78 00:04:44,406 --> 00:04:47,430 η outfile και επιστροφή 0 γιατί τελειώσαμε. 79 00:04:47,430 --> 00:04:50,330 >> Το όνομά μου είναι Rob, και αυτό ήταν αλλαγής μεγέθους. 80 00:04:50,330 --> 00:04:54,934 >> [Παίζει μουσική]