>> [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.