1 00:00:00,000 --> 00:00:10,210 >> [MUZIKO Ludanta] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: Ni baton aferojn kun ŝanĝi grandecon. 3 00:00:13,320 --> 00:00:17,710 En ŝanĝi grandecon, la uzanto pasos en, tra la komandlinio, a bitmap image ke 4 00:00:17,710 --> 00:00:21,860 Ili volas, ke vi grimpi per nombro ke ili ankaŭ iam en, 5 00:00:21,860 --> 00:00:23,770 en la komandlinio. 6 00:00:23,770 --> 00:00:24,690 Kiel ni faru tion? 7 00:00:24,690 --> 00:00:28,270 >> Nu, unue aferoj unue, ni rompi ĉi malsupren en paŝoj. 8 00:00:28,270 --> 00:00:31,510 Vi tuj volas malfermi la infile ke oni donu al vi, tiel kiel 9 00:00:31,510 --> 00:00:35,560 krei kaj malfermu la outfile ke vi tuj metis la 10 00:00:35,560 --> 00:00:38,020 malpligrandigeblaj bildo in 11 00:00:38,020 --> 00:00:42,050 Poste, ĉar vi regrandigi kaj ĉar ĝi estas bitbildo, ĝin kaplinio, tiel 12 00:00:42,050 --> 00:00:46,080 vi tuj ankaŭ ĝisdatigi la kaplinio informoj por la outfile, 13 00:00:46,080 --> 00:00:47,950 kaj skribi ke in 14 00:00:47,950 --> 00:00:51,850 Tiam, vi legos en la scanline de la infile, 15 00:00:51,850 --> 00:00:56,890 bildero-per-bildero, regrandigi horizontale kaj skribi tiujn rastrumeroj en la 16 00:00:56,890 --> 00:01:00,910 outfile, kiel specifis per la uzanto skalo. 17 00:01:00,910 --> 00:01:03,940 >> Vi tuj memoras al aldoni Plenigado kiel necese. 18 00:01:03,940 --> 00:01:05,400 Pli pri tio poste. 19 00:01:05,400 --> 00:01:07,790 Kaj tiam, ankaux regrandigi vertikale. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Do tiu tuj estos iom pli komplika ol Kiu faris, sed 22 00:01:13,280 --> 00:01:18,310 kio estas similaj estas ke copy.c volas, denove, montrigxos tre utila. 23 00:01:18,310 --> 00:01:23,160 Memoru ke copy.c malfermas dosieron, Ĝisdatigas la kaplinion informoj por la 24 00:01:23,160 --> 00:01:28,250 outfile, poste legas en la scanline, bildero-per-bildero, skribante ĉiu rastrumero 25 00:01:28,250 --> 00:01:30,510 en la eliga dosiero scanline. 26 00:01:30,510 --> 00:01:37,040 >> Do denove, via unua paŝo povus probable estu al cp, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 en viajn PSET5 dosierujo. 28 00:01:40,560 --> 00:01:43,920 Memoru tamen, antaŭ ol vi kopias ĝin, por certiĝi, ke vi komprenas 29 00:01:43,920 --> 00:01:46,600 copy.c tre funde. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Do ni malfermi dosieron. 32 00:01:49,880 --> 00:01:50,870 Vi scias kiel fari tion. 33 00:01:50,870 --> 00:01:52,600 Mi tuj lasi tiun al vi. 34 00:01:52,600 --> 00:01:56,050 Venonta, ĝisdatigi la kaplinion informoj cxar la outfile. 35 00:01:56,050 --> 00:01:59,240 Ĉar ni havas novan bitmap, ni havos novan kaplinion informoj. 36 00:01:59,240 --> 00:02:00,970 Kio ŝanĝi ĉi tie? 37 00:02:00,970 --> 00:02:06,000 Nu, la grandeco de dosiero tuj ŝanĝos ĉar ni tuj havos pli 38 00:02:06,000 --> 00:02:07,900 rastrumeroj, ol antaŭe. 39 00:02:07,900 --> 00:02:11,060 La bildo grandeco, tiel, ankaŭ tuj ŝanĝos, kiel estas la 40 00:02:11,060 --> 00:02:13,050 larĝo kaj alto. 41 00:02:13,050 --> 00:02:17,180 >> Do kio variabloj estas tiuj, ekzakte? 42 00:02:17,180 --> 00:02:20,960 Nu, se vi rigardas en la kaplinio informojn, vi vidas tie estas 43 00:02:20,960 --> 00:02:25,640 biSizeImage, kiu reprezentas la tutan grandeco de la bildo en bajtoj, 44 00:02:25,640 --> 00:02:28,340 inkludante rastrumeroj kaj Plenigado. 45 00:02:28,340 --> 00:02:32,520 biWidth estas la larĝo de la bildo per rastrumeroj, minus la Plenigado. 46 00:02:32,520 --> 00:02:35,580 biHeight estas la alteco de la bildo en pikseloj. 47 00:02:35,580 --> 00:02:39,200 Kaj do tiuj estas enhavitaj en la structs BITMAPFILEHEADER kaj 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Vi povas diri kion oni trovas ke por tuj bmp.h kaj rigardante la 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struct kaj vidantaj kiuj variabloj estas listigitaj tie. 51 00:02:49,670 --> 00:02:54,700 >> Do por ĝisdatigi la outfiles kaplinio informojn, vi tuj volas 52 00:02:54,700 --> 00:02:57,025 ŝanĝi tiujn valorojn de la alteco kaj la larĝeco. 53 00:02:57,025 --> 00:03:00,570 Sed estas tre probable ke, vi eble bezonas iom de la infile la kaplinion informoj 54 00:03:00,570 --> 00:03:03,670 poste, tiom pli bone konservi trako de ambaŭ. 55 00:03:03,670 --> 00:03:07,770 Sed estu tre klara kun via variablo nomoj por ke vi ne faru hazarde 56 00:03:07,770 --> 00:03:12,490 skribu la malĝustajn valoroj en la kaplinio por la outfile. 57 00:03:12,490 --> 00:03:16,160 >> Do nun ni iru al la legado en la scanline bildero-per-bildero. 58 00:03:16,160 --> 00:03:20,210 Denove, ni tuj revenos al nia fidela dosiero / el biblioteko, kaj rigardi 59 00:03:20,210 --> 00:03:22,100 la fread funkcio. 60 00:03:22,100 --> 00:03:26,150 fread portas en montrilon al struct kiu enhavos la bajtoj ke 61 00:03:26,150 --> 00:03:30,130 vi legas en la grandeco de ĉiu elemento kiu vi legas - 62 00:03:30,130 --> 00:03:34,410 denove, sizeof tuj estos utila funkcii tie, la nombro de la 63 00:03:34,410 --> 00:03:38,820 elementoj de grandeco, grando, ke vi estas legante en, kaj tiam fine, la 64 00:03:38,820 --> 00:03:41,310 inpointer, la dosiero vi legas el. 65 00:03:41,310 --> 00:03:46,770 Do vi prenas numeron elementoj de grandeco de inpointer, kaj 66 00:03:46,770 --> 00:03:49,040 metante ilin en datumojn. 67 00:03:49,040 --> 00:03:51,695 >> Nun estas tempo por regrandigi horizontale. 68 00:03:51,695 --> 00:03:56,880 se n egalas 2, do por ĉiu rastrumero en la infile, ni verkos gxin 69 00:03:56,880 --> 00:04:00,870 dufoje en la outfile. 70 00:04:00,870 --> 00:04:02,210 Kiel oni skribas dosierojn? 71 00:04:02,210 --> 00:04:06,400 Nu, ni havas la fwrite funkcion, tiel Ni prenis la montrilon al la struct 72 00:04:06,400 --> 00:04:10,170 kiu enhavas la bajtoj ke vi estas skribo de, kaj poste ni pasis en 73 00:04:10,170 --> 00:04:14,430 grandeco, nombro, kaj la eliro, kie vi tuj skribos tion. 74 00:04:14,430 --> 00:04:19,200 Kaj tiam ripeti al procezo, estos povis simplan ripeta por buklo. 75 00:04:19,200 --> 00:04:21,740 >> Sed ni devas memori aldoni Plenigado in 76 00:04:21,740 --> 00:04:26,040 La koncepto de Plenigado estas ke, bone, ĉiu rastrumero estas tri pikoj, sed la 77 00:04:26,040 --> 00:04:28,940 grandeco de ĉiu scanline mosto estu oblo de 4 bitokoj. 78 00:04:28,940 --> 00:04:33,660 Do, se la nombro de rastrumeroj estas ne oblo de 4, ni devas aldoni iom 79 00:04:33,660 --> 00:04:36,630 Plenigado, kiu estas nur nuloj. 80 00:04:36,630 --> 00:04:42,130 Nun, kontraste Kiu faris, kaj kontraste kun Kopio, tiam infile bildo kaj la 81 00:04:42,130 --> 00:04:44,370 outfile dosieron esti malsamaj havas malsamaj Plenigado ĉar ili estas 82 00:04:44,370 --> 00:04:46,360 malsamaj larĝaj. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Do eble formulon volis veni en oportuna tie. 85 00:04:51,050 --> 00:04:55,120 Mi lasos ĝin al vi trovi ĝin, sed diru al vi ke, skribi Plenigado, 86 00:04:55,120 --> 00:04:59,360 bone, tio estas nur simpla fputc funkcion, pasante en la karaktero 87 00:04:59,360 --> 00:05:02,200 ke vi volas skribi, kaj poste la dosiera montrilo ke vi 88 00:05:02,200 --> 00:05:04,280 volas skribi al. 89 00:05:04,280 --> 00:05:08,670 Do nun, ke ni jam malpligrandigeblaj horizontale, kaj tiam uzis Plenigado, 90 00:05:08,670 --> 00:05:12,030 memoru, ke vi bezonas movi vian dosieron pozicio indikilo, ĉar vi 91 00:05:12,030 --> 00:05:14,480 ne povas fread en Plenigado. 92 00:05:14,480 --> 00:05:18,230 Do vi volas certigi ke via dosiero pozicio indikilo en la infile 93 00:05:18,230 --> 00:05:19,980 estas je la ĝusta momento. 94 00:05:19,980 --> 00:05:23,970 Ĉar ni ankaŭ volas regrandigi vertikale. 95 00:05:23,970 --> 00:05:27,090 Ni ne povas nur dorlotas lin horizontale, ĉar ĉiu vico bezonoj 96 00:05:27,090 --> 00:05:30,370 esti kopiitaj n fojojn. 97 00:05:30,370 --> 00:05:33,050 >> Nun, ekzistas pluraj malsamaj manieroj por fari tion. 98 00:05:33,050 --> 00:05:39,010 Do, ni povas uzi reverki metodo, en ke ni memoras ĉiujn rastrumeroj 99 00:05:39,010 --> 00:05:42,840 de donita vico en tabelo, kaj tiam ni skribi ke tabelo kiel 100 00:05:42,840 --> 00:05:44,730 multajn fojojn, kiel necesas. 101 00:05:44,730 --> 00:05:49,530 Aux tie estas la recopy metodon kie, post legi en unu vico en la infile 102 00:05:49,530 --> 00:05:53,530 kaj do skribas, ke en la outfile, aldono de la Plenigado, ni fseek 103 00:05:53,530 --> 00:05:57,250 Reen al la komenco de la originala vico, kaj tiam ripeti la horizontala 104 00:05:57,250 --> 00:05:58,710 regrandigi de tie. 105 00:05:58,710 --> 00:06:02,280 Sendepende de la metodo, kvankam, vi ĉu ĉiu rastrumero esti ripetita 106 00:06:02,280 --> 00:06:06,370 n fojoj, kaj cxiun vicon por esti ripetis n fojoj tiel. 107 00:06:06,370 --> 00:06:09,160 >> Kun tio, vi devos bitmap pli granda ol la vivon. 108 00:06:09,160 --> 00:06:11,760 Mia nomo estas Zamyla, kaj ĉi tiu estas CS50. 109 00:06:11,760 --> 00:06:19,542