>> [MUSIQUE JEU]
>> ZAMYLA CHAN: le coup de Let les choses avec redimensionnement.
En redimensionnement, l'utilisateur passera dans, par la ligne de commande, une image bitmap
ils veulent mettre à l'échelle par un nombre qu'ils passent également dans,
dans la ligne de commande.
Comment faisons-nous cela?
>> Eh bien, Tout d'abord, laissez nous décomposer en étapes.
Vous allez avoir à ouvrir le fichier-entrée qu'ils vous donnent, ainsi que
créer et ouvrir le fichier de sortie que vous allez mettre la
image redimensionnée po
Ensuite, parce que vous êtes le redimensionnement, et parce que c'est une image bitmap, un en-tête, de sorte
vous allez également mettre à jour l'en-tête informations pour le fichier de sortie,
et écrire que po
Ensuite, vous allez lire dans la ligne de balayage maximale du fichier,
pixel par pixel, le redimensionnement de l'horizontale et l'écriture de ces pixels dans la
outfile, comme spécifié par l'échelle de l'utilisateur.
>> Vous allez vous rappeler de ajouter rembourrage nécessaire.
Plus sur cela plus tard.
Et puis, redimensionner aussi verticalement.
OK.
Donc cela va être un peu plus Qui compliqué que faire, mais
ce qui est similaire, c'est que copy.c volonté, de plus, s'avérer très utile.
Rappelez-vous que copy.c ouvre un fichier, met à jour les informations d'en-tête pour l'
outfile, puis lit dans la ligne de balayage, pixel par pixel, chaque pixel d'écriture
dans la ligne de balayage de fichier de sortie.
>> Encore une fois, votre première étape pourrait probablement être à cp, copy.c, resize.c
dans votre répertoire PSET5.
Rappelez-vous cependant, avant de le copier, pour s'assurer que vous comprenez
copy.c très bien.
OK.
>> Donc, nous allons ouvrir un fichier.
Vous savez comment le faire.
Je vais laisser cela à vous.
Ensuite, mettre à jour les informations d'en-tête pour le fichier de sortie.
Parce que nous avons un nouveau bitmap, nous avons de nouvelles informations d'en-tête.
Qu'est-ce que ça change ici?
Eh bien, la taille du fichier va changer parce que nous allons avoir plus
pixels qu'auparavant.
La taille de l'image est, par conséquent, également va changer, ce qui est le
la largeur et la hauteur.
>> Donc, les variables qui sont ceux, exactement?
Eh bien, si vous regardez dans l'en-tête informations, voyez-vous, il est
biSizeImage, qui représente le total la taille de l'image en octets,
comprenant des pixels et le rembourrage.
biWidth est la largeur de l'image en pixels, moins le rembourrage.
biHeight est la hauteur de l'image en pixels.
Et si ceux qui sont contenus dans la struct BITMAPFILEHEADER et
BITMAPINFOHEADER.
Vous pouvez dire que l'on est qui, par aller à bmp.h et en regardant la
BITMAPINFOHEADER structure et de voir les variables qui y sont répertoriés.
>> Donc, pour mettre à jour l'en-tête outfiles informations, vous allez vouloir
changer les valeurs de la la hauteur et la largeur.
Mais les chances sont, vous pourriez avoir besoin d' de l'information d'en-tête de la fichier_d_entree
plus tard, donc il vaut mieux garder la trace des deux.
Mais être très clair avec votre variable noms de sorte que vous n'avez pas accidentellement
écrire les valeurs incorrectes dans l'en-tête pour le fichier de sortie.
>> Alors maintenant, passons à la lecture dans la ligne de balayage pixel par pixel.
Encore une fois, nous allons parler de notre fidèle Bibliothèque de fichiers I / O, et regarder
la fonction fread.
fread prend un pointeur vers une structure qui contiendra les octets
vous lisez dans, la taille de chaque élément que vous lisez -
de plus, sizeof va être utile fonctionner ici, le numéro de l'
éléments de taille, la taille, que vous êtes lecture, et enfin, la
inpointer, le fichier que vous lisez.
Donc vous prenez des éléments numériques de la taille de inpointer, et
leur mise en données.
>> Maintenant il est temps de redimensionner horizontalement.
si n est égal à 2, puis, pour chaque pixel dans infile, nous allons écrire
deux fois dans le fichier de sortie.
Comment écrire des fichiers?
Eh bien, nous avons la fonction fwrite, si nous avons pris le pointeur sur la structure
qui contient les octets que vous êtes écrit par, puis nous passons en
la taille, le nombre et la sortie, où vous allez être écrit.
Et puis de répéter un processus, seront mesure simple itératif pour la boucle.
>> Mais nous devons nous rappeler d'ajouter le remplissage po
Le concept de remplissage est que, eh bien, chaque pixel est de trois piqûres, mais la
taille de chaque ligne de balayage de moût de être un multiple de 4 octets.
Donc, si le nombre de pixels n'est pas un multiple de 4, nous avons besoin d'ajouter un peu
rembourrage, qui est seulement des zéros.
Maintenant, à la différence qui fait, et contrairement à copie, puis l'image infile et la
fichier outfile ont différentes ont rembourrage différent parce qu'ils sont
des largeurs différentes.
>> OK.
Alors peut-être une formule serait être utile ici.
Je vous laisse le soin de le découvrir, mais vous dire que, pour écrire rembourrage,
bien, c'est juste une fonction de fputc simple, passant dans le caractère
que vous voulez écrire, puis le pointeur de fichier que vous
vouloir écrire.
Alors, maintenant que nous avons redimensionné horizontalement, et ensuite utilisé rembourrage,
n'oubliez pas que vous devez déplacer votre fichier indicateur de position, parce que vous
ne peut pas FREAD en rembourrage.
Donc, vous voulez vous assurer que votre fichier l'indicateur de position dans le fichier_d_entree
est au bon endroit.
Parce que nous voulons aussi redimensionner verticalement.
Nous ne pouvons pas étirer horizontalement, parce que tous les besoins de lignes
à copier n fois.
>> Maintenant, il ya plusieurs différents façons de le faire.
Donc un, nous pouvons utiliser une méthode de réécriture, en que nous nous souvenons de tous les pixels
d'une ligne donnée dans un tableau, et alors nous écrivons ce tableau comme
autant de fois que nécessaire.
Ou il ya la méthode de recopie où, après avoir lu dans une ligne dans le fichier-entrée
puis écrit dans le fichier de sortie, ajoutant le rembourrage, nous FSEEK
revenir au début de la ligne d'origine, et puis répétez l'horizontale
redimensionnement à partir de là.
Peu importe la méthode, cependant, vous aurez voulons que chaque pixel à répéter
n fois, et chaque ligne pour être répétée n fois ainsi.
>> Avec cela, vous aurez bitmap plus grand que la vie.
Mon nom est Zamyla, et c'est CS50.