1 00:00:00,000 --> 00:00:12,240 >> [REPRODUCCIÓ DE MÚSICA] 2 00:00:12,240 --> 00:00:15,870 >> ROB Bowden: Hola, sóc Rob, anem a provar això en la grandària. 3 00:00:15,870 --> 00:00:21,100 Per tant, estem de nou anem a començar amb bàsicament una còpia de la copy.c, i 4 00:00:21,100 --> 00:00:22,860 fer alguns canvis. 5 00:00:22,860 --> 00:00:26,280 Nota immediatament veiem un canvi, on en lloc de comprovar per veure si 6 00:00:26,280 --> 00:00:30,440 argc no és igual a 3, volem comprovar si argc no és igual a 4, ja que 7 00:00:30,440 --> 00:00:34,350 Ara no només estem prenent en un infile i arxiu de sortida, però estem tenint també en 8 00:00:34,350 --> 00:00:38,980 n, que és la quantitat que estem escalar la imatge original. 9 00:00:38,980 --> 00:00:44,340 Quan estiguem segurs, no podem simplement convertir n en un enter utilitzant atoi. 10 00:00:44,340 --> 00:00:48,760 >> Així que, ara que crearem una mica de àlies, simplement diuen argv 2 infile i 11 00:00:48,760 --> 00:00:54,240 argv 3 archivosalida, perquè argv 2 i argv 3 no són noms molt útils. 12 00:00:54,240 --> 00:00:58,510 Ara volem comprovar per assegurar-se que n és dins dels límits s'espera, de manera que el 13 00:00:58,510 --> 00:01:02,910 spec especifica que si és inferior o igual a zero, o major que 100, 14 00:01:02,910 --> 00:01:08,580 llavors això és un factor de canvi de mida no vàlid, i hem d'advertir a l'usuari d'això. 15 00:01:08,580 --> 00:01:13,090 >> Un cop estem més enllà de tot això, podem finalment obrir la nostra infile, i necessitem 16 00:01:13,090 --> 00:01:16,270 l'error de comprovació per assegurar-se que el obertura no va fallar per alguna raó. 17 00:01:16,270 --> 00:01:19,860 També hem d'obrir el nostre arxiu de sortida, i nou error de comprovació per assegurar-se que 18 00:01:19,860 --> 00:01:21,250 no va fallar per alguna raó. 19 00:01:21,250 --> 00:01:26,270 Però estar segur de si l'obertura de la archivosalida va fallar que necessitem per tancar 20 00:01:26,270 --> 00:01:29,040 el infile, que ja estava oberta. 21 00:01:29,040 --> 00:01:33,690 >> Així, en el cas que no fallen, ; Som - igual que en copy.c-- 22 00:01:33,690 --> 00:01:36,140 va a llegir a la capçalera Del infile. 23 00:01:36,140 --> 00:01:40,130 Anem a assegurar-se que és un vàlid mapa de bits, però ara farem una mica de 24 00:01:40,130 --> 00:01:41,620 les coses una mica diferent. 25 00:01:41,620 --> 00:01:44,870 Així que en primer lloc, anem a voler recordar l'amplada i alçada original 26 00:01:44,870 --> 00:01:48,290 del infile, perquè anem a estar canviant per a l'arxiu de sortida. 27 00:01:48,290 --> 00:01:53,890 Així que ara recordar que per raons estranyes bi.biheight, és negatiu, i 28 00:01:53,890 --> 00:01:58,670 per la qual cosa l'altura real, en positiu, volen prendre el valor absolut. 29 00:01:58,670 --> 00:02:02,580 >> Ara, el farciment serà la mateixa càlcul com ho va ser en copy.c, 30 00:02:02,580 --> 00:02:06,060 utilitzant l'antic ample, i ara estem en realitat canviarà 31 00:02:06,060 --> 00:02:07,320 el que està en la nostra capçalera. 32 00:02:07,320 --> 00:02:11,200 Així que anem a multiplicar nostre ample per n, ja que estem escalant l'ample de 33 00:02:11,200 --> 00:02:15,100 n, multipliqui l'altura per n, ja que estem escalar per n, i ara tenim 34 00:02:15,100 --> 00:02:19,250 el càlcul d'un nou encoixinat basat en el nou ample. 35 00:02:19,250 --> 00:02:21,840 >> Així que ara hem de canviar alguns altres camps de la nostra capçalera. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage se suposa que és el La mida de tots els bytes en els píxels 37 00:02:26,890 --> 00:02:28,520 i el farciment de la imatge. 38 00:02:28,520 --> 00:02:34,190 I el que la mida d'una sola fila de la nostra la imatge és la mida del RGB triple, la mida 39 00:02:34,190 --> 00:02:39,430 d'un sol píxel, multiplicat pel nombre de píxels en una fila, més el farciment en 40 00:02:39,430 --> 00:02:40,910 al final de la fila. 41 00:02:40,910 --> 00:02:45,200 I després anem a multiplicar per valor absolut de la nostra alçada per obtenir 42 00:02:45,200 --> 00:02:48,350 el nombre total de bytes en les dades d'imatge. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize és només el nombre total de bytes de les dades d'imatge, de manera que 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, a més de la mida dels nostres capçaleres. 45 00:02:56,530 --> 00:02:59,850 Així, l'addició a la mida d'arxiu de mapa de bits encapçalat, i la mida de les dades de mapa de bits 46 00:02:59,850 --> 00:03:00,800 encapçalat, OK. 47 00:03:00,800 --> 00:03:03,170 Així que això és tot el que necessitem canviar en les nostres capçaleres. 48 00:03:03,170 --> 00:03:07,020 Ara anem a escriure la capçalera del fitxer de mapa de bits en el nostre arxiu de sortida, i la nostra informació de mapa de bits 49 00:03:07,020 --> 00:03:09,880 capçalera al nostre arxiu de sortida, i ara estem preparats per començar a anar 50 00:03:09,880 --> 00:03:11,990 sobre els píxels reals. 51 00:03:11,990 --> 00:03:15,720 >> Així que volem recórrer en iteració línies d'exploració del INFILE. 52 00:03:15,720 --> 00:03:17,730 Així que volem recórrer en iteració oldheight. 53 00:03:17,730 --> 00:03:20,830 Aquesta és la raó que necessitàvem per recordar la alçada original, abans que ens canviem 54 00:03:20,830 --> 00:03:23,040 i escalat per n. 55 00:03:23,040 --> 00:03:27,810 Ara llegirem un sol fila de l'infile en un 56 00:03:27,810 --> 00:03:30,630 buffer de mida oldwidth. 57 00:03:30,630 --> 00:03:36,190 Així que aquí, estem freading mida de RGB triple, un píxel, i l'amplada d'edat de 58 00:03:36,190 --> 00:03:39,760 de l'arxiu d'entrada al nostre buffer. 59 00:03:39,760 --> 00:03:43,480 I això serà un tot remar en aquesta matriu. 60 00:03:43,480 --> 00:03:50,390 Així que ara, volem repetir n vegades per imprimir aquesta fila al nostre arxiu de sortida n vegades. 61 00:03:50,390 --> 00:03:52,510 I això és el que aquest bucle està fent. 62 00:03:52,510 --> 00:03:57,910 Aquest bucle interior està iterant sobre el fila en si, sobre la matriu, la impressió 63 00:03:57,910 --> 00:04:00,710 cada píxel de la matriu de n vegades. 64 00:04:00,710 --> 00:04:04,510 De manera que l'element d'ordre zero s'està imprimint n vegades, el primer element està sent 65 00:04:04,510 --> 00:04:05,660 imprès n vegades. 66 00:04:05,660 --> 00:04:10,820 I això és una espècie de com anem a horitzontalment escala a l'arxiu de sortida, i 67 00:04:10,820 --> 00:04:13,390 aquest bucle, ja que estem en bucle n vegades, és la forma en què anem a 68 00:04:13,390 --> 00:04:15,580 escala vertical. 69 00:04:15,580 --> 00:04:19,850 >> Aquí sota, veiem que hem d'afegir el farciment al final de cada fila. 70 00:04:19,850 --> 00:04:25,050 És per això que això és dins del bucle d' això és imprimir les n files de només 71 00:04:25,050 --> 00:04:28,400 aquest fila de la infile. 72 00:04:28,400 --> 00:04:32,150 Llavors aquí, vaig a passar per alt el farciment al fitxer d'entrada, ja que un cop 73 00:04:32,150 --> 00:04:34,560 hem acabat amb una fila de la infile, no importa 74 00:04:34,560 --> 00:04:35,290 Quin va ser el farcit. 75 00:04:35,290 --> 00:04:37,110 Només volem arribar a la segona fila. 76 00:04:37,110 --> 00:04:40,870 I després anem a bucle de nou i fer tot això de nou per a la segona fila. 77 00:04:40,870 --> 00:04:44,406 >> Finalment, un cop hem acabat amb tot això, podem tancar l'arxiu d'entrada, prop 78 00:04:44,406 --> 00:04:47,430 l'arxiu de sortida, i el retorn 0 perquè hem acabat. 79 00:04:47,430 --> 00:04:50,330 >> El meu nom és Rob, i això era de mida. 80 00:04:50,330 --> 00:04:54,934 >> [REPRODUCCIÓ DE MÚSICA]