>> [MUSIQUE JEU]
>> ROB BOWDEN: Salut, je suis Rob, nous allons essayez ceci pour la taille.
Donc, nous allons commencer à nouveau avec essentiellement une copie de la copy.c, et
faire quelques changements.
Notez que nous voyons immédiatement un changement, où au lieu de vérifier pour voir si
argc n'a pas égal à 3, nous voulons vérifier si argc n'est pas égal à 4, puisque
maintenant, nous ne sommes pas seulement en prenant dans un fichier_d_entree et le fichier de sortie, mais nous avons également pris en
n, qui est le montant que nous sommes échelle de l'image originale par.
Une fois que nous sommes sûrs de cela, nous pouvons juste convertir n un entier en utilisant atoi.
>> Donc, maintenant, nous allons créer une alias, il suffit d'appeler argv 2 infile, et
argv 3 fichier_de_sortie, car argv 2 et argv 3 ne sont pas des noms très utiles.
Maintenant, nous voulons vérifier pour s'assurer que n est dans les limites que nous attendons, de sorte que le
spec précise que si c'est inférieur ou égal à zéro ou supérieur à 100,
alors que c'est un facteur de redimensionnement invalide, et nous devrions avertir l'utilisateur de cela.
>> Une fois que nous sommes au-delà de tout cela, nous pouvons enfin ouvrir notre infile, et nous devons
à l'erreur vérifier pour s'assurer que le ouverture n'a pas manqué pour une raison quelconque.
Nous avons également besoin d'ouvrir notre fichier de sortie, et nouveau contrôle d'erreur pour s'assurer que
n'a pas manqué pour quelque raison.
Mais soyez sûr que si l'ouverture de la fichier_de_sortie n'a pas que nous devons fermer
infile, qui a déjà été ouvert.
>> Donc, en supposant que n'ont pas manqué, alors Car nous sommes - comme dans copy.c--
va lire dans l'en-tête d'infile.
Nous allons vous assurer qu'il est valide bitmap, mais maintenant nous allons faire quelques
les choses un peu différemment.
Alors d'abord, nous allons vouloir rappelez-vous la largeur et la hauteur d'origine
maximale du fichier, parce que nous allons être changer pour le fichier de sortie.
Alors, n'oubliez pas maintenant que pour des raisons étranges bi.biheight, est négative, et
si la hauteur réelle, en positif, nous vouloir prendre la valeur absolue.
>> Or, le remplissage va être le même calcul comme dans copy.c,
en utilisant l'ancienne largeur, et maintenant nous sommes fait va changer
ce qui est dans notre tête.
Donc, nous allons multiplier nos largeur par n, puisque nous sommes à l'échelle la largeur par
n, multiplier la hauteur par n, puisque nous sommes mise à l'échelle par n, et maintenant nous avons
le calcul d'un nouveau rembourrage sur la base de la nouvelle largeur.
>> Alors maintenant, nous devons changer certaines d'autres domaines de notre tête.
Bi.biSizeImage est censé être l' taille de tous les octets dans les pixels
et le rembourrage de l'image.
Et si la taille d'une seule rangée de notre l'image est de taille triple RVB, la taille
d'un pixel unique, fois le nombre de pixels dans une rangée, plus le rembourrage à
l'extrémité de la rangée.
Et puis nous allons multiplier par valeur absolue de notre taille pour obtenir
le nombre total d'octets dans les données d'image.
bf.bfSize n'est que le nombre total des octets dans nos données d'image, de sorte
bi.biSizeImage, plus l' taille de nos têtes.
Ainsi, l'ajout de la taille de fichier bitmap tête, et la taille des informations bitmap
tête, OK.
C'est tout ce que nous devons changer dans nos têtes.
Maintenant, nous allons écrire l'en-tête de fichier bitmap à notre fichier de sortie, et notre information de bitmap
header à notre fichier de sortie, et maintenant nous sommes prêts à commencer à aller
sur les pixels réels.
>> Donc, nous voulons parcourir les lignes de balayage de INFILE.
Donc, nous voulons parcourir oldheight.
C'est pourquoi nous avions besoin de rappeler la hauteur d'origine, avant que nous changeons
et mis à l'échelle par n.
Maintenant, nous allons lire un seul ligne de la infile dans un
tampon de taille oldwidth.
Taille alors voici, nous freading de RVB triple, un pixel, et ancien largeur de
les de la infile dans notre buffer.
Et que ça va être un ensemble de rangée dans ce tableau.
Alors maintenant, nous voulons réitérer n fois à imprimer cette ligne à notre fichier de sortie n fois.
Et c'est ce que cette boucle est en train de faire.
Cette boucle intérieure est itération sur la elle-même rangée, sur le réseau, l'impression
chaque pixel dans la matrice de n fois.
Donc, l'élément zéro est en cours d'impression n fois, le premier élément est en cours de
n fois imprimé.
Et c'est un peu de la façon dont nous allons redimensionner horizontalement dans le fichier de sortie, et
cette boucle, puisque nous sommes en boucle n fois, est de savoir comment nous allons
échelle verticale.
>> Ici, nous voyons que nous devons ajouter le rembourrage à la fin de chaque ligne.
C'est pourquoi c'est à l'intérieur de la boucle pour C'est l'impression des n lignes de juste
ce une rangée d'infile.
Alors ici, je vais sauter le rembourrage dans le infile, car une fois
nous en avons terminé avec une ligne de la infile, nous ne nous soucions pas de
ce qui était le rembourrage.
Nous voulons juste obtenir de la deuxième rangée.
Et puis nous allons revenir en arrière pour faire tout ce nouveau pour la deuxième rangée.
>> Enfin, une fois que nous en avons terminé avec tout cela, nous pouvons fermer le fichier-entrée, près
le fichier de sortie et le retour 0 parce que nous avons terminé.
>> Mon nom est Rob, et ce fut redimensionnement.
>> [MUSIQUE JEU]