1 00:00:00,000 --> 00:00:12,240 >> [MUSIQUE JEU] 2 00:00:12,240 --> 00:00:15,870 >> ROB BOWDEN: Salut, je suis Rob, nous allons essayez ceci pour la taille. 3 00:00:15,870 --> 00:00:21,100 Donc, nous allons commencer à nouveau avec essentiellement une copie de la copy.c, et 4 00:00:21,100 --> 00:00:22,860 faire quelques changements. 5 00:00:22,860 --> 00:00:26,280 Notez que nous voyons immédiatement un changement, où au lieu de vérifier pour voir si 6 00:00:26,280 --> 00:00:30,440 argc n'a pas égal à 3, nous voulons vérifier si argc n'est pas égal à 4, puisque 7 00:00:30,440 --> 00:00:34,350 maintenant, nous ne sommes pas seulement en prenant dans un fichier_d_entree et le fichier de sortie, mais nous avons également pris en 8 00:00:34,350 --> 00:00:38,980 n, qui est le montant que nous sommes échelle de l'image originale par. 9 00:00:38,980 --> 00:00:44,340 Une fois que nous sommes sûrs de cela, nous pouvons juste convertir n un entier en utilisant atoi. 10 00:00:44,340 --> 00:00:48,760 >> Donc, maintenant, nous allons créer une alias, il suffit d'appeler argv 2 infile, et 11 00:00:48,760 --> 00:00:54,240 argv 3 fichier_de_sortie, car argv 2 et argv 3 ne sont pas des noms très utiles. 12 00:00:54,240 --> 00:00:58,510 Maintenant, nous voulons vérifier pour s'assurer que n est dans les limites que nous attendons, de sorte que le 13 00:00:58,510 --> 00:01:02,910 spec précise que si c'est inférieur ou égal à zéro ou supérieur à 100, 14 00:01:02,910 --> 00:01:08,580 alors que c'est un facteur de redimensionnement invalide, et nous devrions avertir l'utilisateur de cela. 15 00:01:08,580 --> 00:01:13,090 >> Une fois que nous sommes au-delà de tout cela, nous pouvons enfin ouvrir notre infile, et nous devons 16 00:01:13,090 --> 00:01:16,270 à l'erreur vérifier pour s'assurer que le ouverture n'a pas manqué pour une raison quelconque. 17 00:01:16,270 --> 00:01:19,860 Nous avons également besoin d'ouvrir notre fichier de sortie, et nouveau contrôle d'erreur pour s'assurer que 18 00:01:19,860 --> 00:01:21,250 n'a pas manqué pour quelque raison. 19 00:01:21,250 --> 00:01:26,270 Mais soyez sûr que si l'ouverture de la fichier_de_sortie n'a pas que nous devons fermer 20 00:01:26,270 --> 00:01:29,040 infile, qui a déjà été ouvert. 21 00:01:29,040 --> 00:01:33,690 >> Donc, en supposant que n'ont pas manqué, alors Car nous sommes - comme dans copy.c-- 22 00:01:33,690 --> 00:01:36,140 va lire dans l'en-tête d'infile. 23 00:01:36,140 --> 00:01:40,130 Nous allons vous assurer qu'il est valide bitmap, mais maintenant nous allons faire quelques 24 00:01:40,130 --> 00:01:41,620 les choses un peu différemment. 25 00:01:41,620 --> 00:01:44,870 Alors d'abord, nous allons vouloir rappelez-vous la largeur et la hauteur d'origine 26 00:01:44,870 --> 00:01:48,290 maximale du fichier, parce que nous allons être changer pour le fichier de sortie. 27 00:01:48,290 --> 00:01:53,890 Alors, n'oubliez pas maintenant que pour des raisons étranges bi.biheight, est négative, et 28 00:01:53,890 --> 00:01:58,670 si la hauteur réelle, en positif, nous vouloir prendre la valeur absolue. 29 00:01:58,670 --> 00:02:02,580 >> Or, le remplissage va être le même calcul comme dans copy.c, 30 00:02:02,580 --> 00:02:06,060 en utilisant l'ancienne largeur, et maintenant nous sommes fait va changer 31 00:02:06,060 --> 00:02:07,320 ce qui est dans notre tête. 32 00:02:07,320 --> 00:02:11,200 Donc, nous allons multiplier nos largeur par n, puisque nous sommes à l'échelle la largeur par 33 00:02:11,200 --> 00:02:15,100 n, multiplier la hauteur par n, puisque nous sommes mise à l'échelle par n, et maintenant nous avons 34 00:02:15,100 --> 00:02:19,250 le calcul d'un nouveau rembourrage sur la base de la nouvelle largeur. 35 00:02:19,250 --> 00:02:21,840 >> Alors maintenant, nous devons changer certaines d'autres domaines de notre tête. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage est censé être l' taille de tous les octets dans les pixels 37 00:02:26,890 --> 00:02:28,520 et le rembourrage de l'image. 38 00:02:28,520 --> 00:02:34,190 Et si la taille d'une seule rangée de notre l'image est de taille triple RVB, la taille 39 00:02:34,190 --> 00:02:39,430 d'un pixel unique, fois le nombre de pixels dans une rangée, plus le rembourrage à 40 00:02:39,430 --> 00:02:40,910 l'extrémité de la rangée. 41 00:02:40,910 --> 00:02:45,200 Et puis nous allons multiplier par valeur absolue de notre taille pour obtenir 42 00:02:45,200 --> 00:02:48,350 le nombre total d'octets dans les données d'image. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize n'est que le nombre total des octets dans nos données d'image, de sorte 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, plus l' taille de nos têtes. 45 00:02:56,530 --> 00:02:59,850 Ainsi, l'ajout de la taille de fichier bitmap tête, et la taille des informations bitmap 46 00:02:59,850 --> 00:03:00,800 tête, OK. 47 00:03:00,800 --> 00:03:03,170 C'est tout ce que nous devons changer dans nos têtes. 48 00:03:03,170 --> 00:03:07,020 Maintenant, nous allons écrire l'en-tête de fichier bitmap à notre fichier de sortie, et notre information de bitmap 49 00:03:07,020 --> 00:03:09,880 header à notre fichier de sortie, et maintenant nous sommes prêts à commencer à aller 50 00:03:09,880 --> 00:03:11,990 sur les pixels réels. 51 00:03:11,990 --> 00:03:15,720 >> Donc, nous voulons parcourir les lignes de balayage de INFILE. 52 00:03:15,720 --> 00:03:17,730 Donc, nous voulons parcourir oldheight. 53 00:03:17,730 --> 00:03:20,830 C'est pourquoi nous avions besoin de rappeler la hauteur d'origine, avant que nous changeons 54 00:03:20,830 --> 00:03:23,040 et mis à l'échelle par n. 55 00:03:23,040 --> 00:03:27,810 Maintenant, nous allons lire un seul ligne de la infile dans un 56 00:03:27,810 --> 00:03:30,630 tampon de taille oldwidth. 57 00:03:30,630 --> 00:03:36,190 Taille alors voici, nous freading de RVB triple, un pixel, et ancien largeur de 58 00:03:36,190 --> 00:03:39,760 les de la infile dans notre buffer. 59 00:03:39,760 --> 00:03:43,480 Et que ça va être un ensemble de rangée dans ce tableau. 60 00:03:43,480 --> 00:03:50,390 Alors maintenant, nous voulons réitérer n fois à imprimer cette ligne à notre fichier de sortie n fois. 61 00:03:50,390 --> 00:03:52,510 Et c'est ce que cette boucle est en train de faire. 62 00:03:52,510 --> 00:03:57,910 Cette boucle intérieure est itération sur la elle-même rangée, sur le réseau, l'impression 63 00:03:57,910 --> 00:04:00,710 chaque pixel dans la matrice de n fois. 64 00:04:00,710 --> 00:04:04,510 Donc, l'élément zéro est en cours d'impression n fois, le premier élément est en cours de 65 00:04:04,510 --> 00:04:05,660 n fois imprimé. 66 00:04:05,660 --> 00:04:10,820 Et c'est un peu de la façon dont nous allons redimensionner horizontalement dans le fichier de sortie, et 67 00:04:10,820 --> 00:04:13,390 cette boucle, puisque nous sommes en boucle n fois, est de savoir comment nous allons 68 00:04:13,390 --> 00:04:15,580 échelle verticale. 69 00:04:15,580 --> 00:04:19,850 >> Ici, nous voyons que nous devons ajouter le rembourrage à la fin de chaque ligne. 70 00:04:19,850 --> 00:04:25,050 C'est pourquoi c'est à l'intérieur de la boucle pour C'est l'impression des n lignes de juste 71 00:04:25,050 --> 00:04:28,400 ce une rangée d'infile. 72 00:04:28,400 --> 00:04:32,150 Alors ici, je vais sauter le rembourrage dans le infile, car une fois 73 00:04:32,150 --> 00:04:34,560 nous en avons terminé avec une ligne de la infile, nous ne nous soucions pas de 74 00:04:34,560 --> 00:04:35,290 ce qui était le rembourrage. 75 00:04:35,290 --> 00:04:37,110 Nous voulons juste obtenir de la deuxième rangée. 76 00:04:37,110 --> 00:04:40,870 Et puis nous allons revenir en arrière pour faire tout ce nouveau pour la deuxième rangée. 77 00:04:40,870 --> 00:04:44,406 >> Enfin, une fois que nous en avons terminé avec tout cela, nous pouvons fermer le fichier-entrée, près 78 00:04:44,406 --> 00:04:47,430 le fichier de sortie et le retour 0 parce que nous avons terminé. 79 00:04:47,430 --> 00:04:50,330 >> Mon nom est Rob, et ce fut redimensionnement. 80 00:04:50,330 --> 00:04:54,934 >> [MUSIQUE JEU]