[MUZIKO Ludanta] ZAMYLA CHAN: Ni baton aferojn kun ŝanĝi grandecon. En ŝanĝi grandecon, la uzanto pasos en, tra la komandlinio, a bitmap image ke Ili volas, ke vi grimpi per nombro ke ili ankaŭ iam en, en la komandlinio. Kiel ni faru tion? Nu, unue aferoj unue, ni rompi ĉi malsupren en paŝoj. Vi tuj volas malfermi la infile ke oni donu al vi, tiel kiel krei kaj malfermu la outfile ke vi tuj metis la malpligrandigeblaj bildo in Poste, ĉar vi regrandigi kaj ĉar ĝi estas bitbildo, ĝin kaplinio, tiel vi tuj ankaŭ ĝisdatigi la kaplinio informoj por la outfile, kaj skribi ke in Tiam, vi legos en la scanline de la infile, bildero-per-bildero, regrandigi horizontale kaj skribi tiujn rastrumeroj en la outfile, kiel specifis per la uzanto skalo. Vi tuj memoras al aldoni Plenigado kiel necese. Pli pri tio poste. Kaj tiam, ankaux regrandigi vertikale. OK. Do tiu tuj estos iom pli komplika ol Kiu faris, sed kio estas similaj estas ke copy.c volas, denove, montrigxos tre utila. Memoru ke copy.c malfermas dosieron, Ĝisdatigas la kaplinion informoj por la outfile, poste legas en la scanline, bildero-per-bildero, skribante ĉiu rastrumero en la eliga dosiero scanline. Do denove, via unua paŝo povus probable estu al cp, copy.c, resize.c en viajn PSET5 dosierujo. Memoru tamen, antaŭ ol vi kopias ĝin, por certiĝi, ke vi komprenas copy.c tre funde. OK. Do ni malfermi dosieron. Vi scias kiel fari tion. Mi tuj lasi tiun al vi. Venonta, ĝisdatigi la kaplinion informoj cxar la outfile. Ĉar ni havas novan bitmap, ni havos novan kaplinion informoj. Kio ŝanĝi ĉi tie? Nu, la grandeco de dosiero tuj ŝanĝos ĉar ni tuj havos pli rastrumeroj, ol antaŭe. La bildo grandeco, tiel, ankaŭ tuj ŝanĝos, kiel estas la larĝo kaj alto. Do kio variabloj estas tiuj, ekzakte? Nu, se vi rigardas en la kaplinio informojn, vi vidas tie estas biSizeImage, kiu reprezentas la tutan grandeco de la bildo en bajtoj, inkludante rastrumeroj kaj Plenigado. biWidth estas la larĝo de la bildo per rastrumeroj, minus la Plenigado. biHeight estas la alteco de la bildo en pikseloj. Kaj do tiuj estas enhavitaj en la structs BITMAPFILEHEADER kaj BITMAPINFOHEADER. Vi povas diri kion oni trovas ke por tuj bmp.h kaj rigardante la BITMAPINFOHEADER struct kaj vidantaj kiuj variabloj estas listigitaj tie. Do por ĝisdatigi la outfiles kaplinio informojn, vi tuj volas ŝanĝi tiujn valorojn de la alteco kaj la larĝeco. Sed estas tre probable ke, vi eble bezonas iom de la infile la kaplinion informoj poste, tiom pli bone konservi trako de ambaŭ. Sed estu tre klara kun via variablo nomoj por ke vi ne faru hazarde skribu la malĝustajn valoroj en la kaplinio por la outfile. Do nun ni iru al la legado en la scanline bildero-per-bildero. Denove, ni tuj revenos al nia fidela dosiero / el biblioteko, kaj rigardi la fread funkcio. fread portas en montrilon al struct kiu enhavos la bajtoj ke vi legas en la grandeco de ĉiu elemento kiu vi legas - denove, sizeof tuj estos utila funkcii tie, la nombro de la elementoj de grandeco, grando, ke vi estas legante en, kaj tiam fine, la inpointer, la dosiero vi legas el. Do vi prenas numeron elementoj de grandeco de inpointer, kaj metante ilin en datumojn. Nun estas tempo por regrandigi horizontale. se n egalas 2, do por ĉiu rastrumero en la infile, ni verkos gxin dufoje en la outfile. Kiel oni skribas dosierojn? Nu, ni havas la fwrite funkcion, tiel Ni prenis la montrilon al la struct kiu enhavas la bajtoj ke vi estas skribo de, kaj poste ni pasis en grandeco, nombro, kaj la eliro, kie vi tuj skribos tion. Kaj tiam ripeti al procezo, estos povis simplan ripeta por buklo. Sed ni devas memori aldoni Plenigado in La koncepto de Plenigado estas ke, bone, ĉiu rastrumero estas tri pikoj, sed la grandeco de ĉiu scanline mosto estu oblo de 4 bitokoj. Do, se la nombro de rastrumeroj estas ne oblo de 4, ni devas aldoni iom Plenigado, kiu estas nur nuloj. Nun, kontraste Kiu faris, kaj kontraste kun Kopio, tiam infile bildo kaj la outfile dosieron esti malsamaj havas malsamaj Plenigado ĉar ili estas malsamaj larĝaj. OK. Do eble formulon volis veni en oportuna tie. Mi lasos ĝin al vi trovi ĝin, sed diru al vi ke, skribi Plenigado, bone, tio estas nur simpla fputc funkcion, pasante en la karaktero ke vi volas skribi, kaj poste la dosiera montrilo ke vi volas skribi al. Do nun, ke ni jam malpligrandigeblaj horizontale, kaj tiam uzis Plenigado, memoru, ke vi bezonas movi vian dosieron pozicio indikilo, ĉar vi ne povas fread en Plenigado. Do vi volas certigi ke via dosiero pozicio indikilo en la infile estas je la ĝusta momento. Ĉar ni ankaŭ volas regrandigi vertikale. Ni ne povas nur dorlotas lin horizontale, ĉar ĉiu vico bezonoj esti kopiitaj n fojojn. Nun, ekzistas pluraj malsamaj manieroj por fari tion. Do, ni povas uzi reverki metodo, en ke ni memoras ĉiujn rastrumeroj de donita vico en tabelo, kaj tiam ni skribi ke tabelo kiel multajn fojojn, kiel necesas. Aux tie estas la recopy metodon kie, post legi en unu vico en la infile kaj do skribas, ke en la outfile, aldono de la Plenigado, ni fseek Reen al la komenco de la originala vico, kaj tiam ripeti la horizontala regrandigi de tie. Sendepende de la metodo, kvankam, vi ĉu ĉiu rastrumero esti ripetita n fojoj, kaj cxiun vicon por esti ripetis n fojoj tiel. Kun tio, vi devos bitmap pli granda ol la vivon. Mia nomo estas Zamyla, kaj ĉi tiu estas CS50.