[Seinm ceoil] ZAMYLA Chan: buille Let rudaí suas le Athraigh. I Athraigh, beidh an t-úsáideoir pas a fháil i, trí na n-orduithe, íomhá bitmap a ba mhaith leat iad a scála ag roinnt go bhfuil siad pas a fháil freisin i, i na n-orduithe. Conas is féidir linn é seo a? Bhuel, rudaí chéad chéad, a ligean ar briseadh seo síos i céimeanna. Tá tú ag dul a iarraidh a oscailt an infile go dtugann siad duit, chomh maith le a chruthú agus a oscailt an comhbhrí a tú ag dul a chur ar an íomhá resized isteach Ansin, mar atá tú méid a athrú, agus mar tá sé ina bitmap, sé header, mar sin tú ag dul a thabhairt cothrom le dáta freisin an header faisnéis don comhbhrí, agus scríobh go isteach Ansin, tá tú ag dul a léamh i an scanline an infile, picteilín-ar-picteilín, méid a athrú go cothrománach agus scríobh iad siúd pixel isteach ar comhbhrí, mar atá sonraithe ag scála an úsáideora. Tá tú ag dul a mheabhrú a cuir stuála réir mar is gá. Níos mó ar sin ina dhiaidh. Agus ansin, Athraigh freisin go hingearach. OK. Mar sin, tá sé seo ag dul a bheith beagán níos mó casta ná Cé Arna dhéanamh sé, ach cad cosúil é a bheidh an ní féidir dí, arís, a chruthú an-úsáideach. Cuimhnigh go osclaíonn ní féidir dí comhad, cothrom le dáta an t-eolas header don ar comhbhrí, léann ansin isteach an scanline, picteilín-ar-picteilín, scríobh gach picteilín isteach an comhad a aschur ar scanline. Mar sin, arís, d'fhéadfadh do chéad chéim dócha a chur chun cp, ní féidir dí, resize.c isteach i do eolaire PSET5. Cuimhnigh cé, sula chóipeáil tú é, a dhéanamh cinnte go dtuigeann tú ní féidir dí-maith. OK. Mar sin, a ligean ar a oscailt comhad. Tá a fhios agat conas a dhéanamh. Tá mé ag dul a fhágáil go duit. Next, an t-eolas header cothrom le dáta don comhbhrí. Toisc go bhfuil muid ag bitmap nua, ní mór dúinn eolas header nua. Cad atá ag athrú anseo? Bhuel, tá an méid comhaid ag dul a athrú toisc go bhfuil muid ag dul a bheith níos mó pixel ná riamh. Is é an méid íomhá, dá bhrí sin, freisin, ag dul a athrú, mar go bhfuil an leithead agus airde. Mar sin, a bhfuil na hathróga, go díreach? Bhuel, má fhéachann tú isteach an header faisnéise, a fheiceann tú go bhfuil biSizeImage, a léiríonn an t-iomlán méid an íomhá i bytes, lena n-áirítear picteilín agus stuála. Is biWidth an leithead an íomhá i picteilíni, lúide an stuáil. Is biHeight an airde an íomhá i pixel. Agus mar sin iad siúd le fáil i structs BITMAPFILEHEADER agus BITMAPINFOHEADER. Is féidir leat insint a bhfuil ceann amháin ag dul chun bmp.h agus ag féachaint ar an Struct BITMAPINFOHEADER agus go bhfaca atá liostaithe athróg ann. Mar sin, a thabhairt cothrom le dáta an header outfiles eolas, tá tú ag dul a iarraidh a athrú na luachanna ar an airde agus leithead. Ach tá seans, d'fhéadfadh gá duit roinnt faisnéis header an infile ar ina dhiaidh sin, mar sin is fearr súil a choinneáil ar an dá. Ach a bheith an-soiléir le do athraitheach ainmneacha ionas go mbeidh tú a dhéanamh nach thaisme scríobh na luachanna mícheart i an header an comhbhrí. Mar sin, anois a ligean ar a fháil ar léamh i an scanline picteilín-ar-picteilín. Arís, táimid ag dul chun dul go dtí ár trusty comhad leabharlann I / A, agus breathnú ar an fheidhm fread. Bíonn fread i pointeoir le struct Beidh go bhfuil an beart a atá á léamh agat i, an méid de gach eilimint go bhfuil tú ag léamh - arís, tá o, ag dul a bheith úsáideach feidhmiú anseo, uimhir an gnéithe den méid, méid, go bhfuil tú léamh i, agus ansin ar deireadh, an inpointer, an comhad a atá á léamh agat as. Mar sin, tá tú ag cur gnéithe líon méid ó inpointer, agus iad a chur isteach sonraí. Anois, tá sé in am a athrú go cothrománach. más ionann n 2, ansin do gach picteilín i an infile, táimid ag dul a scríobh sé faoi ​​dhó sa comhbhrí. Conas is féidir linn a comhaid a scríobh? Bhuel, ní mór dúinn an fheidhm fwrite, mar sin againn atá déanta ar an pointeoir leis an struct go bhfuil an beart a bhfuil tú scríbhinn ó, agus ansin pas againn i méid, líon, agus an t-aschur, i gcás ina tú ag dul a bheith ag scríobh go. Agus ansin a athdhéanamh próiseas a bheidh, a bheith in ann atriallach simplí do lúb. Ach ní mór dúinn a mheabhrú stuáil a chur isteach Is é an coincheap de stuáil sin, go maith, Tá gach picteilín trí bites, ach méid de gach ní mór scanline a bheith iolraí de 4 bytes. Mar sin, más rud é nach bhfuil an líon na n-pixel ar iolraí de 4, ní mór dúinn a chur ar roinnt stuáil, a bhfuil ach nialais. Anois, murab ionann agus Cé Arna dhéanamh sé, agus murab ionann agus cóip, ansin íomhá infile agus an ASCHOMHAD comhad ina scríobhfar tá bheith difriúil stuáil éagsúla toisc go bhfuil siad leithid éagsúla. OK. Mar sin, b'fhéidir go mbeadh foirmle teacht i handy anseo. Feicfidh mé é a fhágáil chun tú a aimsiú sé amach, ach insint duit go bhfuil, stuáil a scríobh, maith, tá sé ach feidhm fputc simplí, dul san carachtar gur mhaith leat a scríobh, agus ansin an pointeoir comhaid go bhfuil tú ag iarraidh a scríobh chuig. Mar sin anois go atá againn resized go cothrománach, agus ansin a úsáidtear stuáil, cuimhnigh gur gá duit a bhogadh do chomhad táscaire seasamh, toisc go bhfuil tú Ní féidir fread isteach stuáil. Mar sin, ba mhaith leat a dhéanamh cinnte go bhfuil do chomhad táscaire seasamh sa infile Is ag an bpointe ceart. Mar ba mhaith linn freisin chun Athraigh go hingearach. Ní féidir linn a stráice ach é go cothrománach, mar gheall ar gach do riachtanais a chéile a chóipeáil amanna n. Anois, tá roinnt éagsúla bealaí seo a dhéanamh. Mar sin, ceann amháin, is féidir linn a úsáid modh Athscríobh, i gur cuimhin linn gach ceann de na pixel ar a chéile tugtha in eagar, agus ansin scríobh againn go eagar mar mhéad uair mar is gá. Nó níl an modh recopy áit, tar éis a léamh i sraith amháin sa infile agus ansin scríobh go isteach an comhbhrí, a chur leis an stuáil, fseek againn ar ais go dtí tús an tsraith bunaidh, agus ansin arís ar an gcothromán méid a athrú ó ann. Beag beann ar an modh, áfach, beidh tú Ba mhaith gach picteilín a athdhéanamh n-uaire, agus gach as a chéile a bheith arís agus arís eile amanna n chomh maith. Leis sin, beidh tú ag bitmap níos mó ná saol. Is é mo ainm Zamyla, agus tá sé seo CS50.