>> [સંગીત વગાડવાનો]
>> ZAMYLA ચાન: તે મિસ સ્કારલેટ હતી કૅન્ડલસ્ટિક સાથે.
ગૂઢ રહસ્યની અથવા ડિટેક્ટિવ વાર્તા કે નાટક?
ઠીક છે, અમે શોધી રહ્યા છીએ.
બોર્ડ રમત સંકેત, તમે કદાચ ભૌતિક લાલ છબી આપવામાં.
અને તે ખૂબ જ લાલ અને છબી છે સ્પોટી, અને તમારી નોકરી છે
ગુપ્ત સંદેશો પ્રદર્શિત કરે છે.
અને સામાન્ય રીતે તમે એક લાલ સાથે પૂરી પાડવામાં આવેલ કરી રહ્યાં છો બૃહદદર્શક કાચ, અથવા એક લાલ સ્ક્રીન
કે છુપાયેલા સંદેશ પ્રદર્શિત કરે છે.
ઠીક છે, અમે તે નકલ રહ્યા છીએ.
>> ગૂઢ રહસ્યની અથવા ડિટેક્ટિવ વાર્તા કે નાટક, તમે એક બીટમેપ છબી આપવામાં રહ્યા છો કે, ખૂબ જ સ્પોટી અને લાલ દેખાય છે
અને પછી ગૂઢ રહસ્યની અથવા ડિટેક્ટિવ વાર્તા કે નાટક કાર્યક્રમ ચલાવો એક છુપાયેલા સંદેશ પ્રદર્શિત કરે છે.
>> તેથી આપણે પગલાં આ ભંગ કરીએ.
પ્રથમ, તમે ફાઈલ ખોલવા માંગો છો - તમે આપવામાં આવી છે કે ચાવી.
અને પછી પણ બનાવવો ચુકાદો બીટમેપ ફાઇલ.
પછી તમે બીટમેપ અપડેટ કરવા માંગો છો ચુકાદો outfile માટે માહિતી હેડર.
પાછળથી તે પર વધુ.
અને પછી તમે વંચાય રહ્યા છીએ ચાવી, scanline, પિક્સેલ દ્વારા પિક્સેલ,
તરીકે પિક્સેલ રંગ બદલીને જરૂરી છે, અને લેખન
ચુકાદો માં તે -
આ માં પિક્સેલ દ્વારા પિક્સેલ ચુકાદો scanline.
>> આપણે કઈ રીતે આ વિશે જવાનું શરૂ કરી શકું?
વેલ, સદભાગ્યે, અમે copy.c છે વિતરણ કોડ.
અને આ સાબિત રહ્યું છે અમારા માટે ખૂબ ઉપયોગી છે.
Copy.c, ફાઈલ ખોલે છે માં વાંચો પછી infile હેડર અને સુધારાઓ
outfile હેડર.
અને પછી તે દરેક પિક્સેલ વાંચે પછી scanline, પિક્સેલ દ્વારા પિક્સેલ, અને
outfile માં કે પિક્સેલ લખે છે.
>> તેથી, તમારું પ્રથમ પગલું કદાચ નીચેની ચલાવવા માટે કરી
ટર્મિનલમાં આદેશ -
સી.પી. copy.c whodunit.c.
આ એક નકલ બનાવવા માટે પડશે copy.c whodunit.c નામ આપ્યું હતું.
તેથી ખોલવા માટે અમારી પ્રથમ પગલું એ ફાઇલ, સાથે સાથે, કોઈ ચોક્કસ છે
copy.c. કે પ્રતિકૃતિ
તેથી હું જોવા માટે તમે છોડી જાય છે.
>> અમે આ pset સાથે છે કામ કરીએ છીએ શું ફાઈલ I / O, મૂળભૂત રીતે ફાઈલો લઈ,
, વાંચન, લેખન, તેમને ફેરફાર.
તમે કેવી રીતે પ્રથમ ફાઇલ ખોલો છે?
વેલ, તમે ફાઈલ જાહેર રહ્યા છીએ નિર્દેશક છે, અને પછી તમે ફોન કરો
કાર્ય fopen.
પાથ, અથવા તે નામે પસાર ફાઇલ અને પછી તમને જોઈતી સ્થિતિ
સાઇન તે ફાઈલ ખોલવા માટે
એક આર માં પસાર ખુલશે વાંચન માટે foo.bmp.
જ્યારે એક વાઇડ માં પસાર સાથે fopen કરશે ઓપન bar.bmp, ફાઈલ લખવા માટે અને
ખરેખર તે ફેરફાર.
>> તેથી હવે અમે ફાઇલ ખોલી છે કે અમારા આગળનું પગલું એ હેડર માહિતી અપડેટ કરવા માટે છે
outfile માટે.
કોઇ શીર્ષક માહિતી શું છે?
વેલ, પ્રથમ અમે જાણવાની જરૂર છે શું એક બીટમેપ છે.
એક બીટમેપ માત્ર એક સરળ છે બાઇટ્સ ગોઠવણી.
અને તેઓ આ ફાઈલમાં જાહેર કરી રહ્યા છીએ સમૂહ સાથે અહીં, bmp.h,
શું એક બીટમેપ માહિતી ખરેખર બહાર કરવામાં આવે છે.
પરંતુ અમે ખરેખર કાળજી આ છે બીટમેપ ફાઇલ હેડરમાં, અહીં છે, અને
અહીં બીટમેપ માહિતી હેડર,.
હેડર એક દંપતિ બનેલું હોય છે ખૂબ જ ઉપયોગી સાબિત થશે કે ચલો.
આ છે biSizeImage છે બાઈટમાં ઈમેજના કુલ માપ.
અને આ પિક્સેલ અને ગાદી સમાવેશ થાય છે.
પૅડિંગ ખૂબ જ મહત્વપૂર્ણ છે, પરંતુ અમે પછી તે માટે મળશે.
>> BiWidth પાંચ પહોળાઇ રજૂ કરે છે પિક્સેલ ઓછા પેડિંગ છબી.
BiHeight પણ પછી ઊંચાઇ છે પિક્સેલમાં ઈમેજના.
અને પછી BITMAPFILEHEADER અને મેં પહેલાં કહ્યું તેમ BITMAPINFOHEADER,
અગાઉ, તે રજૂ થાય છે સ્ટ્ર્ક્ટ્સ રિલીઝ.
તેથી, તમે ફાઇલ હેડરમાં ઍક્સેસ કરી શકતા નથી પોતે છે, પરંતુ તમે મેળવવા માંગો છો પડશે
અંદર તે ચલો.
>> બરાબર.
તેથી અમે કેવી રીતે હેડર માહિતી સુધારી શકીશ?
વેલ, પ્રથમ અમે જોવા માટે હોય છે કે શું અમે કોઇ પણ માહિતી બદલવાની જરૂર
આ માટે infile, ચાવી, outfile, ચુકાદો.
કંઈપણ આ કિસ્સામાં બદલાતી રહે છે?
વેલ, વાસ્તવમાં, અમે જઈ રહ્યાં છો કારણ કે માત્ર રંગ બદલીને છે.
અમે ફાઇલ બદલવા નથી જઈ રહ્યાં છો કદ, ઇમેજ માપ, પહોળાઈ,
અથવા ઊંચાઇ.
તેથી તમે હવે તમામ સાચા છો માત્ર દરેક પિક્સેલ નકલ.
>> બરાબર.
તેથી હવે આપણે કેવી રીતે અમે ખરેખર જુઓ ફાઇલ માંથી દરેક પિક્સેલ વાંચી શકે છે.
બીજી ફાઇલ I / O નો કાર્ય સક્રિય થવું પડશે -
fread.
તે સ્ટ્રક્ટ માટે નિર્દેશક લે કે બાઇટ્સ સમાવે છે
તમે વાંચી રહ્યા છો.
તેથી તમે તે માં વાંચી રહ્યાં છો.
અને પછી તમે, કે જે એક માપ પાસ દરેક તત્વ માપ કે તમે
વાંચી શકો છો.
અહીં, કાર્ય sizeof હાથમાં આવશે.
પછી તમે નંબર પાસ જે તત્વો સંખ્યા પ્રતિનિધિત્વ
વાંચવા માટે માપ.
અને પછી છેવટે, inptr, જે છે તમે કે ફાઈલ નિર્દેશક
વાંચી રહ્યું.
તેથી તે બધા તત્વો અંદર છે inptr અને તેઓ ડેટા રહ્યા છીએ.
>> આપણે થોડી ઉદાહરણ જુઓ.
હું માહિતી બે શ્વાન માં વાંચવા માંગો છો, સાથે સાથે, હું તે બે રીતે એક કરી શકો છો.
હું ક્યાં કદ બે વસ્તુઓ વાંચી શકે છે મારા inptr થી કૂતરો, અથવા હું વાંચી શકે છે
એક બે કૂતરાં માપ પદાર્થ.
તેથી તમે જુઓ છો તે માર્ગ પર આધાર રાખીને તમે, તમે કદ અને સંખ્યા વ્યવસ્થા કે
બાઇટ્સ જ સંખ્યામાં વાંચી શકે છે.
>> તેથી હવે, ચાલો બદલવા દો અમે જરૂર તરીકે પિક્સેલ રંગ.
તમે ફરીથી bmp.h જોવા, પછી તમે નીચે જોશો કે
RGBTRIPLEs, અન્ય સ્ટ્રક્ટ જ્યાં તેઓ ત્રણ બાઇટ્સ બનેલું છે.
એક, rgbtBlue, rgbtGreen, અને rgbtRed.
તેથી આ દરેક માત્રા છે વાદળી, ગ્રીન રકમ, અને
આ પિક્સેલ અંદર લાલ રકમ, જ્યાં દરેક રકમ દ્વારા રજૂ થાય છે
હેક્સાડેસિમલ નંબર.
>> તેથી ff0000 વાદળી રંગ હશે, તે વાદળી જાય છે, કારણ કે
લાલ, લીલા છે.
અને પછી બધા એફ માતાનો સફેદ હોય છે.
માતાનો smiley.bmp પર એક નજર, નાખો જે તમે તમારા વિતરણ કોડ છે.
તમે માત્ર એક છબી માં તેને ખોલવા જો દર્શક, તો પછી તમે પડશે
માત્ર લાલ હસતો જુઓ.
પરંતુ અમે પડશે, એક ઊંડા ડાઈવ લેવા જુઓ કે માળખું
તે માત્ર પિક્સેલ્સ છે.
અમે સફેદ પિક્સેલ હોય છે, અને પછી લાલ પિક્સેલ્સ.
આ તમામ પછી આ, વ્હાઇટ ffffff, અને હું તમારા માટે રંગના છે લાલ પિક્સેલ્સ
અહીં, અને તમે તેઓ 0000ff છો જુઓ.
ઝીરો વાદળી, શૂન્ય લીલો, અને સંપૂર્ણ લાલ.
અને હસતો આઠ પિક્સેલ્સ વિશાળ છે, કારણ કે અમે કોઈ પેડિંગ નથી.
અધિકાર છે.
>> હું અલગ અલગ કિંમતો સોંપી હતી તેથી જો એક RGBTRIPLE માટે અને હું માગતા હતા
તે લીલા કરે છે, તો પછી હું શું કરશે હું નામ આપવામાં એક RGBTRIPLE જાહેર કરશે
ત્રણ અને પછી દરેક પ્રવેશ કરવા માટે કે સ્ટ્રક્ટ હું અંદર બાઇટ
કોઈ ઓપરેટર ઉપયોગ કરશે.
તેથી triple.rgbtBlue, હું કરી શકો છો 0 થી કે સોંપો.
લીલા હું સંપૂર્ણ માટે સોંપી શકો છો - કોઈપણ નંબર, ખરેખર, 0 અને એફએફ વચ્ચે.
અને પછી લાલ, હું પણ 0 કહેવા જાઉં છું.
તેથી પછી તે મને એક લીલા પિક્સેલ આપે છે.
>> આગળ, હું ચેક કરો શું માંગો છો કંઈક ની કિંમત?
હું ચકાસે છે કે કંઈક કરી શકે છે ત્રણ માતાનો rgbtBlue કિંમત છે કે શું
એફએફ અને પછી પ્રિન્ટ, "હું લાગણી છું વાદળી! "પરિણામે.
હવે, તે જરૂરી અર્થ એ નથી પિક્સેલ હક, વાદળી કે?
પિક્સેલ લીલા અને લાલ કિંમતો કારણ કે પણ બિન 0 કિંમતો કરી શકે છે.
આ અર્થ એ થાય કે બધા, અને તે આ છે માટે ચકાસે છે
સંપૂર્ણ વાદળી રંગ માટે.
પરંતુ બધા પિક્સેલ્સ પણ આંશિક કરી શકે છે આ જેમ રંગ મૂલ્યો,
અહીં આગામી ઉદાહરણ છે.
>> તે થોડો કઠિન જોવા માટે છે આ ચિત્રનો છે.
આ થોડો વધુ પાંચ જેવો દેખાય છે તમને આપવામાં આવશે કે clue.bmp.
હવે, શારીરિક, તમે આ ઉકેલવા શકે છે, દ્વારા, લાલ ઘણો છે, કારણ કે
છબીમાં લાલ સ્ક્રીન હોલ્ડિંગ જેથી અન્ય રંગો દેખાય શકે છે.
તેથી અમે કેવી રીતે સી સાથે આ નકલ છે?
વેલ, અમે બધા Red દૂર કરી શકે છે છબી સંપૂર્ણપણે.
અને તેથી અમે દરેક સેટ છો તે કરવા માટે 0 થી પિક્સેલ લાલ મૂલ્ય.
અને તેથી છબી થોડી લાગશે અમે લાંબા લાલ હોય છે આ જેવા બીટ
બિલકુલ.
>> અમે છુપાયેલા સંદેશ જોઈ શકો છો થોડો વધુ સ્પષ્ટ રીતે હવે.
અન્ય હસતો ચહેરો છે.
અથવા કદાચ અમે અન્ય પદ્ધતિ ઉપયોગ કરી શકે છે.
કદાચ, આપણે ઓળખી શકે લાલ પિક્સેલ્સ તમામ -
કે, પિક્સેલ બધા સાથે છે 0 વાદળી, 0 લીલો, અને લાલ 0 -
અને સફેદ તે બદલો.
અને અમારા છબી દેખાય છે, આ કંઈક.
જોવા માટે થોડો સરળ.
>> બહાર પાડે છે અન્ય ઘણી બધી રીતો છે ગુપ્ત સંદેશ સાથે સાથે,
રંગ મેનીપ્યુલેશન સાથે વ્યવહાર.
કદાચ તમે એક પદ્ધતિ વાપરો શકે હું ઉપર ઉલ્લેખ કર્યો છે.
અને વધુમાં, તમે છો કેટલાક રંગો વધારે છે
અને તે બહાર લાવે છે.
>> તેથી હવે અમે પિક્સેલ બદલ્યું છે કે રંગ, આગળ આપણે ફક્ત તેને લખવા માટે જરૂર
પિક્સેલ દ્વારા scanline માટે, પિક્સેલ.
અને હજુ સુધી ફરીથી, તમે પાછા જોવા માંગો છો પડશે તમે નકલ કરેલ હોય, તો, copy.c માટે
તે પહેલેથી જ, અને fwrite જુઓ માહિતી લે છે, જે કાર્ય, એક નિર્દેશક
બાઇટ્સ સમાવે છે સ્ટ્રક્ટ માટે તમે માપ, માંથી વાંચવા રહ્યાં છો
આ વસ્તુઓ, વસ્તુઓની સંખ્યા, અને પછી outptr -
તે ફાઈલો અંતિમ મુકામ.
>> તમે પિક્સેલમાં લખો પછી, તો તમે પણ ગાદી માં લખી છે.
ગાદી શું છે?
વેલ, દરેક rgbt પિક્સેલ ત્રણ બાઇટ્સ લાંબી છે.
પરંતુ, એક બીટમેપ છબી માટે scanline ચાર બાઇટ્સ એક બહુવિધ પ્રયત્ન છે.
અને પિક્સેલોની સંખ્યા ન હોય તો એક ચાર ઘણી, તો પછી અમે ઉમેરવાની જરૂર છે
આ ગાદી.
પૅડિંગ માત્ર 0s પ્રતિનિધિત્વ કરતી હતી.
તેથી, અમે કેવી રીતે લખો, અથવા આ વાંચી છે?
વેલ, તે તારણ તમે કરી શકતા નથી કે ખરેખર fread ગાદી, પરંતુ તમે કરી શકો છો
તે ગણતરી.
>> આ કિસ્સામાં, ચાવી અને ચુકાદો એ જ પહોળાઈ હોય છે, જેથી
ગાદી જ છે.
અને ગાદી, તમે જોશો copy.c માં, ગણવામાં આવે છે
નીચે સૂત્ર સાથે -
bi.biWidth વખત sizeof (RGBTRIPLE) કરશે કેટલા બાઇટ્સ પાંચ BMP અમને આપો
દરેક પંક્તિ છે.
ત્યાંથી, modulos અને subtractions 4 ગણતરી કરી શકે છે સાથે કેવી રીતે
ઘણા બાઇટ્સ ઉમેરાવી જ જોઈએ કે જેથી પર બાઇટ્સ બહુવિધ
દરેક પંક્તિ ચાર છે.
>> હવે અમે માટે સૂત્ર છે કે અમે જરૂર કેટલી પેડિંગ, હવે
અમે તેને લખી શકો છો.
હવે, હું પહેલાં ઉલ્લેખ કર્યો છે, ગાદી માત્ર 0s છે.
તેથી તે કિસ્સામાં, અમે ફક્ત આપી રહ્યા છીએ આ કિસ્સામાં એક 0 ચાર રચે છે, અમારા
outptr - અમારા outfile.
જેથી માત્ર fputc બની શકે છે 0, અલ્પવિરામ outptr.
>> તેથી, અમે માં કરવામાં વાંચન કર્યું છે, જ્યારે અમારી ફાઈલ, ફાઈલ I / O નો સાચવી રાખવામાં આવી છે અમારા
કંઈક સાથે તે ફાઇલોમાં સ્થિતિ ફાઈલ સ્થિતિ સૂચક છે.
કર્સર તરીકે તે વિચારો.
મૂળભૂત રીતે, તે દર વખતે એડવાન્સિસ અમે fread, પરંતુ અમે કે જે
પણ, તેની પર નિયંત્રણ કરે છે.
>> ફાઈલ સ્થિતિ સૂચક ખસેડવા માટે, તમે કાર્ય fseek ઉપયોગ કરી શકો છો.
પાંચ inptr ફાઈલ રજૂ કરે છે તમે માગી રહ્યા છો તે નિર્દેશક છે,
જથ્થો બાઇટ્સ સંખ્યા છે કે જે તમે પછી કર્સરને ખસેડવા માટે, અને છો
સંદર્ભ બિંદુ સાથે સંબંધિત છે તમારા જ્યાં કર્સર છે.
તમે SEEK_CUR પાસ, કે જે વર્તમાન રજૂ
ફાઈલમાં સ્થાન.
અથવા તમે અમુક અન્ય પરિમાણો ઉપયોગ કરી શકો છો.
તેથી, અમે અવગણો fseek ઉપયોગ કરવા માંગો છો આ માં ફાઈલની ગાદી પર.
તમે અટવાઇ કરી રહ્યાં છો અને ફરી,, છે copy.c. કે એક ઉદાહરણ
>> તેથી હવે અમે ફાઇલ ખોલી છે, આ ચાવી, અને ચુકાદો.
અમે માટે હેડર માહિતી અપડેટ કરી અમારા ચુકાદો, કારણ કે દરેક
બીટમેપ કોઇ શીર્ષક જરૂર છે.
અમે પછી ચાવી ના દાયકામાં વાંચ્યા છે scanline, પિક્સેલ દ્વારા પિક્સેલ, બદલાતી
દરેક રંગ જરૂરી છે, અને આ માં તે લખવાનું
ચુકાદો, પિક્સેલ દ્વારા પિક્સેલ.
તમે ચુકાદો ખોલવા જાય, તમે જોઈ શકો છો જે ગુનેગાર, અથવા શું ગુપ્ત
સંદેશ છે.
મારું નામ Zamyla છે, અને આ ગૂઢ રહસ્યની અથવા ડિટેક્ટિવ વાર્તા કે નાટક હતી.