>> [MUSIC ప్లే]
>> ZAMYLA చాన్: ఇది మిస్ స్కార్లెట్ ఉంది దీపస్తంభమును తో.
హూడన్ఇట్?
Well, మేము కనుగొనేందుకు చూడాలని.
బోర్డ్ గేమ్ క్లూ, మీరు వాటిని భౌతిక ఎరుపు చిత్రం ఇవ్వాలి.
మరియు ఆ చిత్రం చాలా ఎరుపు మరియు ఉంది స్పాటీ, మరియు మీ ఉద్యోగం ఉంది
దాగి సందేశాన్ని బహిర్గతం.
మరియు సాధారణంగా మీరు ఒక Red తో అందించిన చేస్తున్నారు భూతద్దం లేదా ఒక ఎరుపు స్క్రీన్
దాచిన సందేశాన్ని బహిర్గతం.
బాగా, మేము ఆ అనుకరించేందుకు వెళుతున్న.
>> హూడన్ఇట్ లో, మీరు ఒక బిట్మ్యాప్ చిత్రం ఇచ్చిన చేస్తున్నారు ఆ, చాలా స్పాటీ మరియు ఎరుపు కనిపిస్తోంది
ఆపై హూడన్ఇట్ అమలు ఒక రహస్య సందేశాన్ని బహిర్గతం.
>> కాబట్టి యొక్క దశలను ఈ బ్రేక్ వీలు.
మొదట, మీరు ఫైల్ను తెరవడం మీరు - మీరు ఇచ్చిన చేసిన క్లూ.
మరియు తర్వాత కూడా ఒక సృష్టించడానికి తీర్పు బిట్మ్యాప్ ఫైలు.
అప్పుడు మీరు బిట్మ్యాప్ నవీకరించాలనుకున్న తీర్పు outfile కోసం సమాచారం శీర్షిక.
తరువాత ఆ మరింత.
ఆపై మీరు లోకి చదవండి చూడాలని క్లూ scanline, పిక్సెల్ ద్వారా పిక్సెల్,
వంటి పిక్సెల్ రంగులు మార్చడం అవసరం, మరియు రచన
తీర్పు లోకి ఆ -
పిక్సెల్ ద్వారా పిక్సెల్ తీర్పు scanline.
>> ఎలా మేము ఈ వెళ్ళినప్పుడు ప్రారంభం చెయ్యాలి?
బాగా, అదృష్టవశాత్తూ, మేము copy.c కలిగి పంపిణీ కోడ్.
మరియు ఈ నిరూపించడానికి అన్నారు మాకు చాలా ఉపయోగకరంగా.
Copy.c, ఒక ఫైల్ తెరుచుకుంటుంది లో చదువుతుంది అప్పుడు infile యొక్క శీర్షిక, మరియు నవీకరణలను
outfile యొక్క శీర్షిక.
అది లో ప్రతి పిక్సెల్ చదువుతుంది అప్పుడు scanline, పిక్సెల్ ద్వారా పిక్సెల్, మరియు
outfile ఆ పిక్సెల్ రాశారు.
>> కాబట్టి, మీ మొదటి అడుగు వాటిని క్రింది అమలు
టెర్మినల్ లో కమాండ్ -
cp copy.c whodunit.c.
ఈ కాపీని సృష్టిస్తుంది copy.c whodunit.c అనే.
కాబట్టి తెరవడానికి మా మొదటి అడుగు ఫైలు, బాగా, ఒక ఖచ్చితమైన ఉంది
copy.c. ఆ ప్రతిరూపం
నేను చూడండి మీరు చెప్పను.
>> మేము ఈ pset లో తో ఉంది వ్యవహరించే ఏమి ఫైలు I / O, ప్రధానంగా ఫైళ్లు తీసుకొని,
, పఠనం, రాయడం, సవరణ.
ఎలా మీరు మొదటి ఒక ఫైల్ను తెరవడం చెయ్యాలి?
సరే, మీరు ఒక ఫైల్ ప్రకటించాలని వెళుతున్న పాయింటర్, మరియు తర్వాత మీరు కాల్
ఫంక్షన్ fopen.
మార్గం, లేదా ఆ పేరిట పాస్ ఫైల్, ఆపై మీకు కావలసిన మోడ్
సైన్ ఫైలు తెరవడానికి
ఒక r నేమి తెరవబడుతుంది పఠనం కోసం foo.bmp.
అయితే ఒక w లో ఉత్తీర్ణత fopen రెడీ ఓపెన్ bar.bmp, ఫైల్ వ్రాయడం కోసం మరియు
దీన్ని సంకలనం.
>> కాబట్టి ఇప్పుడు మేము మోపడం చేసిన మా తదుపరి దశలో శీర్షిక సమాచారం అప్డేట్ ఉంది
outfile కోసం.
ఒక శీర్షిక ఏమిటి?
ముందుగల మేము తెలుసుకోవాలి ఏమి ఒక బిట్మ్యాప్ను.
ఒక బిట్మ్యాప్ కేవలం ఉంది బైట్లు అమరిక.
మరియు వారు ఈ ఫైలు లో ప్రకటించింది చేస్తున్నారు కొంత ఇక్కడ, bmp.h,
ఏమి ఒక బిట్మ్యాప్ సమాచారం నిజానికి తయారు చేస్తారు.
కానీ మాకు శ్రద్ధ ఉంది బిట్మ్యాప్ ఫైలు శీర్షిక, ఇక్కడే, మరియు
ఇక్కడ పైగా బిట్మ్యాప్ సమాచారం శీర్షిక,.
శీర్షిక ఒక జంట యొక్క కూర్చిన చాలా ఉపయోగకరంగా రుజువు చేసే వేరియబుల్స్.
ఇది biSizeImage, ఉంది బైట్లు లో చిత్రం యొక్క మొత్తం పరిమాణం.
మరియు ఈ పిక్సెళ్ళు మరియు పాడింగ్ కలిగి.
పాడింగ్ చాలా ముఖ్యం, కానీ మేము తరువాత ఆ చూస్తారు.
>> BiWidth యొక్క వెడల్పు సూచిస్తుంది పిక్సెళ్ళు మైనస్ పాడింగ్ లో చిత్రం.
BiHeight కూడా అప్పుడు ఎత్తు పిక్సెళ్ళు లో చిత్రం యొక్క.
ఆపై BITMAPFILEHEADER మరియు నేను పేర్కొన్న BITMAPINFOHEADER,
ముందు, ఆ సూచించబడతాయి structs వంటి.
కాబట్టి, మీరు ఫైల్ శీర్షిక యాక్సెస్ చేయలేరు కూడా, కానీ మీరు ను చెయ్యవచ్చును
లోపల ఆ వేరియబుల్స్.
>> OK.
కాబట్టి మేము ఎలా శీర్షిక అప్డేట్ చెయ్యాలి?
ముందుగల మేము చూడటానికి మేము అని నుండి ఏ సమాచారం మార్చడానికి అవసరం
కు infile, అవగాహనా, outfile, తీర్పు.
ఏదైనా ఈ విషయంలో మారుతున్న?
Well, వాస్తవానికి, మేము వెళుతున్న ఎందుకంటే కేవలం రంగులు మారుతున్న.
మేము ఫైలు మార్పులు అన్నారు లేదు పరిమాణం, చిత్రం పరిమాణం, వెడల్పు,
లేదా ఎత్తు.
కాబట్టి మీరు ఇప్పుడు కోసం అన్ని ఉన్నాము కేవలం ప్రతి పిక్సెల్ కాపీ.
>> OK.
కాబట్టి ఇప్పుడు యొక్క ఎలా మేము నిజంగా చూద్దాం ఫైలు నుండి ప్రతి పిక్సెల్ చదువుకోవచ్చు.
మరో ఫైలు I / O ఫంక్షన్ తెరపైకి వస్తాయి -
fread.
ఇది struct ఒక పాయింటర్ లో పడుతుంది ఆ బైట్లు కలిగిన
మీరు చదువుతున్న.
కాబట్టి మీరు ఆ లోకి చదువుతున్న.
ఆపై మీరు ఇది, ఒక పరిమాణం పాస్ ప్రతి మూలకం యొక్క పరిమాణం మీరు
చదవాలనుకుంటున్న.
ఇక్కడ, ఫంక్షన్ sizeof ఉపయోగపడుట ఉంటుంది.
అప్పుడు మీరు, అనేక పాస్ ఇది అంశాల సంఖ్య సూచిస్తుంది
చదవడానికి పరిమాణం.
మరియు తర్వాత చివరకు, inptr, ఇది మీరు ఫైల్ పాయింటర్
నుండి చదవగల.
కాబట్టి ఆ అంశాల అన్ని దానిలోపల inptr మరియు వారు డేటా చూడాలని.
>> యొక్క ఒక చిన్న ఉదాహరణ చూద్దాం.
నేను డేటా రెండు కుక్కలు లోకి చదవాలనుకుంటున్న ఉంటే, బాగా, నేను రెండు మార్గాల్లో ఒక చేయవచ్చు.
నేను గాని పరిమాణం రెండు వస్తువులు లో చదువుకోవచ్చు నా inptr నుండి కుక్క, లేదా నేను చదువుకోవచ్చు
ఒక రెండు కుక్కలు యొక్క పరిమాణం అభ్యంతరం.
కాబట్టి మీరు చూసే విధంగా బట్టి మీరు, మీరు పరిమాణం మరియు సంఖ్య ఏర్పాట్లు
బైట్లు అదే నెంబర్ లో చదువుకోవచ్చు.
>> కాబట్టి ఇప్పుడు, యొక్క మార్చడానికి వీలు మేము అవసరం పిక్సెల్ రంగు.
మీరు మళ్ళీ bmp.h చూడండి, అప్పుడు మీరు క్రింద చూస్తారు
RGBTRIPLEs, మరొక struct ఎక్కడ వారు మూడు బైట్లు కలిగి ఉంటాయి.
ఒక, rgbtBlue, rgbtGreen మరియు rgbtRed.
కాబట్టి ఈ ప్రతి మొత్తం సూచిస్తుంది నీలం, ఆకుపచ్చ మొత్తం, మరియు
ఈ పిక్సెల్ లోపల ఎరుపు, మొత్తం పేరు ప్రతి మొత్తం ఒక సూచించబడుతుంది
హెక్సాడెసిమల్ సంఖ్య.
>> కాబట్టి ff0000 ఒక నీలం రంగు ఉంటుంది, అది నీలం నుండి వెళుతుంది, ఎందుకంటే
ఎరుపు, ఆకుపచ్చ.
ఆపై అన్ని f యొక్క తెలుపు ఉంటుంది.
యొక్క smiley.bmp పరిశీలించి, తీసుకుందాం ఇది మీరు మీ పంపిణీ కోడ్ కలిగి.
మీరు ఒక చిత్రం లో తెరిస్తే వీక్షకుడే మీరు చేస్తాము
కేవలం ఒక ఎరుపు స్మైలీ చూడండి.
కానీ మేము చేస్తాము, ఒక లోతైన డైవ్ తీసుకొని చూసే నిర్మాణం
అది కేవలం పిక్సెల్స్.
మేము వైట్ పిక్సెళ్ళు కలిగి, ఆపై Red పిక్సెళ్ళు.
అన్ని ఆపై, తెలుపు ffffff, మరియు నేను మీరు కోసం రంగు చేసిన Red పిక్సెళ్ళు
ఇక్కడ, మరియు వారు 0000ff అని చూడండి.
జీరో నీలం, సున్నా ఆకుపచ్చ, మరియు పూర్తి ఎరుపు.
మరియు స్మైలీ ఎనిమిది పిక్సెల్స్ వెడల్పు ఎందుకంటే, మేము ఏ పాడింగ్ లేదు.
అన్ని కుడి.
>> నేను వివిధ విలువలు కేటాయించి కాబట్టి ఉంటే ఒక RGBTRIPLE మరియు భాగ్యలక్ష్మీ
ఇది ఆకుపచ్చ చేయడానికి, అప్పుడు నా చేస్తుంది ఉంది నేను అనే ఒక RGBTRIPLE, డిక్లేర్
ట్రిపుల్, ఆపై ప్రతి యాక్సెస్ ఆ struct నేను లోపల బైట్
డాట్ ఆపరేటర్లు ఉపయోగించే.
కాబట్టి triple.rgbtBlue, నేను 0 ఆ కేటాయించి.
గ్రీన్ నేను పూర్తి దానిని కేటాయించవచ్చు - ఏ సంఖ్య, నిజంగా, 0 మరియు ff మధ్య.
మరియు ఎరుపు, నేను కూడా 0 చెప్పడానికి వెళుతున్నాను.
కాబట్టి ఆ నాకు ఒక ఆకుపచ్చ పిక్సెల్ ఇస్తుంది.
>> తదుపరి, నేను తనిఖీ ఏమి ఉంటే ఏదో విలువ?
నేను వెతుకుతుంది ఏదైనా కలిగి కాలేదు ట్రిపుల్ యొక్క rgbtBlue విలువ అనే
ff ఆపై ముద్రణ, "నేను ఫీలింగ్ నీలం! ", ఫలితంగా.
ఇప్పుడు, ఆ అవసరం కాదు పిక్సెల్ కుడి, నీలం?
పిక్సెల్ యొక్క ఆకుపచ్చ మరియు ఎరుపు విలువలు ఎందుకంటే కూడా కాని 0 విలువలు కలిగి.
అంటే అన్ని, మరియు అన్ని ఈ తనిఖీ ఉంది
ఒక పూర్తి నీలం రంగు కోసం.
కానీ అన్ని పిక్సెళ్ళు కూడా పాక్షిక కలిగి ఈ వంటి రంగు విలువలు,
ఇక్కడ తదుపరి ఉదాహరణకు.
>> ఇది ఒక చిన్న కష్టం చూడటానికి ఉంది ఈ చిత్రం ఇప్పుడు.
ఈ కొద్దిగా ఎక్కువ కనిపిస్తోంది మీరు ఇవ్వబడుతుంది మేము ఆ clue.bmp.
ఇప్పుడు, భౌతికంగా, మీరు ఈ పరిష్కరించడానికి ఉండవచ్చు, ద్వారా, ఎరుపు చాలా ఉంది ఎందుకంటే
చిత్రం ఒక ఎరుపు స్క్రీన్ అప్ పట్టుకొని కాబట్టి ఇతర రంగులు కనిపిస్తాయి.
కాబట్టి మేము ఎలా సి ఈ అనుకరిస్తూ?
Well, మేము అన్ని ఎరుపు తొలగించడానికి ఉండవచ్చు చిత్రం పూర్తిగా.
కాబట్టి మేము ప్రతి సెట్ భావిస్తున్న అలా 0 పిక్సెల్ యొక్క ఎరుపు విలువ.
కాబట్టి చిత్రం కొద్దిగా చూస్తారు మేము ఏ ఎరుపు ఉంటుంది ఈ వంటి బిట్
లేనే.
>> రహస్య సందేశాన్ని ఒక చూడగలరు కొద్దిగా ఎక్కువ స్పష్టంగా ఇప్పుడు.
ఇది మరొక స్మైలీ ముఖం ఉంది.
మనం మరొక పద్ధతి ఉపయోగించవచ్చు.
బహుశా, మేము గుర్తించడానికి ఎరుపు పిక్సెళ్ళు అన్ని -
ఆ, పిక్సెళ్ళు అన్ని తో ఉంది 0 నీలం, 0 ఆకుపచ్చ, మరియు 0 ఎరుపు -
మరియు తెలుపు ఆ మార్చడానికి.
మరియు మా చిత్రాన్ని చూడండి ఉండవచ్చు ఈ వంటి ఏదో.
చూడటానికి కొద్దిగా సులభం.
>> వెలికితీసే ఇతర మార్గాలు ఉన్నాయి రహస్య సందేశాన్ని అలాగే,
రంగు తారుమారు వ్యవహరించే.
బహుశా మీరు పద్ధతులు ఒకటి ఉపయోగించుకునే నేను పైన పేర్కొన్న ఆ.
మరియు అదనంగా, మీరు అనుకోవచ్చు కొన్ని రంగులు విస్తరించేందుకు
మరియు ఆ ఆవిష్కరించాయి.
>> కాబట్టి ఇప్పుడు మేము పిక్సెల్ మార్పుచేసేరని రంగు, తదుపరి మేము వాటిని రాయడానికి అవసరం
పిక్సెల్ ద్వారా scanline లో, పిక్సెల్.
మళ్ళీ, మీరు తిరిగి చూడండి చెయ్యవచ్చును మీరు కాపీ ఉండకపోతే, copy.c కు
ఇది ఇప్పటికే, మరియు fwrite చూడండి డేటా పడుతుంది కార్యక్రమం, ఒక పాయింటర్
బైట్లు కలిగి struct కు మీరు పరిమాణం, చదవడం చేస్తున్న
అంశాలను, అంశాల సంఖ్య, ఆపై outptr -
ఆ ఫైళ్ళను గమ్యం.
>> మీరు పిక్సెళ్ళు లో రాసిన తరువాత, మీరు కూడా పాడింగ్ లో రాయడానికి ఉన్నాయి.
పాడింగ్ ఏమిటి?
బాగా, ప్రతి rgbt పిక్సెల్ మూడు బైట్ల పొడవు ఉంటుంది.
కానీ, ఒక బిట్మ్యాప్ చిత్రం కోసం scanline నాలుగు బైట్లు ఒక బహుళ ఉండాలి.
మరియు పిక్సెళ్ళు సంఖ్య లేకపోతే ఒక నాలుగు బహుళ, అప్పుడు మేము జోడించాలి
ఈ పాడింగ్.
పాడింగ్ 0 సె ప్రాతినిధ్యం వహిస్తుంది.
కాబట్టి, ఎలా మేము వ్రాయండి, లేదా ఈ చదివే?
బాగా, అది అవుతుంది మీరు కాదు అని నిజానికి fread పాడింగ్, కానీ మీరు
ఇది లెక్కించేందుకు.
>> ఈ సందర్భంలో, క్లూ మరియు తీర్పు అదే వెడల్పు కలిగి ఉంటాయి, కాబట్టి
పాడింగ్ అదే ఉంది.
మరియు పాడింగ్, మీరు చూస్తారు వంటి copy.c లో, లెక్కిస్తారు
క్రింద ఫార్ములా -
bi.biWidth సార్లు sizeof (RGBTRIPLE) రెడీ ఎన్ని బైట్లు bmp మాకు ఇవ్వాలని
ప్రతి వరుసగా ఉంది.
అక్కడ నుండి, modulos మరియు వ్యవకలనాల 4 లెక్కించవచ్చు తో ఎలా
అనేక బైట్లు జోడించవచ్చు ఏజెన్సీలోని న బైట్లు బహుళ
ప్రతి వరుస నాలుగు ఉంది.
>> ఇప్పుడు మేము కోసం ఫార్ములా కలిగి మేము ఎంత padding, ఇప్పుడు
మేము అది రాయడం.
ఇప్పుడు, నేను ముందు చెప్పినట్లుగా, పాడింగ్ 0 సె ఉంది.
కాబట్టి ఆ సందర్భంలో, మేము చూస్తూ ఈ సందర్భంలో ఒక 0 చార్, మా
outptr - మా outfile.
అందువలన fputc ఉంటుంది 0, కామా outptr.
>> కాబట్టి, మేము లోకి చదువుతున్నాను అయితే మా ఫైలు, ఫైలు I / O యొక్క ట్రాక్ ఉంచింది మా
ఏదో ఆ ఫైళ్ళను లో స్థానం ఫైలు స్థానం సూచిక అని.
ఒక కర్సర్ గా భావిస్తారు.
సాధారణంగా, ఇది ప్రతి సమయం అభివృద్ధి మేము fread, కానీ మేము కలిగి
చాలా, దాని పై నియంత్రణ.
>> ఫైలు స్థానం సూచిక తరలించడానికి, మీరు ఫంక్షన్ fseek ఉపయోగించవచ్చు.
Inptr ఫైలు సూచిస్తుంది పేరు మీరు కోరుతూ చేస్తున్న పాయింటర్,
మొత్తం బైట్లు సంఖ్య అని మీరు నుండి అప్పుడు కర్సర్ తరలించడానికి మరియు కావలసిన
సూచనగా సంబంధించినది మీ కర్సర్ ఎక్కడ నుండి.
మీరు SEEK_CUR లో పాస్, అని ప్రస్తుత సూచిస్తుంది
ఫైలు లో స్థానం.
లేదా మీరు కొన్ని ఇతర పారామితులు ఉపయోగించవచ్చు.
కాబట్టి, మేము దాటవేయడానికి fseek ఉపయోగించడానికి ఉంటుంది లో ఫైలు యొక్క padding పైగా.
మీకు కష్టం మీరు మళ్ళీ, ఉంది copy.c. లో ఆ ఒక ఉదాహరణ
>> కాబట్టి ఇప్పుడు మేము ఫైల్ తెరిచిన, క్లూ మరియు తీర్పును.
మేము కోసం శీర్షిక నవీకరించబడింది చేసిన మా తీర్పు, ఎందుకంటే ప్రతి
బిట్మ్యాప్ ఒక శీర్షిక అవసరం.
మేము అప్పుడు క్లూ యొక్క లోకి చదివారు scanline, పిక్సెల్ ద్వారా పిక్సెల్, మారుతున్న
ప్రతి రంగు అవసరం, మరియు లోకి ఆ రచన
తీర్పు, పిక్సెల్ ద్వారా పిక్సెల్.
మీరు తీర్పు తెరవడానికి, మీరు చూడగలరు ఎవరు అపరాధి, లేదా ఏ రహస్య
సందేశం.
నా పేరు Zamyla, మరియు ఈ హూడన్ఇట్ ఉంది.