1 00:00:00,000 --> 00:00:00,494 2 00:00:00,494 --> 00:00:13,350 >> [REPRODUCCIÓ DE MÚSICA] 3 00:00:13,350 --> 00:00:14,080 >> ROB Bowden: Hi. 4 00:00:14,080 --> 00:00:17,550 Estic Rob, i esperem que aquesta solució l'ajuda a posar 5 00:00:17,550 --> 00:00:19,600 en el camí cap a la recuperació. 6 00:00:19,600 --> 00:00:22,700 Així que anem a començar. 7 00:00:22,700 --> 00:00:25,660 >> Veiem que immediatament estem només per assegurar-se que estem 8 00:00:25,660 --> 00:00:27,170 Recuperar utilitzant correctament. 9 00:00:27,170 --> 00:00:31,490 Així que l'ús ha de ser només una cosa com slash dot recuperar-se. 10 00:00:31,490 --> 00:00:35,500 >> Ara anem a obrir l'esperat targeta dot arxiu RAW. 11 00:00:35,500 --> 00:00:39,740 Veiem aquí que estem fent servir la constant nom d'arxiu subratllat primera, 12 00:00:39,740 --> 00:00:44,200 que aquí tenim de hash definida com la targeta del punt prima. 13 00:00:44,200 --> 00:00:45,030 D'acord. 14 00:00:45,030 --> 00:00:48,210 >> Així que hem de assegurar-nos que aquest obert amb èxit, perquè si 15 00:00:48,210 --> 00:00:51,150 No, hem d'advertir a l'usuari. 16 00:00:51,150 --> 00:00:56,770 Però suposant que fos així, ara estem va a declarar un buffer de mida JPEG 17 00:00:56,770 --> 00:00:58,170 presentar la longitud del nom. 18 00:00:58,170 --> 00:01:02,060 Així que això serà la memòria intermèdia que anem a sprintf en. 19 00:01:02,060 --> 00:01:04,360 >> Llavors, quina és la longitud del nom de l'arxiu JPEG? 20 00:01:04,360 --> 00:01:08,490 Fins aquí, veiem que es tracta d' el hash definida com vuit. 21 00:01:08,490 --> 00:01:10,670 Llavors, per vuit? 22 00:01:10,670 --> 00:01:15,150 Bé un arxiu determinat serà nomenat una mena zero zero zero. 23 00:01:15,150 --> 00:01:19,460 JPG i després necessitem una barra invertida zero. 24 00:01:19,460 --> 00:01:22,720 Així que necessitem un memòria intermèdia que pot emmagatzemar 08:00 caràcters. 25 00:01:22,720 --> 00:01:25,190 Ara tindrem un comptador que és realitzarà un seguiment de la 26 00:01:25,190 --> 00:01:27,780 JPEG nombre que trobem. 27 00:01:27,780 --> 00:01:31,590 >> I, finalment, tindrem un Arxiu JPEG que inicialment és nul · la 28 00:01:31,590 --> 00:01:35,920 que serà el moment arxiu obert que estem escrivint a. 29 00:01:35,920 --> 00:01:37,540 Ara tindrem un tampó addicional. 30 00:01:37,540 --> 00:01:41,350 Aquest no és el mateix que la nostra sprintf buffer on aquest tampó és l'un 31 00:01:41,350 --> 00:01:45,020 que estem llegint en les dades de la targeta del punt de cru. 32 00:01:45,020 --> 00:01:48,900 >> Així el tampó serà de caràcters sense signe, que es pot 33 00:01:48,900 --> 00:01:53,560 bàsicament només ens tracten bytes, i és serà de mida mida de bloc 34 00:01:53,560 --> 00:01:57,950 on, com els diem, mida del bloc és de 512. 35 00:01:57,950 --> 00:02:03,070 Així que els arxius JPEG es pot tractar tot com blocs de 512 bytes. 36 00:02:03,070 --> 00:02:05,890 >> Ara anem a bucle sobre tot l'arxiu. 37 00:02:05,890 --> 00:02:12,980 Anem a llegir f al nostre buffer un sol moment de bytes de mida de bloc de 38 00:02:12,980 --> 00:02:14,710 la targeta dot arxiu RAW. 39 00:02:14,710 --> 00:02:16,630 Ara, què f llegir tornar? 40 00:02:16,630 --> 00:02:20,050 Retorna el nombre d'elements que va llegir correctament. 41 00:02:20,050 --> 00:02:27,310 Així que si les hi va arreglar per llegir 512 bytes, a continuació, volem veure si es tractava d'un 42 00:02:27,310 --> 00:02:29,700 JPEG o escriure en un arxiu JPEG. 43 00:02:29,700 --> 00:02:34,450 I si no ha tornat 512 bytes, llavors o bé l'arxiu ha acabat en 44 00:02:34,450 --> 00:02:37,870 aquest cas sortirem de la i llaç, o si hi ha algun tipus d'error 45 00:02:37,870 --> 00:02:40,300 en aquest cas també sortirem de el bucle i, però també anem a voler informar 46 00:02:40,300 --> 00:02:41,990 que alguna cosa va sortir malament. 47 00:02:41,990 --> 00:02:42,290 >> D'acord. 48 00:02:42,290 --> 00:02:47,630 Així que suposant que llegim amb èxit en 512 bytes, volem primer xec 49 00:02:47,630 --> 00:02:53,070 per fer que aquests bytes que ens acabo de llegir en començar un JPEG. 50 00:02:53,070 --> 00:02:56,430 Així que si és encapçalat JPEG del nostre buffer. 51 00:02:56,430 --> 00:02:58,460 Ara el que està fent capçalera JPEG? 52 00:02:58,460 --> 00:03:00,120 Fem una ullada. 53 00:03:00,120 --> 00:03:05,270 >> Fins aquí, veiem que aquesta funció és tornar un toro, i el toro - 54 00:03:05,270 --> 00:03:08,820 bé aquí, estem comprovant si capçalera de zero és igual a aquesta constant i 55 00:03:08,820 --> 00:03:11,880 capçalera d'un és igual a aquesta constant i encapçalat dos és igual a aquesta constant, 56 00:03:11,880 --> 00:03:15,640 capçalera de tres és igual a això o això constant on totes aquestes constants són 57 00:03:15,640 --> 00:03:20,340 només el hash definit aquí i són exactament el que vostè diu en l'especificació 58 00:03:20,340 --> 00:03:22,700 que comença amb un arxiu JPEG. 59 00:03:22,700 --> 00:03:27,300 I pel que aquesta funció és només va a return true si aquest buffer representa 60 00:03:27,300 --> 00:03:31,750 l'inici d'un nou JPEG i false en cas contrari. 61 00:03:31,750 --> 00:03:32,520 >> D'acord. 62 00:03:32,520 --> 00:03:38,490 Així que si això sí representa un nou JPEG, llavors primer anem a comprovar per veure si 63 00:03:38,490 --> 00:03:42,030 Arxiu JPEG no és igual a null, en aquest cas el tanquem. 64 00:03:42,030 --> 00:03:44,940 I llavors per què hem de comprovar per veure si no és nul? 65 00:03:44,940 --> 00:03:48,980 Bé, la primera JPEG que no trobarem ja tenen 66 00:03:48,980 --> 00:03:50,440 un arxiu JPEG obert. 67 00:03:50,440 --> 00:03:55,580 I així, si intentem tancar això, llavors no estem fent alguna cosa molt bé. 68 00:03:55,580 --> 00:03:59,090 >> Però cada JPEG posterior que obrim, volem tancar 69 00:03:59,090 --> 00:04:00,710 el fitxer anterior. 70 00:04:00,710 --> 00:04:04,630 Així que ara utilitzarem sprintf com nosaltres dit abans en el qual estem utilitzant la 71 00:04:04,630 --> 00:04:06,280 Nom del fitxer de memòria intermèdia JPEG. 72 00:04:06,280 --> 00:04:09,870 I farem servir l'arxiu JPEG nomenar format que el nostre format. 73 00:04:09,870 --> 00:04:12,030 I què és això? 74 00:04:12,030 --> 00:04:18,450 Fins aquí, veiem que és zero per cent 3D.JPEG on el tres zero només 75 00:04:18,450 --> 00:04:22,089 diu que utilitzarem tres enters per a aquest emplenat amb zeros. 76 00:04:22,089 --> 00:04:27,470 Així que així és com anem a arribar a zero zero one.JPEG i zero 10.jpeg i així successivament. 77 00:04:27,470 --> 00:04:29,060 >> Utilitzarem sprintf. 78 00:04:29,060 --> 00:04:33,760 I el sencer que estem inserint a la cadena és JPEG entumits 79 00:04:33,760 --> 00:04:36,380 recuperat, que és originalment zero. 80 00:04:36,380 --> 00:04:39,950 Així que el primer arxiu obert que està passant que és zero zero punt zero JPEG. 81 00:04:39,950 --> 00:04:43,330 I llavors estem incrementant així la fitxer següent obrim serà zero zero 82 00:04:43,330 --> 00:04:46,830 un punt JPEG i estarem incrementem de nou, així que serà zero zero dos punts 83 00:04:46,830 --> 00:04:49,100 JPEG i així successivament. 84 00:04:49,100 --> 00:04:49,850 >> Està bé. 85 00:04:49,850 --> 00:04:53,210 Així que ara l'interior de l'arxiu JPEG nom, tenim el nom de la 86 00:04:53,210 --> 00:04:54,990 arxiu que volem. 87 00:04:54,990 --> 00:04:58,640 Podem f obrir aquest arxiu per a escriptura. 88 00:04:58,640 --> 00:04:59,170 D'acord. 89 00:04:59,170 --> 00:05:02,820 I un cop més, hem de comprovar per assegurar-se Assegureu-vos que l'arxiu correctament 90 00:05:02,820 --> 00:05:08,460 obert ja que si no ho va fer, llavors hi va haver algun error. 91 00:05:08,460 --> 00:05:13,100 >> Així que ara que hem arribat més enllà de la Aquesta és una part JPEG. 92 00:05:13,100 --> 00:05:16,390 I aquí, veiem que anem escriure al JPEG. 93 00:05:16,390 --> 00:05:20,980 Però primer tenim aquest xec que diu si l'arxiu JPEG no és igual a nul. 94 00:05:20,980 --> 00:05:22,490 Per què necessitem això? 95 00:05:22,490 --> 00:05:28,020 Bé arxiu JPEG és igual a null quan ens Actualment tenir un JPEG obert. 96 00:05:28,020 --> 00:05:31,870 >> Què passa si s'inicia primeres dot targeta amb un munt de bytes que 97 00:05:31,870 --> 00:05:33,510 no representen un JPEG? 98 00:05:33,510 --> 00:05:36,240 Llavors anem a voler saltar sobre aquests bytes. 99 00:05:36,240 --> 00:05:39,600 Si no tenim aquesta comprovació, llavors estem va a escriure en un tancar 100 00:05:39,600 --> 00:05:45,540 presentar els primers 512 bytes de la targeta que no és bo. 101 00:05:45,540 --> 00:05:46,030 D'acord. 102 00:05:46,030 --> 00:05:51,330 >> Així que assumint que tenim un arxiu obert, llavors anem a escriure en aquest arxiu de la 103 00:05:51,330 --> 00:05:53,290 512 bytes que tenim al nostre buffer. 104 00:05:53,290 --> 00:05:57,390 I estem comprovant un cop més per fer assegurar-se que els 512 bytes amb èxit 105 00:05:57,390 --> 00:06:01,140 van ser escrits perquè si no ho fossin escrit correctament, llavors alguna cosa 106 00:06:01,140 --> 00:06:02,080 que va sortir malament. 107 00:06:02,080 --> 00:06:06,540 Tancarem els nostres arxius, imprimir aquesta alguna cosa va sortir malament, i la tornada. 108 00:06:06,540 --> 00:06:10,940 Suposant que tot va correctament, seguirem tancant el bucle 109 00:06:10,940 --> 00:06:15,060 vell arxiu, obrir el nou arxiu, escriptura les dades en el nou arxiu, i així 110 00:06:15,060 --> 00:06:20,990 fins que per fi, aquest llegeix f retorna zero, el que significa 111 00:06:20,990 --> 00:06:23,280 que l'arxiu es fa. 112 00:06:23,280 --> 00:06:28,490 >> Així que ara que la lectura de la targeta ha acabat, veiem que anem a tancar el f 113 00:06:28,490 --> 00:06:33,250 últim arxiu que teníem obert, però estem comprovant si el fitxer JPEG 114 00:06:33,250 --> 00:06:34,900 no és igual a nul. 115 00:06:34,900 --> 00:06:39,520 Bé, la f estreta té sentit perquè com estem obrint arxius, anem a tancar 116 00:06:39,520 --> 00:06:43,870 el fitxer anterior, però l'últim arxiu que obrim mai es tanca. 117 00:06:43,870 --> 00:06:45,580 Així que això és el que està fent. 118 00:06:45,580 --> 00:06:47,720 >> Però per què hem de comprovar si hi ha nul? 119 00:06:47,720 --> 00:06:53,130 Bé, i si la targeta de punts primes no ha tenir una sola JPEG dins d'ella? 120 00:06:53,130 --> 00:06:56,640 En aquest cas, hauríem de mai obert un arxiu. 121 00:06:56,640 --> 00:07:00,230 I si mai obrim un arxiu, hem No tanqueu el fitxer. 122 00:07:00,230 --> 00:07:03,000 Així que això és el que aquest control està fent. 123 00:07:03,000 --> 00:07:07,880 >> Ara aquí, com he dit abans, podríem han esclatat que i bucle o bé si 124 00:07:07,880 --> 00:07:13,520 la targeta ha acabat o si hi ha alguns error de lectura de la targeta. 125 00:07:13,520 --> 00:07:16,680 Així que aquesta és la comprovació per veure si hi havia un error en la lectura de la targeta, en 126 00:07:16,680 --> 00:07:19,400 aquest cas, direm que hi ha va ser un error de lectura. 127 00:07:19,400 --> 00:07:22,130 No volem que l'usuari pensi tot ha anat correctament. 128 00:07:22,130 --> 00:07:24,750 I ens tornem un per l'error. 129 00:07:24,750 --> 00:07:29,580 >> Finalment, anem a f tanquem nostre arxiu RAW, la nostra targeta dot primera, per indicar que 130 00:07:29,580 --> 00:07:34,070 tot ha anat bé i el retorn zero i això és tot. 131 00:07:34,070 --> 00:07:36,130 >> El meu nom és Rob i això era recuperar. 132 00:07:36,130 --> 00:07:42,102 >> [REPRODUCCIÓ DE MÚSICA]