[موسیقی بجانا] ZAMYLA چان: یہ یاد SCARLETT تھا شمع دان کے ساتھ. Whodunit کے؟ ٹھیک ہے، ہم باہر تلاش کرنے کے لئے جا رہے ہیں. بورڈ کے کھیل سراگ میں، آپ کو شاید جسمانی ریڈ کی تصویر دی جائے. اور یہ کہ تصویر بہت سرخ اور ہے دببیدار، اور آپ کا کام ہے خفیہ پیغام کو ظاہر. اور عام طور پر آپ کو ایک ریڈ کے ساتھ فراہم کر رہے ہیں میگنفائنگ گلاس، یا ایک سرخ سکرین کہ خفیہ پیغام ظاہر. ٹھیک ہے، ہم اس کی نقل کرنے جا رہے ہیں. Whodunit میں، آپ کو ایک بٹ نقشہ تصویر دی کر رہے ہیں کہ، بہت دببیدار اور سرخ دکھائی دیتی ہے اور پھر Whodunit کے پروگرام کو چلانے کے ایک چھپی ہوئی پیغام ظاہر کرنے کے لئے. تو مراحل میں اس کو توڑنے کے ہیں. سب سے پہلے، آپ کو فائل کھولنے کے لئے چاہتے ہیں - آپ کو دیا گیا ہے کہ اشارہ. اور پھر بھی ایک تخلیق فیصلے بٹ نقشہ فائل. اس کے بعد آپ بٹ نقشہ کو اپ ڈیٹ کرنا چاہتے ہیں فیصلے 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. جبکہ مغرب میں پاسنگ کے ساتھ fopen کی گا کھولیں bar.bmp، فائل لکھنے کے لئے اور اصل میں یہ ترمیم. تو اب ہم فائل کھولی ہے، ہماری اگلے قدم کے ہیڈر کی معلومات کو اپ ڈیٹ کرنے کے لئے ہے outfile کے لئے. ایک ہیڈر کی معلومات کیا ہے؟ ٹھیک ہے، سب سے پہلے ہم جاننے کی ضرورت ہے کیا ایک بٹ نقشہ ہے. ایک بٹ نقشہ صرف ایک سادہ ہے بائٹس کا انتظام. اور وہ اس فائل میں اعلان کر رہے ہیں کے ایک گروپ کے ساتھ یہاں، bmp.h، کیا ایک بٹ نقشہ کے بارے میں معلومات اصل سے باہر بنایا گیا ہے. لیکن کیا ہم واقعی پرواہ ہے بٹ نقشہ فائل ہیڈر، ٹھیک ہے یہاں، اور یہاں بٹ نقشہ معلومات ہیڈر،. ہیڈر ایک جوڑے کی پر مشتمل ہے بہت مفید ثابت ہوں گے کہ متغیر. ہے جو biSizeImage، ہے بائٹس میں تصویر کا مجموعی حجم. اور اس پکسلز اور بھرتی بھی شامل ہے. بھرتی بہت اہم ہے، لیکن ہم بعد میں اس سے ملے گی. BiWidth کی چوڑائی کی نمائندگی کرتا ہے پکسلز مائنس بھرتی میں تصویر. BiHeight بھی تو اونچائی ہے پکسلز میں تصویر کی. اور پھر BITMAPFILEHEADER اور جیساکہ میں نے ذکر BITMAPINFOHEADER، اس سے قبل ان کی نمائندگی کر رہے ہیں structs کے طور پر. تو، آپ کو فائل ہیڈر تک رسائی حاصل نہیں کر سکتے ہیں خود، لیکن اگر آپ کو حاصل کرنے کے لئے چاہتے ہیں کریں گے اندر ان متغیرات. ٹھیک ہے. تو ہم کس طرح ہیڈر کی معلومات کو اپ ڈیٹ کرتے ہیں؟ ٹھیک ہے، سب سے پہلے ہم کو دیکھنے کے لئے ہے ہم چاہے طرف سے کوئی بھی معلومات کو تبدیل کرنے کی ضرورت ہے پر infile، اشارہ، outfile، فیصلے. کچھ اس صورت میں تبدیل کر رہا ہے؟ ٹھیک ہے، اصل میں، ہم جا رہے ہیں نہیں ہے کیونکہ صرف رنگ تبدیل کرنے. ہم فائل تبدیل کرنے نہیں جا رہے ہیں سائز، تصویر کا سائز، چوڑائی، یا اونچائی. تو آپ کی طرف سے اب ٹھیک ہیں صرف ہر پکسل کاپی. ٹھیک ہے. تو اب ہم کس طرح اصل میں نظر آتے ہیں فائل سے ہر پکسل پڑھ سکتے ہیں. ایک اور فائل میں / O تقریب کھیل میں آئے گا - fread. یہ struct پر ایک پوائنٹر میں لیتا ہے اس بائٹس پر مشتمل گا کہ آپ پڑھ رہے ہیں. تو آپ کو اس میں پڑھ رہے ہیں. اور پھر آپ کو ہے جو، ایک سائز میں منتقل ہر عنصر کے سائز ہے کہ آپ پڑھنے کے لئے چاہتے ہیں. یہاں، کی تقریب کو sizeof ہاتھ میں آ جائے گا. تو پھر آپ کو، بڑی تعداد میں گزر جس کے عناصر کی تعداد کی نمائندگی کرتا ہے پڑھنے کے لئے سائز. اور پھر آخر میں، inptr، جو تم اس فائل پوائنٹر سے پڑھنے کے لئے جا رہا. لہذا ان عناصر کے تمام کے اندر ہیں inptr اور وہ اعداد و شمار کے لئے جا رہے ہیں. کی ایک چھوٹی سی مثال کے طور پر نظر آتے ہیں. میں اعداد و شمار کے دو کتوں میں پڑھنے کے لئے چاہتے ہیں، ٹھیک ہے، میں اس کے دو طریقوں میں سے ایک کر سکتے ہیں. میں یا تو سائز کے دو اشیاء میں پڑھ سکتے ہیں میری inptr سے کتے، یا میں پڑھ سکتے ہیں ایک میں دو کتوں کا سائز اعتراض. تو آپ کو دیکھ کر اس طرح پر منحصر ہے آپ کو، آپ کے سائز اور تعداد کا بندوبست ہے بائٹس کی ایک ہی تعداد میں پڑھ سکتے ہیں. تو اب، کی تبدیل ہم نے کی ضرورت کے طور پر پکسل کا رنگ. آپ دوبارہ bmp.h میں نظر آتے ہیں، تو آپ نیچے دیئے گئے دیکھیں گے کہ RGBTRIPLEs، دوسرے struct کے کہاں ہیں وہ تین بائٹس پر مشتمل ہیں. ایک، rgbtBlue، rgbtGreen، اور rgbtRed. تو ان میں سے ہر ایک کی رقم کی نمائندگی کرتا ہے نیلے رنگ کے، سبز کی رقم، اور اس پکسل کے اندر ریڈ کی رقم، کہاں ہر رقم ایک کی طرف سے نمائندگی کی ہے شش اعشاری نمبر. تو FF0000 ایک نیلے رنگ ہو جائے گا، یہ نیلے رنگ سے جاتا ہے، کیونکہ سرخ، سبز. اور پھر تمام F وائٹ ہو جائے گا. کی smiley.bmp پر ایک نظر، لے جس آپ کو آپ کے تقسیم کے کوڈ میں ہے. آپ کو صرف ایک تصویر میں کھول تو ناظرین، اس کے بعد تمہیں صرف ایک سرخ سمائلی دیکھ. لیکن ہم کریں گے، میں ایک گہری ڈوبکی لے دیکھتے ہیں کہ ڈھانچہ کے یہ صرف پکسلز ہے. ہم سفید پکسلز ہے، اور پھر سرخ رنگ کے پکسلز. کے فورا تمام، سفید ffffff، اور میں آپ کے لئے میں رنگ ہے سرخ پکسلز یہاں، اور آپ کو وہ 0000ff ہیں دیکھ. زیرو نیلے، صفر سبز، اور مکمل سرخ. اور سمائلی آٹھ پکسلز وسیع ہے، ہم کسی بھی بھرتی نہیں ہے. ٹھیک ہے. میں مختلف اقدار کی وضاحت کرنے کے لئے تھے تو اگر ایک RGBTRIPLE اور میں چاہتا تھا یہ سبز بنانے کے، تو کیا مجھے کیا کرنا ہے میں نامی ایک RGBTRIPLE، کا اعلان کریں گے ٹرپل، اور پھر ہر تک رسائی حاصل کرنے کہ struct کے میں اندر بائٹ نقطہ آپریٹر کا استعمال کریں گے. تو triple.rgbtBlue، میں کر سکتا ہوں 0 کرنے کے لئے تفویض. گرین میں مکمل کرنے کے لئے تفویض کر سکتے ہیں - کسی بھی تعداد، واقعی، 0 اور FF کے درمیان. اور پھر سرخ رنگ، میں نے بھی 0 کہنے جا رہا ہوں. تو اس نے مجھے ایک سبز پکسل دیتا ہے. اگلا، میں چیک کرنے کے لئے کیا چاہتے ہیں کچھ کی قیمت؟ میں چیک کرتا ہے کہ کچھ کر سکتے ہیں ٹرپل کی rgbtBlue قیمت ہے کہ FF اور پھر پرنٹ، "میں محسوس کر رہا ہوں نیلے! "، نتیجے کے طور پر. اب، یہ ضروری مطلب یہ نہیں ہے پکسل صحیح، نیلے ہے؟ پکسل کی سبز اور سرخ اقدار کیونکہ بھی غیر 0 اقدار ہو سکتا ہے. اس کا مطلب یہ ہے کہ تمام، اور جو یہ ہے کے لئے جانچ پڑتال کی جاتی ہے ایک مکمل نیلے رنگ کے لئے. لیکن تمام پکسلز کو بھی جزوی طور پر کر سکتے ہیں اس طرح رنگ اقدار، یہاں اگلا مثال کے طور پر. یہ تھوڑا مشکل کو دیکھنے کے لئے ہے اس تصویر کو اب کیا ہے. یہ تھوڑا سا زیادہ کی طرح لگتا ہے آپ کو دیا جائے گا کہ clue.bmp. اب، جسمانی طور پر، اگر آپ اس کو حل کر سکتے ہیں، کی طرف سے، ریڈ کی ایک بہت ہے کیونکہ تصویر ایک سرخ سکرین کا انعقاد تو دیگر رنگ ظاہر ہو سکتے ہیں. تو ہم کس طرح سی کے ساتھ اس کی نقل ہے؟ ٹھیک ہے، ہم تمام سرخ کو دور کر سکتے ہیں تصویر سے مکمل طور پر. اور اس طرح ہم ہر مقرر تھا کہ ایسا کرنے کے لئے 0 پکسل سرخ قیمت. اور اس تصویر کا ایک چھوٹا سا نظر آئے گا ہم کوئی سرخ ہے جہاں اس طرح تھوڑا سا جو کچھ. ہم پوشیدہ پیغام دیکھ سکتے ہیں تھوڑا سا زیادہ واضح طور پر اب. یہ ایک جذباتیہ ہے. یا شاید ہم ایک اور طریقہ کا استعمال کر سکتے ہیں. شاید، ہم شناخت کر سکتے ہیں ریڈ پکسلز کے تمام - کہ، پکسلز کی سب کے ساتھ ہے 0 نیلے، 0، سبز، اور 0 سرخ - اور سفید کرنے کے لئے ان کو تبدیل. اور ہماری تصویر نظر ہو سکتا ہے کچھ اس طرح. دیکھنے کے لئے تھوڑا سا آسان. ننگا کرنے کے دیگر طریقے بہت ہیں خفیہ پیغام کے ساتھ ساتھ، رنگین ہیرا پھیری کے ساتھ نمٹنے. شاید آپ کو طریقوں میں سے ایک استعمال کر سکتے ہیں میں نے اوپر ذکر کیا ہے کہ. اور اس کے علاوہ، آپ چاہتے ہیں کر سکتے ہیں کچھ رنگ کو بڑھانے کے لئے اور ان لوگوں کو باہر لانے کے. تو اب ہم پکسل تبدیل کر دیا ہے کہ رنگ، اگلے ہم صرف ان کے لکھنے کی ضرورت پکسل کی طرف سے scanline میں، پکسل. اور ایک بار پھر، آپ کو واپس دیکھنا چاہتا ہوں گے آپ کاپی نہیں ہوا ہے تو، copy.c پر یہ پہلے سے ہی، اور fwrite پر نظر ڈیٹا لیتا ہے جس کی تقریب،، ایک پوائنٹر بائٹس پر مشتمل ہے کہ struct پر آپ کے سائز، سے پڑھ رہے ہیں اشیاء، اشیاء کی تعداد، اور پھر outptr - ان فائلوں کی منزل. آپ پکسلز میں لکھنے کے بعد، آپ گے بھی بھرتی میں لکھنے کے لئے ہے. بھرتی کیا ہے؟ ٹھیک ہے، ہر rgbt پکسل تین بائٹس طویل ہے. لیکن، ایک بٹ نقشہ تصویر کے لئے scanline چار بائٹس کی ایک سے زیادہ ہونا ضروری ہے. اور پکسلز کی تعداد نہیں ہے اگر ایک چار میں سے ایک سے زیادہ، تو ہم شامل کرنے کی ضرورت اس بھرتی. بھرتی صرف 0s کی طرف سے نمائندگی کی ہے. تو، ہم کس طرح لکھنے کے لئے، یا اس پڑھ سکتا ہوں؟ ٹھیک ہے، یہ پتہ چلتا ہے اگر آپ نہیں کر سکتے ہیں اصل fread بھرتی، لیکن آپ کر سکتے ہیں اس کا تخمینہ لگانا. اس صورت میں، اشارہ اور فیصلے اسی کی چوڑائی ہے، تو بھرتی ایک ہی ہے. اور بھرتی، آپ کو نظر آئے گا کے طور پر copy.c میں، شمار کیا جاتا ہے ذیل فارمولے کے ساتھ - bi.biWidth اوقات کو sizeof (RGBTRIPLE گے) کتنے بائٹس BMP ہمیں دے ہر صف میں ہے. وہاں سے، modulos اور subtractions کی 4 حساب کر سکتے ہیں کے ساتھ کس طرح کئی بائٹس شامل ہونا ضروری ہے تاکہ پر بائٹس کی ایک سے زیادہ ہر صف چار ہے. اب ہم کے لئے فارمولا ہے کہ ہم نے کی ضرورت کتنا بھرتی، اب ہم اس کو لکھ سکتے ہیں. اب، میں نے پہلے ذکر، بھرتی صرف 0s ہے. تو اس صورت میں، ہم صرف ڈال رہے ہیں میں اس معاملے میں 0 ایک چار،، ہماری outptr - ہمارے outfile. تو یہ صرف fputc ہو سکتا ہے 0، کوما outptr. تو، ہم میں پڑھ رہا تھا جبکہ ہماری فائل، فائل میں / O کا ٹریک رکھا ہے ہماری کچھ کے ساتھ ان فائلوں میں پوزیشن فائل پوزیشن کا مظہر کہا جاتا ہے. ایک کرسر کے طور پر اس کے بارے میں سوچو. بنیادی طور پر، یہ ہر وقت پیش قدمی ہم fread، لیکن ہم ہیں کہ بھی، اس پر کنٹرول. فائل پوزیشن کا مظہر منتقل کرنے کے لئے، آپ تقریب fseek استعمال کر سکتے ہیں. inptr فائل نمائندگی کرتا ہے جہاں آپ میں حاصل کرنے کی کوشش کر رہے ہیں کہ پوائنٹر، رقم بائٹس کی تعداد ہے کہ آپ سے پھر کرسر منتقل، اور کرنا چاہتے ہیں حوالہ نقطہ سے متعلق آپ کا کرسر ہے جہاں سے. آپ SEEK_CUR میں گزرتے ہیں، کہ موجودہ کی نمائندگی کرتا ہے فائل میں پوزیشن. یا آپ کو کچھ دوسرے پہلوؤں کو استعمال کر سکتے ہیں. تو، ہم جائیں fseek استعمال کرنے کے لئے چاہتے ہو سکتا ہے میں فائل کی بھرتی پر. آپ پھنس گئے ہیں اور اگر پھر،، وہاں ہے copy.c. میں اس کی ایک مثال تو اب ہم فائل کھولی ہے، اشارہ، اور فیصلے. ہم کے لئے ہیڈر کی معلومات کو اپ ڈیٹ کر دیا ہے ہمارے فیصلے، کیونکہ ہر بٹ نقشہ ایک ہیڈر کی ضرورت ہے. پھر ہم اشارہ کے میں پڑھا ہے scanline، پکسل پکسل، تبدیل کرنے ہر رنگ کے طور پر ضروری ہے، اور میں ان کو لکھنے فیصلے، پکسل پکسل. آپ کے فیصلے کو کھولنے کے بعد، آپ دیکھ سکتے ہیں جو مجرم، یا کیا راز پیغام ہے. میرا نام کیا Zamyla ہے، اور اس Whodunit کے تھا.