>> [Speel van musiek]
>> ROB BOWDEN: Hi.
Ek is Rob en laat die grootte hierdie probleem.
So ons gaan begin met copy.c as 'n sjabloon, maar ons gaan wees
maak nogal 'n paar veranderinge.
>> Nou sien ons ons onmiddellik 'n verander waar ons nie meer te keur
vir ons rxc nie gelyk 3, maar nou Ons monitor rc nie gelyk 4.
Sedert ons wil ook in te sluit, in Benewens die lêer in en uit lêers
argumente, f wat gaan om dit te wees faktor waarmee ons te skaal.
>> So wanneer ons seker is van wat ons wil gebruik s scan f die string te omskep
argv1 na 'n float.
En ons gaan te stoor wat in faktor.
Hierdie addisionele karakter is om seker te dat ons nie eintlik aangaan
iets soos 1,4 ABC op die opdrag lyn.
>> Nou gaan ons 'n paar aliasse te skep sedert RV2 en RV3 is nie
baie nuttig name.
Ons is, in plaas daarvan, gaan roep hulle in die lêer en uit lêer.
Nou gaan ons om seker te maak dat ons faktor was eintlik geldig is.
So as faktor minder as of gelyk aan nul of groter as 100, en dan as per
die spec, moet ons verwerp dat faktor.
>> Wanneer ons seker is dat dit is goed, nou kan ons maak die n lêer, en ons het om te maak
seker te maak dat dit suksesvol oopgemaak.
As dit gedoen het nie, sal die terugkeer van nul.
Ons gaan die uit lêer oop te maak.
En weer, ons wil om te kyk om te maak seker dit is suksesvol oopgemaak.
En as dit nie suksesvol oop te maak, dan Ons moet ook seker te maak wees
die n lêer wat oorspronklik suksesvol oopgemaak het, of anders het ons 'n
geheue lek.
>> So nou gaan ons om te lees in die bitmap lêer kop en bitmap info
header van die n lêer.
Ons gaan om seker te maak dat die n lêer 'n geldige bitmap.
OK.
>> So nou het ons gaan begin maak 'n paar veranderinge.
So, want ons gaan word verander dinge, moet ons eers wil om te onthou die
ou breedte van die n lêer.
Ons wil die ou padding van om te onthou die n lêer met dieselfde berekening
van copy.c.
>> En nou gaan ons te verander die bitmap info kop.
En so is ons beide die breedte vermenigvuldig en die hoogte deur faktor sedert
dit is wat ons deur is skaal.
Ons gaan om te bepaal wat die nuwe padding van die lêer deur
die gebruik van die nuwe breedte.
En ons gaan die nuwe te bepaal grootte van die beeld met behulp van die aantal
grepe in 'n enkele ry wat gaan die aantal pixels in die ry
keer die grootte van 'n pixel plus die aantal grepe van padding aan die einde
van die ry, en vermenigvuldig alles wat deur die aantal rye wat ons het.
So wat is die aantal grepe Ons het in ons beeld data.
>> Bf.Bfsize nou gaan om die nommer te wees grepe ons beeld beta plus
die grootte van ons hoofde.
So plus grootte van bitmap lêer kop en grootte van bitmap info kop.
OK.
So dit is dit vir ons hoofde.
Ons kan die lêer kop skryf en info kop aan ons uit
dien, en ons is goed.
>> Nou is dit tyd om werklik te begin skryf die pixel
data na die lêer uit.
Ons gaan 'n buffer grootte te verklaar ou breedte RGB verdriedubbel, en ons is
gaan 'n veranderlike genoem te verklaar ry lam, wat ons gaan
aanvanklik gelyk aan negatiewe 1.
Ons sal sien dat ons gaan word met behulp dat ten einde tred te hou van wat
ry ons tans gelaai in hierdie buffer.
OK.
>> So nou in teenstelling met die standaard uitgawe, in plaas van iterating oor aan die in
lêer, gaan ons Itereer oor elke ry in die buite-lêer en uit te vind
wat ry in die lêer in wat ons wil plaas in die ry in die buite-lêer.
So iterating oor al die rye in die buite lêer met die nuwe hoogte, ons is die eerste
gaan die ry in die ou te bepaal dien ons gaan gebruik, wat ons
gaan doen deur die neem van die huidige ry, gedeel deur faktor.
So wat gaan ons te gee die ry in die ou lêer wat ons wil hê.
>> So nou as ry afgestomp is nie gelyk aan die ou y, ons gaan die ry om te lees
wat ons wil in ons huidige ry buffer.
So hoe gaan ons dit doen?
Eerste, ons gaan om uit te vind die posisie wat begin die ry in die
oorspronklike lêer.
So daardie posisie gaan wees verlede almal van ons kop-en
nou verby 'n ou y rye.
>> En so hoeveel bytes is in 'n enkele ry?
Weereens, die grootte van RGB trippel keer ou breedte plus ou padding, so dit is die
aantal grepe in 'n enkele ry.
En ons wil afgelope ou y rye te slaan.
So ons gaan f soek en ons is gebruik soek stel om te begin van die
begin van 'n lêer.
Ons gaan om te f probeer om hierdie posisie in die lêer, om ons by die
die begin van die ry ons wil om te lees in ons buffer.
>> Ons gaan ry te stel lam gelyk aan ou y.
So nou as ons lus rug en ons wil gebruik dieselfde ry in ons uit lêer,
dan is ons nie van plan om te lees dit weer onnodig.
So regtig, ry afgestomp is net 'n optimalisering.
>> Ten slotte, ons gaan om te lees in die huidige ry die ou breedte RGB verdriedubbel
wat ons wil van die oorspronklike lêer.
So nou huidig ​​ry bevat die pixels van die oorspronklike lêer wat ons wil
skryf in die buite-lêer.
So nou, hou net bokant, in plaas van iterating oor die ou lêer, moet ons
om dit te Itereer oor die nuwe lêers rye.
Wel, hier, in plaas van iterating oor al van die ou pixels wat in huidige ry,
ons wil Itereer oor al die pixels in ons nuwe lêer in hierdie
spesifieke ry.
>> Waarom wil ons dit te doen?
Omdat ons hier te sien dat ons nie eintlik noodwendig met al die
pixels in die oorspronklike lêer.
Want as ons krimp, ons kan werklik die pixels te slaan.
En ons sien dat dit -
x gedeel deur faktor -
goed weerspieël hier waar ons sê y gedeel deur faktor om uit te vind wat
die ou y-de ry ooreenstem met die y-de ry in hierdie nuwe lêer.
>> Nou gaan ons almal om te skryf hierdie pixels van die ou ry
in ons nuwe ry.
Sodra ons dit gedoen het, moet ons net sit die padding aan die einde van ons ry
En ons sal loop terug en gaan voort om al die rye in ons nuwe lêer.
Aan die einde, moet ons ons ou te sluit dien, sluit ons nuwe lêer, en terugkeer
nul, want alles gaan goed.
>> My naam is Rob en dit was reses.
>> [Speel van musiek]