[REPRODUCCIÓN DE MÚSICA] ZAMYLA CHAN: golpe nos dejó las cosas con cambio de tamaño. En cambio de tamaño, el usuario pasará en, a través de la línea de comandos, una imagen de mapa de bits que que quieren escalar por un número que también pasan en, en la línea de comandos. ¿Cómo hacemos esto? Bueno, primero lo primero, vamos a descomponerlo en pasos. Usted va a querer abrir el archivo de entrada que te dan, así como crear y abrir el archivo de salida que usted va a poner el imagen redimensionada pulg Entonces, debido a que está el cambio de tamaño, y porque es un mapa de bits, es un encabezado, por lo usted va a actualizar también la cabecera información para el archivo de salida, y escribir que pulg Entonces, vas a leer en la línea de exploración del archivo de entrada, pixel por pixel, cambiar el tamaño horizontal y escribir los píxeles en la archivosalida, tal como se especifica por la escala del usuario. Vas a recordar a agregar relleno según sea necesario. Más sobre esto más adelante. Y luego, también cambiar el tamaño vertical. Aceptar. Así que esto va a ser un poco más complicado que quién lo hizo, pero lo que es similar es el copy.c voluntad, otra vez, resultar muy útil. Recuerde que copy.c abre un archivo, actualiza la información del encabezado para el archivosalida, luego lee en la línea de exploración, píxel por píxel, escribiendo cada píxel en línea de exploración del archivo de salida. Así que de nuevo, el primer paso podría probablemente la de cp, copy.c, resize.c en su directorio PSET5. Recuerde, sin embargo, antes de copiarlo, para asegurarse de que usted entiende copy.c muy a fondo. Aceptar. Así que vamos a abrir un archivo. Ya sabes cómo hacer eso. Voy a dejar eso a usted. A continuación, actualizar la información de la cabecera para el archivo de salida. Debido a que tenemos un nuevo mapa de bits, tenemos nueva información de la cabecera. ¿Qué está cambiando en esta lista? Pues bien, el tamaño de archivo se va a cambiar porque vamos a tener más píxeles que antes. El tamaño de la imagen es, por lo tanto, también va a cambiar, como es el anchura y la altura. Así que las variables son aquellos, exactamente? Bueno, si nos fijamos en la cabecera información, se ve que hay biSizeImage, que representa el total tamaño de la imagen en bytes, incluyendo píxeles y relleno. biWidth es el ancho de la imagen en píxeles, menos el relleno. biHeight es la altura de la imagen en píxeles. Y por lo que aquellos están contenidos en el estructuras BITMAPFILEHEADER y BITMAPINFOHEADER. Se puede decir cuál es cuál por va a bmp.h y mirando a la Struct BITMAPINFOHEADER y visión que se incluyen de variables. Así que para actualizar la cabecera outfiles información, usted va a querer cambiar los valores de la la altura y el ancho. Pero es probable que, es posible que tenga alguna de la información de encabezado del archivo de entrada más tarde, así que es mejor no perder de vista a la vez. Pero ser muy claro con la variable nombres, así que no accidentalmente escribir los valores incorrectos en el encabezado del archivo de salida. Así que ahora vamos a llegar a la lectura en el píxel por píxel línea de exploración. Una vez más, vamos a pasar a nuestro fiel presentar biblioteca E / S, y mirar la función fread. fread toma en un puntero a una estructura que contendrá los bytes que usted está leyendo en el tamaño de cada elemento que está leyendo - de nuevo, sizeof va a ser útil funcionar aquí, el número de la elementos de tamaño, el tamaño, que usted es la lectura y, a continuación, por último, la inpointer, el archivo que usted está leyendo. Así que usted está tomando elementos numéricos de tamaño desde inpointer, y puesta en los datos. Ahora es el momento de cambiar el tamaño horizontal. si n es igual a 2, a continuación, para cada píxel en el infile, vamos a escribirlo dos veces en el archivo de salida. ¿Cómo escribimos archivos? Bueno, tenemos la función fwrite, por lo nos hemos tomado el puntero a la estructura que contiene los bytes que eres escribiendo desde, y luego pasar en tamaño, número, y la salida, donde usted va a estar escribiendo esto. Y a continuación, repetir un proceso, será capaz de un iterativo simple para bucle. Pero tenemos que recordar agregar relleno pulg El concepto de relleno es que, bueno, cada píxel es tres picaduras, pero la tamaño de cada necesidad scanline ser un múltiplo de 4 bytes. Así que si el número de píxeles no es un múltiplo de 4, tenemos que añadir un poco de relleno, que está a sólo ceros. Ahora, a diferencia de quién lo hizo, y al contrario que copia, a continuación, la imagen infile y la archivo archivosalida haber diferentes tienen diferente de relleno porque son diferentes anchuras. Aceptar. Así que tal vez una fórmula haría muy útil aquí. Lo dejo a usted para averiguarlo, pero te dicen que, para escribir el relleno, bueno, es sólo una función fputc simple, que pasa en el carácter que quieres escribir, y luego el puntero del archivo que quiero escribir. Así que ahora que hemos cambiado el tamaño horizontal, y luego se usa el relleno, recuerde que usted necesita para mover su archivo indicador de posición, porque no puede fread en el relleno. Así que usted quiere asegurarse de que su archivo indicador de posición en el archivo de entrada es en el punto correcto. Porque también queremos cambiar el tamaño vertical. No podemos estirar horizontalmente, porque las necesidades de cada fila a copiar n veces. Ahora, hay varios diferentes maneras de hacer esto. Así que uno, se puede utilizar un método de reescritura, en que recordemos todos los píxeles de una fila determinada de una matriz, y luego escribimos la matriz como tantas veces como sea necesario. O está el método recopy donde, después de leer en una fila en el archivo de entrada y luego por escrito que en el archivo de salida, añadiendo el relleno, que FSEEK de nuevo al comienzo de la fila original, y luego repetir la horizontal cambio de tamaño a partir de ahí. Independientemente del método, sin embargo, usted quieren cada píxel que se repita n veces, y cada fila para ser repetida n veces también. Con esto, usted tendrá mapa de bits más grande que la vida. Mi nombre es Zamyla, y esto es CS50.