[Powered by Google Translate] [Walkthrough - مسئلہ سیٹ 4] [Zamyla چان - ہارورڈ یونیورسٹی] یہ [CS50 ہے. CS50.TV] - ٹھیک ہے. ہیلو، سب لوگ، اور 4 Walkthrough کا استقبال ہے. آج ہمارے pset عدالتی ہے. عدالتی واقعی ایک تفریح ​​pset جو بٹ نقشہ فائلوں سے نمٹنے شامل ہے دریافت ہے جو ایک جرم کا ارتکاب کیا ہے. پھر ہم کچھ بٹ نقشہ فائلوں کا سائز تبدیل کرنے جا رہے ہیں، تو پھر ہم بھی کہا جاتا بازیافت واقعی مزہ حصہ کے ساتھ نمٹنے کے لئے جا رہے ہیں، جس میں ہم نے بنیادی طور پر ایک میموری کارڈ کے حوالے کر رہے ہیں جس میں کسی اتفاقی طور پر ان کی فائلوں کی تمام خارج کر دیا ہے، اور ہم ان فائلوں کی وصولی کے لئے کہا ہے. لیکن اس سے پہلے، اس سے پہلے کہ ہم pset میں ملتا ہے، میں واقعی میں صرف سب کو مبارک دینے کے لئے چاہتے ہیں. ہم اس کورس کی midpoint کے بارے میں ہیں. کوئز 0 ہمارے پیچھے ہے، اور ہم نے pset4 میں ہیں، تو بنیادی طور پر، ہم نے نصف ہیں. ہم نے ایک طویل راستہ طے اگر آپ اپنے psets، pset0 اور pset1 واپس نظر آئے ہے، تو اپنے آپ کو اس کے بارے میں مبارک باد دیتا ہوں، اور ہم نے کچھ بہت ہی مزہ چیزیں میں حاصل کرنے کے لئے جا رہے ہیں. تو، پھر، اس pset کے لئے ہماری آلات، sudo اپ ڈیٹ یم Y چلانے کے بجائے ہم صرف update50 چلانے کے قابل ہیں اگر آپ 17.3 ورژن اور اس سے اوپر کے آلے کے ہے. تو update50 چلانے کے لئے اس بات کا یقین ہو جائے - یہ ایک بہت آسان، کچھ کم حروف ہے - اس بات کا یقین کر لیں کہ آپ آلے کا تازہ ترین ورژن میں ہیں بنانے کے لئے. خاص طور پر اس update50 پر ضروری ہے جب ہم CS50 چیک کا استعمال کرتے ہوئے شروع. تو اس بات کا یقین کر لیں کہ آپ ایسا کر سکتے ہیں. اس pset کے لئے حصوں میں سے سب کے لئے، فائل ہم فائل آدانوں اور نتائج سے نمٹنے کے لئے جا رہے ہیں، I / O. ہم arrays سے نمٹنے کے پروگرام کی ایک بہت میں جا جا رہے ہیں فائلوں اور اس طرح چیزوں کی طرف اشارہ کرتے ہوئے، تو ہم اس بات کا یقین کر لیں کہ ہم واقعی واقف اور آرام دہ اور پرسکون ہو بنانا چاہتے ہیں فائلوں میں ان پٹ اور پیداوار کس طرح سے نمٹنے کے. اس pset کے لئے تقسیم کے کوڈ میں نامی copy.c فائل ہے، اور یہ کہ جو ہم تلاش کرنے کے لئے جا رہے ہیں واقعی ہمارے لئے مفید ہو جا رہا ہے کیونکہ ہم نے ختم کرنے کے لئے جا رہے ہیں میں copy.c فائل کاپی اور صرف یہ تبدیلی تھوڑا سا مسئلہ سیٹ کے پہلے 2 حصوں کو حاصل کرنے کے قابل ہو جائے. اور تو جیسا کہ میں نے پہلے کہا، ہم کے طور پر ساتھ ساتھ bitmaps JPEGs کے ساتھ نمٹنے کر رہے ہیں. تو واقعی میں کس طرح ان فائلوں کو منظم کر رہے ہیں کی ساخت کو سمجھنے، ہم 0s اور structs میں 1s کس طرح سچ میں ترجمہ کر سکتے اور چیزوں ہے کہ ہم واقعی تشریح سمجھتے ہیں اور میں ترمیم کر سکتے ہیں جو بہت ضروری ہو جائے گا، JPEG اور بٹ نقشہ فائلوں میں جا رہا ہے اور ان کی ساخت کو سمجھنے. Pset4، ہمیشہ کی طرح، سوالات کے ایک حصے کے ساتھ شروع ہوتا ہے. وہ فائل I / O کے ساتھ نمٹنے کے، اور آپ اس کے عادی. پھر حصہ 1 Whodunit ہے، جس میں آپ کو ایک بٹ نقشہ فائل دی کر رہے ہیں جو سرخ نقطوں کی طرح سب سے زیادہ طرح لگتا ہے. اور پھر بنیادی طور پر ہے کہ ہم کیا کرنے جا رہے ہیں اس فائل کو لے لو اور صرف تھوڑا سا ترمیم کریں ایک ورژن ہے کہ ہم پڑھ سکتے ہیں میں. بنیادی طور پر، ایک بار ہم ختم، ہم ایک ہی فائل پڑے گا، کے علاوہ ہم ان تمام لوگوں سرخ نقطے کی طرف سے پوشیدہ پوشیدہ پیغام کو دیکھنے کے لئے کے قابل ہو جائے گا. پھر اس کا سائز تبدیل ایک پروگرام ہے کہ ایک فائل دی ہے اور پھر فائل ہے کہ یہ نتائج کا نام دیا گیا اور پھر ایک نمبر دیا اور ساتھ ہی، کہ بٹ نقشہ اصل میں اس عددی قیمت کی طرف سے کا سائز تبدیل کریں گے. اس کے بعد آخر میں، ہم بازیافت pset ہے. ہم نے ایک میموری کارڈ دیا ہے اور کر رہے ہیں تو تصاویر میں سے سب کی وصولی کے لئے کی ضرورت ہیں جو اتفاقی طور پر خارج کر دیا گیا ہے، لیکن، ہم کے طور پر پتہ چل جائے گا، اور اصل میں نہیں خارج کر دیا فائل سے ہٹا دیا؛ ہم صرف کی قسم کھو دیا ہے جہاں وہ فائل میں تھے، لیکن ہم اس کی وصولی کے لئے جا رہے ہیں. بہت اچھا ہے. تو فائل میں جا I / O خاص طور پر، یہ کام کرتا ہے کہ آپ کا استعمال کیا جائے گا کی ایک پوری فہرست ہے. آپ نے پہلے ہی تھوڑا سا fopen کی بنیادی باتیں، fread، اور fwrite دیکھا ہے، لیکن ہم کسی فائل میں مزید نظر آتے جا رہے ہیں مجھے / ایسی fputc O افعال جس میں آپ ایک وقت میں صرف ایک کردار لکھنا، fseek، جہاں آپ قسم کی فائل پوزیشن کا مظہر فارورڈز اور پیچھے کی طرف منتقل اور پھر کچھ دیگر شامل ہیں. لیکن ہم pset کے دوران اس میں تھوڑی بعد چلے جائیں گے. تو سب سے پہلے، صرف فائل میں حاصل کرنے کے لئے I / O اس سے پہلے کہ ہم pset میں، فائل کو کھولنے کے لئے، مثال کے طور پر، جو تمہیں کیا کرنا ہے واقعی میں اس فائل پوائنٹر مقرر کیا گیا ہے. تو ہم نے ایک فائل * پوائنٹر ہے. اس صورت میں، میں نے اسے پوائنٹر میں ایک بلا وجہ سے ہے کہ میرے infile ہونے جا رہا ہے کر رہا ہوں. اور اس میں تقریب اور پھر fopen کی فائل کے نام کو استعمال کرنے کے لئے جا رہا ہوں اور پھر موڈ جس میں میں جا رہا ہوں فائل کے ساتھ نمٹنے کے لئے. تو اس معاملے میں پڑھنے کے لئے "R"، لکھنے کے لئے "W"، اور پھر appending کے لئے "ایک" ہے. مثال کے طور پر، جب آپ کو ایک infile کے ساتھ کام کر رہے ہو اور آپ کرنا چاہتے ہیں وہاں محفوظ کی بٹس اور بائٹس پڑھ ہے، تو آپ شاید اپنے موڈ کے طور پر "R" استعمال کرنا چاہتے ہیں کے لئے جا رہے ہیں. ، جب آپ اصل میں لکھنے کے لئے چاہتے ہیں، اس قسم کی ایک نئی فائل بنانے کے تو جو ہم کرنے جا رہے ہیں ہم نئی فائل کو کھولنے کے لئے جا رہے ہیں اور لکھنے کے لئے "W" موڈ کا استعمال کریں. تو پھر ساخت جب آپ اصل میں فائلوں میں پڑھ رہے ہیں، مندرجہ ذیل ہے. سب سے پہلے آپ struct جو بائٹس پر مشتمل گا کہ آپ پڑھ رہے ہو پوائنٹر بھی شامل ہیں. تو اس بائٹس جو آپ پڑھ رہے ہیں کے آخر محل وقوع کو ہونے جا رہا ہے. اس کے بعد آپ کے سائز کی نشاندہی کرنے جا رہے ہیں پسند، بنیادی طور پر کتنے بائٹس سائز آپ کے پروگرام فائل میں پڑھنا ہے، بنیادی طور پر ایک عنصر ہے، اور پھر آپ کی وضاحت کس طرح بہت سے عناصر پر آپ کو پڑھنے کے چاہتے ہیں کے لئے جا رہے ہیں. اور پھر آخر میں، آپ کو آپ کہاں سے پڑھ رہے ہیں جانتے ہیں کہ ہے، تاکہ تمہارے پوائنٹر ہونے جا رہا ہے. میں یہ رنگ کوڈت ہے کیونکہ fread بھی بہت fwrite اسی طرح، ، آپ کو اس بات کا یقین کر لیں کہ آپ کو حق کے لئے استعمال کرتے ہیں بنانے کے لئے چاہتے ہیں کے علاوہ اس بات کا یقین کر لیں کہ ہے کہ آپ اصل میں لکھ رہے ہیں یا درست فائل سے پڑھنے بنانے کے. تو پھر پہلے کی طرح، اگر ہم عناصر کے سائز کے طور پر ساتھ ساتھ عناصر کی تعداد میں ہیں، تو پھر ہم یہاں کھیلنے کے تھوڑا سا ہو سکتا ہے. کا کہنا ہے کہ میں ایک کتے struct ہے اور تو مجھے دو کتوں کو ایک وقت میں پڑھنا چاہتے ہیں. میں کیا کر سکتا ایک عنصر کے سائز کا کہنا ہے کہ ایک کتے کے سائز کی جا رہی ہے اور میں اصل میں ان میں سے دو کو پڑھنے جا رہا ہوں. متبادل طور پر، کہ میں کیا کر سکتا کا کہنا ہے کہ میں صرف ایک عنصر کو پڑھنے کے لئے جا رہا ہوں اور یہ کہ ایک عنصر دو کتوں کا سائز جا رہا ہے. تو یہ مطابق ہے کہ کس طرح آپ کو کھیل کے سائز اور تعداد کے ساتھ قسم کے ارد گرد بنا سکتے ہیں کیا آپ پر بدیہی ہے پر منحصر ہے. ٹھیک ہے. تو اب ہم تحریری فائلوں کو حاصل ہے. پہلی دلیل جب آپ ایک فائل کو لکھنے کے لئے کرنا چاہتے ہیں، اصل میں ہے جہاں آپ سے پڑھ رہے ہو. تو یہ بنیادی طور پر اعداد و شمار سے ہے کہ آپ کو فائل میں لکھنے کے لئے جا رہے ہیں، جو آخر میں باہر پوائنٹر ہے. تو جب آپ pset کے ساتھ کام کر رہے ہو، اس بات کا یقین کر لیں کہ آپ گھبرا نہ ہو. ہو سکتا ہے کہ پارٹی کی طرف سے کی تعریف کی طرف ہے. آپ تعریفیں دستی ھیںچو شخص کو ٹائپ کرکے تو کر سکتے ہیں اور fwrite، مثال کے طور پر، ٹرمینل میں یا آپ اس سلائڈ پر واپس رجوع کر سکتے ہیں اور اس بات کا یقین کر لیں کہ آپ صحیح استعمال کر رہے ہیں کر سکتے ہیں. تو پھر fwrite کے لئے، جب آپ کو ایک فائل ہے کہ آپ میں لکھنے کے لئے چاہتے ہیں، جو آخری دلیل ہونے جا رہا ہے اور ہے کہ اس فائل پوائنٹر ہونے جا رہا ہے. تو تو یہ ہے کہ ہم شاید ایک وقت میں لکھنے کئی بائٹس کے ساتھ کس طرح نمٹنے کے، لیکن اس کا کہنا ہے کہ آپ صرف صرف ایک کردار میں لکھنا چاہتا ہوں. جیسا کہ ہم اس مثال میں بعد میں دیکھیں گے، ہم bitmaps میں اس کا استعمال کرنا پڑے گا. اس کا ہے جب ہم fputc استعمال کر سکتے ہیں، بنیادی طور پر صرف ایک وقت میں ایک کردار تيل، chr فائل پوائنٹر میں اور یہ کہ ہماری وہاں پوائنٹر. تو پھر ہم یا جب ایک فائل میں لکھنے کی کوشش، فائل ہم کہاں ہیں ٹریک رکھ رہی ہے. تو یہ ایک قسم کا کرسر فائل پوزیشن کا مظہر ہے. اور اس طرح ہم یا ایک فائل میں جب بھی دوبارہ پڑھ لکھ، فائل اصل میں یاد ہے وہ کہاں ہے، اور تو اس جہاں کرسر سے جاری ہے. یہ فائدہ مند ہو جب آپ کرنا چاہتے ہیں، کا کہنا ہے کہ کر سکتے ہیں، ایک مخصوص رقم میں کچھ پڑھنا اور اس کے بعد مندرجہ ذیل رقم میں پڑھتے ہیں، لیکن کبھی کبھی ہم یا اصل میں جانے کے لئے ایک خاص حوالہ قیمت سے شروع کر سکتے ہیں. تو fseek تقریب، کیا اس سے فرق پڑتا ہے ہمیں ایک بات کا یقین فائل میں کرسر منتقل کرنے کے لئے کی اجازت دیتا ہے بائٹس کی ایک مخصوص تعداد ہے. اور اس وقت ہمیں کیا کرنا ہے جہاں حوالہ قیمت ہے کی وضاحت ہے. یا تو جہاں کرسر اس وقت سے آگے یا پیچھے منتقل، ہم وضاحت کر سکتے ہیں یا یہ کہ فائل کے شروع سے ہی بڑھنا چاہیے یا فائل کے آخر سے. اور اس لئے تم منفی یا مثبت اقدار میں رقم منتقل کر سکتی ہیں، اور قسم ہے کہ کرسر یا تو فارورڈز یا پیچھے کی طرف چلا جائے گا. اس سے پہلے کہ ہم دیگر psets میں ملتی ہے، فائل پر کوئی سوال I / O؟ ٹھیک ہے. جیسا کہ ہم زیادہ سے زیادہ مثال کے طور پر میں کرنے کے لئے، کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے سوالات کے لئے روکنے کے لئے آزاد محسوس کرتے ہیں. تو Whodunit میں، آپ کو ایک بٹ نقشہ سلائڈ پر یہ لال کی طرح فائل کے حوالے کر رہے ہیں، اور یہ اس طرح لگ رہا ہے - سرخ نقطوں کا ایک گروپ - اور تم سچ میں نہیں کیا لکھا ہے جانتے ہو. اگر آپ squint، آپ وسط کے اندر تھوڑا سا bluish رنگ دیکھنے کے لئے کرنے کے قابل ہو سکتا ہے. بنیادی طور پر، یہ ہے جہاں متن محفوظ ہے. ایک قتل ہوا تھا، اور ہم باہر تلاش کرنے کے لئے جو اس نے کیا کیا کرنے کی ضرورت ہے. کے لئے ایسا کرنے کے لئے، ہم ایک پڑھنے کے قابل کی شکل میں اس تصویر کو تبدیل کرنے کی قسم کی ضرورت ہے ہے. اگر تم لوگ کبھی بھی اس کا سامنا کرنا پڑا ہے، کبھی کبھی تھوڑا کٹس جائے گا آپ کے پاس ایک سرخ فلم کے ساتھ ایک میگنفائنگ گلاس کہاں ہوگا. کوئی ہے؟ جی ہاں. تو آپ کو اس طرح ہاتھ کچھ ہو جائے گا، آپ کو ایک میگنفائنگ گلاس ہوگا اس پر سرخ فلم کے ساتھ، آپ کو تصویر کے اوپر ڈال دیں گے، اور آپ کو پیغام اس میں پوشیدہ کے قابل ہو جائے گا. ہم سرخ فلم کے ساتھ ایک میگنفائنگ گلاس نہیں ہے، تو اس کے بجائے ہم قسم کی ہماری اپنی تخلیق کے لئے جا رہے ہیں اس pset میں. اور اس طرح صارف ان پٹ whodunit، تو اشارہ جا ہے، BMP، تاکہ infile، جو سرخ نقطہ پیغام ہے، اور اس کے بعد ان کا یہ کہنا verdict.bmp ہمارے outfile ہونے جا رہا ہے کر رہے ہیں. تو اس کا ایک اشارہ کی طرح ایک نئی بٹ نقشہ تصویر بنانے کے لئے جا رہا ہے صرف ایک پڑھنے کے قابل کی شکل میں ہم خفیہ پیغام کہاں دیکھ سکتے ہیں. چونکہ ہم ترمیم اور توڑ کسی قسم کی bitmaps سے نمٹنے جا رہے ہیں، ہم ان بٹ نقشہ فائلوں کی ساخت میں ڈوبکی کی طرح جا رہے ہیں. ہم درس میں یہ تھوڑا سا پر چلا گیا ہے، لیکن ان میں کچھ اور نظر آتے ہیں. Bitmaps بنیادی طور پر صرف بائٹس کی ایک انتظام ہم کہاں مخصوص ہے جس بائٹس کا مطلب کیا ہے. تو یہاں بٹ نقشہ تصویر کے نقشے کی طرح ہے کہہ رہے ہیں کہ یہ کچھ ہیڈر فائلوں کے ساتھ شروع ہوتا ہے، وہاں میں کچھ معلومات کے ساتھ شروع ہوتا ہے. تم نے دیکھا ہے کہ کے بارے میں بائٹ 14 نمبر پر سائز بٹ نقشہ نقش پر دلالت کرتا ہے، اور اس پر جاری ہے. لیکن پھر کیا ہم واقعی یہاں میں دلچسپی رکھتے ہیں بائٹ 54 نمبر کے ارد گرد شروع کر رہا ہے. ہم ان RGB triples ہے. کہ وہ کیا کرنے جا رہی ہے اصل پکسلز، رنگ اقدار پر مشتمل ہے. ہیڈر میں اوپر سب کچھ معلومات ہے تصویر، تصویر کی چوڑائی اور اونچائی کے سائز کے مطابق. جب ہم بھرتی میں پر جانے کے بعد ہم دیکھیں گے، کیوں تصویر کا سائز چوڑائی یا اونچائی سے مختلف ہو سکتا ہے. تو پھر ان کی نمائندگی کرنے کے - ان بٹ نقشہ تصاویر بائٹس کی انداز ہوتے ہیں - جو ہم کر سکتے ہیں، ٹھیک ہے کا کہنا ہے کہ ہے، اب مجھے یاد کرنے جا رہا ہوں کہ صفحہ 14، کہ جہاں کا سائز مثال کے طور پر ہے،، لیکن اس کی بجائے جو ہم اس کو آسان بنانے کے لئے کیا کرنے جا رہے ہیں ہے، یہ struct میں encapsulate ہے. اور اس طرح ہم دو ہمارے لئے بنائی گئی structs، BITMAPFILEHEADER اور BITMAPINFOHEADER اور اسی طرح جب بھی ہم اس فائل میں پڑھا، یہ ڈیفالٹ کی طرف سے ترتیب میں جا جا رہا ہے، اور اسی طرح اس کی ترتیب میں بھی ایسے biWidth اور biSize کے طور پر متغیر میں میں بھرنے جا رہا ہے. اور پھر آخر میں، ہر پکسل تین بائٹس کی طرف سے ظاہر کیا جاتا ہے. پہلے ایک پکسل میں نیلے رنگ کی رقم ہے، دوسری سبز رنگ کی رقم ہے، اور آخر میں سرخ، سرخ، جہاں 0 بنیادی طور پر نیلے یا کوئی سبز ہے کی رقم یا نہیں اور پھر FF زیادہ سے زیادہ قیمت ہے. یہ شش اعشاری اقدار ہیں. تو پھر اگر ہم ff0000 ہے، تو وہ نیلے رنگ کی زیادہ سے زیادہ رقم کے مساوی اور اس کے بعد سبز اور کوئی سرخ، تو کوئی ہے کہ ہمیں ایک نیلے پکسل دے گی. اس کے بعد اگر ہم نے بورڈ بھر FF تمام ہے، تو اس کا مطلب یہ ہے کہ ہم ایک سفید پکسل ہے. یہ عام طور پر برعکس کی طرح ہے جب ہم RGB کا کہنا ہے کہ. یہ اصل میں BGR جا رہا ہے. لہذا اگر ہم ایک بٹ نقشہ تصویر کے ایک مثال کے طور پر میں اصل میں نظر آئے - مجھے ایک یہاں ھیںچو. یہ ایک چھوٹا سا چھوٹا ہے. میں zooming رہا ہوں، اور ہم دیکھتے ہیں اس pixelated ہے کر سکتے ہیں. یہ رنگ کے بلاکس کی طرح لگ رہا ہے. آپ سفید بلاکس اور پھر سرخ رنگ کے بلاکس ہیں. اگر آپ مائیکروسافٹ پینٹ میں کھیلتے ہیں، آپ کو مثال کے طور پر اس طرح کچھ کر سکتا ہے بنیادی طور پر کی طرف سے ایک مخصوص ترتیب میں کچھ چوکوں تصویر. تو پھر بٹ نقشہ میں کیا اس ترجمہ یہ ہے کے طور پر مندرجہ ذیل ہے. یہاں ہم پہلے سفید پکسلز ہے، کہ تمام 6 F کی ہیں، اور اس کے بعد ہم نے سرخ رنگ کے پکسلز ہے، 0000ff کی طرف سے دلالت کرتی ہے. اور اس بائٹس کہ ہم ترتیب کی طرف اشارہ کرتا ہے کہ کس طرح بٹ نقشہ تصویر دیکھنا ہو رہا ہے. تو جو میں نے یہاں کیا ہے صرف ان تمام بائٹس لکھا ہے اور سرخ رنگ میں تو رنگ اگر تاکہ تم قسم کی دیکھ سکتے ہیں، آپ کو تھوڑا سا squint، کس طرح اس طرح کی جذباتیہ کی طرف اشارہ کرتا ہے. جس طرح سے کہ بٹ نقشہ تصاویر کے کام میں ہے یہ گرڈ کے طور پر بنیادی طور پر کلپنا. اور اس ڈیفالٹ کی طرف سے، گرڈ کے ہر صف 4 بائٹس کی ایک سے زیادہ ہونا ضروری ہے. اگر ہم ایک بٹ نقشہ تصویر میں نظر آتے ہیں، تو آپ ہر قدر میں بھرنے کر رہے ہیں. مثال کے طور پر، آپ ایک سرخ ہے، یہاں ایک سبز ہو سکتا ہے، یہاں ایک نیلے رنگ، لیکن آپ اس بات کا یقین کر لیں کہ تصویر چار بائٹس کی ایک سے زیادہ کے ساتھ میں بھری ہوئی ہے بنانے کے لئے ہے. تو اگر میں اپنے تین بلاکس وسیع تصویر چاہتے ہیں، تو میں ایک خالی قدر کو ہوگا گزشتہ ایک میں اسے چار میں سے ایک سے زیادہ بنانے کے لئے. تو پھر میں کچھ ہے جو ہم بھرتی بلا رہے ہیں میں شامل کریں گے. میں صرف یہ ہے کہ ایک ایکس کے ساتھ اس بات کی نشاندہی کرنے کے لئے جا رہا ہوں. اب کا کہنا ہے کہ ہم مثال کے طور پر ایک تصویر ہے جو 7 پکسلز طویل ہے چاہتے ہیں. ہم 1، 2، 3، 4، 5، 6، 7، اور اس کے سب رنگ کے ساتھ بھری ہوئی ہے. جس طرح سے ہے کہ بٹ نقشہ تصاویر کام یہ ہے کہ ہم ایک 8th کی ضرورت ہے. فی الحال ہم 1، 2، 3، 4، 5، 6، 7 ہے. ہم نے درست طریقے سے پڑھنے کے لئے بٹ نقشہ تصویر کے لئے 8 خالی جگہوں کی ضرورت ہے. تو پھر ہمیں کیا کرنا ہے صرف بھرتی کے تھوڑا سا میں شامل ہے اس بات کا یقین کر لیں کہ widths کے تمام وردی ہیں اور یہ کہ widths کے تمام 4 میں سے ایک سے زیادہ ہیں. اور اس طرح میں نے پہلے اشارہ، ایک ایکس یا squiggly لائن کے طور پر بھرتی، لیکن اصل بٹ نقشہ تصاویر میں بھرتی ایک شش اعشاری 0 کی طرف سے نشاندہی کی جاتی ہے. تو جو کہ ایک اکیلا کردار، 0 ہو جائے گی. ہاتھ میں آ سکتا ہے xxd حکم ہے. کیا بات ہے اصل میں آپ کو دکھاتا ہے، اچھا لگتا ہے کہ میں کیا سمائلی کے ساتھ پہلے کی طرح میں اصل میں جب باہر طباعت ہر رنگ پکسل کے لئے میں کیا جائے گا اور پھر یہ رنگ کوڈت، جب آپ چلاتے ہیں مندرجہ ذیل حکم کے ساتھ xxd تو اسے باہر اصل میں پرنٹ کیا رنگ ان پکسلز کے لئے ہیں. تمہیں کیا کرنا ہے یہاں پر یہ ہے کہ میں اس بات کی نشاندہی 54 کی طرح، کا کہنا ہے کہ میں 54th بائٹ میں شروع کرنے جا رہا ہوں اس سے پہلے وجہ سے، یاد رکھیں اگر ہم bitmaps کا نقشہ کرنے کے لئے واپس کر رہے ہیں، کہ اس طرح تمام ہیڈر معلومات اور چیزوں ہے. لیکن کیا ہم واقعی پرواہ اصل پکسلز رنگ اس بات کی نشاندہی کی ہے. تو 54، اس پرچم میں انہوں نے مزید کہا کی طرف سے، تو ہم رنگ اقدار کو دیکھنے کے لئے کرنے کے قابل ہیں. اور اس طرح پیچیدہ جھنڈوں اور چیزوں کے بارے میں فکر نہ کرو. مسئلہ سیٹ رپورٹ میں، آپ کو کس طرح xxd پکسلز ظاہر کرنے کے لئے استعمال کرنے کے لئے ہدایات پر پڑے گا. تو اگر آپ کو یہاں دیکھ کر، اس کی طرح ایک سبز خانے میں، اس چھوٹی سی بات کی طرح لگ رہا ہے. میں بنیادی طور پر کوئی نیلے رنگ، سبز رنگ کی ایک بہت، اور کوئی سرخ کہا کہ ہے 00ff00 رنگ کوڈت. تو وہ سبز مساوی ہے. جیسا کہ آپ کو یہاں دیکھ کر، ہم نے ایک سبز مستطیل دیکھتے ہیں. یہ سبز مستطیل صرف 3 پکسلز تک چوڑا ہے، تو پھر ہمیں کیا کرنا ہے اس بات کا یقین کر لیں کہ کہ تصویر 4 وسیع ایک سے زیادہ ہے بنانا ہے اضافی بھرتی میں شامل ہے. اور تو اس طرح سے آپ ان 0s یہاں دیکھ. یہ اصل میں آپ کے کا سائز تبدیل pset کا نتیجہ ہو جائے گا، بنیادی طور پر چھوٹے بٹ نقشہ تو لینے اور 4 کی طرف سے وسیع ہے. اور اس طرح ہم دیکھتے ہیں وہ یہ ہے کہ اصل میں یہ تصویر 12 پکسلز تک چوڑا ہے، لیکن 12 4 میں سے ایک سے زیادہ ہے، اور ہم اصل میں آخر میں کوئی 0s نظر نہیں ہے کیونکہ ہم کسی کو شامل کرنے کی ضرورت نہیں ہے کیونکہ یہ مکمل طور پر padded ہے. کوئی جگہ نہیں ہے. ٹھیک ہے. بھرتی کے بارے میں کوئی بھی سوال ہے؟ ٹھیک ہے. ڈاؤن لوڈ، اتارنا. جیسا کہ میں نے پہلے کہا، bitmaps بائٹس کی ایک ہی تسلسل ہے. اور اس طرح ہم نے بجائے بالکل بائٹ کی تعداد جن میں سے ٹریک رکھنے کے لئے کی ضرورت ہے ایک مخصوص عنصر کے مساوی ہو، اور ہم اصل میں ایک struct کہ کی نمائندگی کرنے کی ہے. تو ہم نے ایک RGBTRIPLE struct ہے. جب بھی آپ کو ایک RGB ٹرپل کی ایک مثال کے طور پر ہے، کیونکہ یہ ایک قسم struct کی وضاحت، تو آپ rgbtBlue متغیر تک رسائی حاصل کر سکتے ہیں، اسی طرح سبز اور سرخ متغیر، جس سے یہ ثابت کتنا نیلے، سبز اور سرخ، بالترتیب، تم سے ہے. تو اگر ہم 0، سبز FF سیٹ نیلے رنگ متغیر مجموعہ ہے جو زیادہ سے زیادہ قیمت ہے جو آپ کر سکتے ہیں ہے، اور پھر سرخ رنگ متغیر 0 قائم کرنے، تو اس سے خاص طور پر RGB ٹرپل کس رنگ کی نمائندگی کریں گے؟ >> [طالب علم] گرین. گرین. بالکل. یہ مفید جاننا ہو رہا ہے کہ جب بھی آپ کو ایک RGB ٹرپل کی ایک مثال کے طور پر ہے نیلے، سبز اور سرخ - - الگ الگ آپ کو رنگ کی رقم اصل تک رسائی حاصل کر سکتے ہیں. اب جب کہ ہم اس کی ساخت کے بارے میں بات کی ہے، BMP فائل پر ایک نظر لے. یہ آپ کے لئے بنایا structs ہیں. یہاں ہم ایک BITMAPFILEHEADER struct ہے. دلچسپی کے سائز ہے. بعد، ہم نے معلومات کی ہیڈر، جو ہمیں چند چیزیں جو دلچسپ ہیں ہیں ہے، یعنی لوڈ، چوڑائی اور اونچائی. ، جیسا کہ ہم بعد میں جائیں گے، جب آپ کو فائل میں پڑھا کیونکہ ہم نے کے لئے مقرر ایک ہی ہے یہ خود کار طریقے سے پڑھتا ہے. تو biSize صحیح بائٹس کو شامل کریں جو تصویر کا اصل سائز کے مطابق کریں گے. اور پھر یہاں، آخر میں، جیسا کہ ہم کے بارے میں بات کی ہے، ہم RGBTRIPLE typedef struct ہے. ہم ایک rgbtBlue، گرین، اور ریڈ اس کے ساتھ منسلک ہے. بہت اچھا ہے. ٹھیک ہے. اب جب کہ ہم bitmaps تھوڑا سا سمجھ سمجھ، کہ ہم نے ایک فائل میں ہیڈر ہے اور اس کے ساتھ اور پھر اس کے بعد منسلک معلومات ہیڈر، ہم دلچسپ چیزیں ہیں رنگوں کا، اور وہ لوگ رنگ RGBTRIPLE structs کی طرف سے نمائندگی کر رہے ہیں، اور ان کے نتیجے میں، تین نیلے، سبز اور سرخ سے وابستہ اقدار ہے. تو اب، ہم خیال کے بارے میں تھوڑا سا بازیافت کی طرح کر سکتے ہیں. معاف کیجئے گا. Whodunit کے بارے میں سوچو. جب ہم اپنے سراگ فائل ہے، تو جو ہم کرنا چاہتے ہیں اس میں پکسل کی طرف سے پکسل پڑھ اور اس کے بعد کسی نہ کسی طرح ان پکسلز کو تبدیل کریں تاکہ ہم اسے ایک پڑھنے کے قابل کی شکل میں پیداوار کر سکتے ہیں. تو اس کی پیداوار پر، ہم verdict.bmp فائل میں پکسل پکسل لکھنے جا رہے ہیں. وہ بہت کچھ کرنا کی طرح ہے. ہم اس بات کا احساس ہے. تو جو ہم نے کیا ہے یہ ہے کہ ہم اصل کے ساتھ آپ نے فراہم کی copy.c. copy.c کرتا ہے بٹ نقشہ فائل کی ایک عین مطابق نقل کرتا ہے اور پھر اس کے نتائج. تو یہ پہلے سے ہی آپ کے لئے فائل کو کھولتا ہے، پکسل پکسل میں پڑھتا ہے، اور پھر یہ ایک آؤٹ پٹ فائل میں میں لکھتے ہیں. چلو، اس پر ایک نظر لے. یہ مناسب استعمال کو یقینی بنانے ہے، FILENAMES یہاں ہو رہا ہے. اس کا کیا ہے، یہ ان پٹ فائل کا تعین کرتا ہے جو ہم infile میں میں منظور ہے یہاں، جو ہماری دوسری دلیل کمانڈ لائن ہے. اس بات کا یقین کر لیں کہ ہم فائل کھول سکتے ہیں بنانے کے لئے چیک کرتا ہے. اس بات کا یقین کر لیں کہ ہم نے ایک نیا outfile یہاں کر سکتے ہیں بنانے کے لئے چیک کرتا ہے. تو پھر اس سے کیا یہ یہاں ہے، صرف بنیادی طور پر شروع سے بٹ نقشہ فائل میں پڑھنے شروع ہوتا ہے. آغاز، جیسا کہ ہم جانتے ہیں، BITMAPFILEHEADER پر مشتمل ہے، اور اس بٹس کے ان انداز BITMAPFILEHEADER میں براہ راست بھر جائے گا. تو ہم یہاں کہ BITMAPFILEHEADER BF کہہ رہا ہے - کہ ہماری قسم BITMAPFILEHEADER کے نئے متغیر ہے - جو ہم BF کے اندر ڈال پوائنٹر میں سے جو ہم نے پڑھا جا رہے ہیں، ہمارے infile ہے. ہم کس طرح زیادہ سے زیادہ پڑھ سکتا ہوں؟ ہم کتنے بائٹس ہم مکمل BITMAPFILEHEADER پر مشتمل کرنے کی ضرورت ہے پڑھا ہے. اسی طرح ہے کہ معلومات کے ہیڈر کے لئے ہے جو ہم کرتے ہیں. تو ہم infile میں ہماری فائل کے ساتھ جاری کر رہے ہیں، اور ہم نے ان کی بٹس اور بائٹس پڑھ رہے ہیں، اور ہم نے ان میں plugging کر رہے ہیں براہ راست متغیر ہے کہ ہم کر رہے ہیں ان کی مثالوں میں. یہاں ہم صرف اس بات کا یقین کر لیں کہ کہ بٹ نقشہ ایک بٹ نقشہ ہے بنا رہے ہیں. اب ہم ایک outfile ہے، ٹھیک ہے؟ تو کے طور پر یہ کھڑا ہے جب ہم نے اسے تخلیق، یہ بنیادی طور پر خالی ہے. تو ہم بنیادی طور پر شروع سے ایک نئی بٹ نقشہ بنانے کی ہے. ہم کیا کرتے ہیں ہے ہم اس بات کا یقین کر لیں کہ ہم فائل ہیڈر میں کاپی کرنے کے بنانے کے لئے ہے اور صرف infile کی طرح کی معلومات کے ہیڈر ہے. ہم کیا کرتے ہیں ہے ہم لکھ کریں - اور یاد رکھیں کہ BF متغیر ہے قسم BITMAPFILEHEADER، تو ہم کیا کرتے ہیں ہے، ہم صرف اس مواد کا استعمال outfile میں لکھنے کے لئے ہے. یہاں یاد ہے، ہم بھرتی کے بارے میں بات کی تھی، یہ ضروری ہے کہ کس طرح اس بات کا یقین کر لیں کہ کہ پکسلز کہ ہم وہ رقم ہے جو 4 میں سے ایک سے زیادہ ہے بنانے کے لئے. یہ ایک بہت مفید حساب آپ کتنا بھرتی ہے فارمولہ ہے آپ کی فائل کی چوڑائی کی دی. میں لوگ آپ کو یاد ہے کہ ہم copy.c میں بھرتی کے حساب کے لئے ایک فارمولا ہے کرنا چاہتے ہیں. ٹھیک ہے؟ تو سب کو وہ یاد ہے. بہت اچھا ہے. تو پھر کیا copy.c ہے اگلے ہے یہ ختم scanlines کے تمام iterates. پہلے یہ قطار کے ذریعے جاتا ہے اور پھر ہر ٹرپل ہے کہ وہ پڑھتا ذخیرہ اور پھر یہ outfile میں لکھتے ہیں. تو پھر ہم یہاں ایک وقت میں صرف ایک RGB ٹرپل پڑھ رہے ہو اور پھر outfile میں کہ اسی ٹرپل لگا. مشکل بات یہ ہے کہ بھرتی ایک RGB ٹرپل نہیں ہے، اور ہم صرف RGB triples کہ بھرتی رقم نہیں پڑھ سکتے ہیں. ہمیں کیا کرنا ہے اصل میں صرف ہماری فائل پوزیشن اشارہ ہے منتقل، ہمارے کرسر منتقل، تاکہ ہم تمام بھرتی کے دوران اگلی قطار میں ہیں پر کی طرح ہے. اور پھر اس کا کیا ہے کاپی آپ کو دکھاتا ہے کہ آپ کس طرح بھرتی شامل کرنا چاہتے ہیں کر سکتے ہیں. تو ہم کا حساب ہم کتنی بھرتی کی ضرورت ہے، تو اس کا مطلب ہے کہ ہم 0s کی بھرتی کی تعداد کی ضرورت ہے. اس کا کیا لوپ ہے جو ہمارے outfile میں 0s کی بھرتی نمبر کرتا ہے کے لئے ہے. اور پھر آخر میں، آپ دونوں فائلوں کو بند کریں. آپ کے ساتھ کے طور پر infile outfile بند کرو. تو اس copy.c کیسے کام کرتا ہے، اور یہ کہ بہت مفید ہو جا رہا ہے. صرف اصل میں براہ راست کاپی اور چسپاں کر کے بجائے یا صرف یہ دیکھ، اور جو کچھ بھی تم چاہتے ہو میں ٹائپ آپ کو ٹرمینل میں یہ کمانڈ پھانسی صرف یہ چاہتا ہوں ہو سکتا ہے، CP copy.c whodunit.c، جس سے ایک نئی فائل بنانے کے whodunit.c، ہے کہ عین مطابق اسی مواد کے طور پر نقل کرتا ہے پر مشتمل ہے. تو پھر ہم کیا کر سکتے ہیں کا استعمال کرتے ہوئے ہے کہ ایک فریم ورک کے طور پر جس میں ترمیم کی تعمیر ہے ہماری whodunit فائل کے لئے. یہ ہمارے ڈاس نے Whodunit کے لئے کرنا چاہتے ہیں، لیکن copy.c کیا کرتا اصل میں ہمارے لئے ان میں سے زیادہ تر کا خیال ہے. تو ہم سب اگلے کرنے کی ضرورت ہے پکسلز ضرورت کے مطابق تبدیل اصل میں فائل پڑھنے کے قابل ہے. ہے کہ، ایک دی ٹرپل پکسل کے لئے قسم RGBTRIPLE کی ایک مخصوص ویرئیےبل کے لئے اتنا یاد آپ کو نیلے، سبز اور سرخ اقدار تک رسائی حاصل کر سکتے ہیں. یہ ہاتھ میں آنے والا ہے، اور اگر آپ ان تک رسائی حاصل کر سکتے ہیں کیونکہ اس کا مطلب یہ ہے کہ آپ ان کو یہ بھی چیک کر سکتے ہیں، اور اس کا مطلب ہے کہ آپ انہیں بھی تبدیل کر سکتے ہیں. ، تو جب ہم ہمارے لال میگنفائنگ گلاس کی مثال کے طور پر واپس آ گیا بنیادی طور پر، یہ ہمارے لئے فلٹر کا ایک طرح کے طور پر کام کر رہا تھا. تو جو ہم کرنا چاہتے ہیں ہے ہم تمام triples کہ اندر آ رہے ہیں. فلٹر کرنا چاہتے ہیں ایسا کرنے کے لئے کئی مختلف طریقے ہیں. بنیادی طور پر آپ کے پاس، جو کچھ بھی قسم کی فلٹر کا آپ چاہتے ہیں کر سکتے ہیں. شاید آپ کو تمام سرخ پکسلز کو تبدیل کرنا چاہتے ہیں یا ہو سکتا ہے کہ آپ ایک مختلف رنگ ایک مختلف رنگ کے پکسل کو تبدیل کرنا چاہتے ہیں. یہ آپ پر منحصر ہے. یاد رکھیں کہ آپ چیک کرنے کے لیے کر سکتے ہیں کیا رنگ پکسل ہے اور پھر آپ اسے تبدیل بھی جیسا کہ آپ کے ذریعے جا رہے ہیں کر سکتے ہیں. ٹھیک ہے. تو اس Whodunit ہے. ایک بار جب آپ Whodunit چلاتے ہیں، آپ جانتے ہیں، جو جرم کے ارتکاب کا مجرم تھا گے. اب ہم نیا سائز کریں پر جانے کے لئے جا رہے ہیں. ہم اب بھی bitmaps کے ساتھ نمٹنے جا رہے ہیں. ہم کیا کر رہے ہیں کی جا رہی ہے اور ہم نے ایک ان پٹ بٹ نقشہ جا رہے ہیں اور اس کے بعد ہم نے ایک بڑی تعداد میں اور پاس تو ایک outfile بٹ نقشہ حاصل کرنے جا رہے ہیں کہ بنیادی طور پر جہاں ہمارے (ن) کی طرف سے چھوٹا infile ہے. کہہ دو کہ میری فائل میں صرف ایک پکسل بڑی تھی. پھر اگر میری ن 3 3، پیمائی تھا، تو میں بار پکسل ن نمبر دوبارہ کریں گے، تو 3 بار، اور پھر بھی اس کو نیچے 3 بار کرنا. تو تم دیکھو، میں اسے پیمائی عمودی طور پر کے طور پر کے طور پر اچھی طرح سے کر رہا ہوں افقی طور پر. اور پھر یہاں ایک مثال ہے. اگر آپ کے پاس (ن) = 2 ہے، آپ کو دیکھتے ہیں کہ پہلی نیلے پکسل دو بار افقی طور پر کے طور پر دو بار عمودی طور پر اچھی طرح سے. اور پھر اس پر جاری ہے، اور تم دونوں کی طرف سے ایک آپ کی اصل تصویر کے براہ راست پیمائی ہے. تو پھر اگر ہم اس کے لئے pseudocode تفصیل سے تھے، ہم فائل کو کھولنے کے لئے چاہتے ہیں. اور پھر یہ جان کر کہ اگر ہم یہاں واپس جانا ہم دیکھتے ہیں کہ outfile کے لئے چوڑائی infile کے لئے چوڑائی سے مختلف ہونے جا رہا ہے. اس کا کیا مطلب ہے؟ اس کا مطلب یہ ہے کہ کہ ہمارے ہیڈر کی معلومات کو تبدیل کرنے جا رہا ہے. اور اس طرح ہمیں کیا کرنا چاہیں گے ہے ہیڈر کی معلومات کی تازہ کاری، ، يہ علم ميں رہے کہ جب ہم نے فائلوں میں پڑھا اگر آپ copy.c فریم ورک پر کام کر رہے ہیں ہم نے پہلے سے ہی ایک متغیر کی طرف اشارہ کرتا ہے کہ کیا حجم ہے اور اس طرح چیزیں ہے. تو ایک بار ہے کہ تم کیا کرنا چاہتے ہو سکتا ہے ان مخصوص متغیر تبدیل ہے. یاد رکھیں، اگر آپ ایک struct ہے، کہ کس طرح آپ اس کے اندر اندر متغیر تک رسائی حاصل کریں. آپ کو نقطہ آپریٹر کا استعمال کرتے ہیں، ہے نا؟ تو اس کا استعمال کرتے ہوئے، آپ کو معلوم ہے کہ آپ کو ہیڈر کی معلومات کو تبدیل کرنے کی ضرورت ہو گی. تو یہاں صرف اصل عناصر ہیں جو آپ کی فائل میں تبدیل کرنے جا رہے ہیں کی ایک فہرست ہے. فائل کے سائز کو تبدیل کرنے، تصویر، کے ساتھ کے طور پر کی چوڑائی اور اونچائی کی جا رہی ہے. تو پھر bitmaps کا نقشہ واپس جا، میں دیکھو، چاہے وہ فائل ہیڈر یا معلومات ہیڈر ہے کہ وہ معلومات پر مشتمل ہے ہے اور پھر تبدیل ضرورت کے مطابق. ایک بار پھر، CP copy.c resize.c کا کہنا ہے کہ. اس کا مطلب یہ ہے کہ resize.c اب ہر وہ چیز جو کاپی کے اندر موجود ہے پر مشتمل ہے کیونکہ کاپی ہمیں پکسل کی طرف سے ہر scanline پکسل میں پڑھنے کا ایک طریقہ فراہم کرتا ہے. اب علاوہ، بجائے صرف اقدار کو تبدیل کرنے جیسے ہم Whodunit میں کیا تھا، جو ہم کرنا چاہتے ہیں ہے ہم ایک سے زیادہ پکسلز میں لکھنے کے لئے چاہتے ہیں جب تک کے طور پر ہمارے ن 1 سے بڑا ہے. تو کیا جو ہم کرنا چاہتے ہیں ہم اس کے (ن) کی طرف سے بڑھاتے افقی طور پر کرنا چاہتے ہیں، کے طور پر (ن) کی طرف سے کے طور پر یہ عمودی بڑھاتے. ہم یہ کیسے کر سکتا ہے؟ کا کہنا ہے کہ آپ کا (ن) 2 ہے اور آپ کو یہ دیا infile ہے. آپ کا کرسر پہلے ایک میں شروع کرنے جا رہا ہے، اور جو کچھ تم کرنا چاہتے ہو، اگر (ن) 2 ہے، آپ کو ان میں سے 2 میں پرنٹ کرنے کے لئے چاہتے ہیں. تو آپ کو ان میں سے 2 میں پرنٹ. اس کے بعد آپ کا کرسر اگلے پکسل، جو سرخ ایک ہے پر منتقل کرنے کے لئے کی جا رہی ہے، اور اس نے ان لال والوں میں 2 پر پرنٹ کرنے کے لئے، جو اس سے پہلے ہو چکا ہے پر یہ appending جا رہا ہے. پھر کرسر اگلے پکسل منتقل اور ان میں سے 2 میں اپنی طرف متوجہ کرے گا. اگر آپ copy.c فریم ورک، اس کا کیا واپس یہاں دیکھو ہے یہ ایک RGB ٹرپل نامی ایک نیا ٹرپل متغیر کی ایک نئی مثال کے طور پر پیدا. اور یہاں جب وہ اس میں لکھا ہے، infile 1 RGBTRIPLE سے پڑھتا اور یہ اس ٹرپل متغیر کی اندر ذخیرہ. تو آپ واقعی میں اس مخصوص پکسل کی نمائندگی متغیر ہے. پھر جب آپ لکھتے ہیں، تم کیا کرنا چاہتے ہو سکتا ہے میں لوپ کے لئے fwrite بیان encase ہے جو کئی بار کے طور پر ضرورت کے طور پر اپنے outfile میں لکھتے ہیں. یہ کافی آسان ہے. صرف بنیادی طور پر تحریری عمل N اسے افقی طور پر کی سطح کے لئے اوقات کی تعداد دہرائیں. لیکن اس وقت ہمیں یاد ہے کہ ہمارے بھرتی تبدیل کرنے جا رہا ہے. ماضی کہتے ہیں، ہم 3 کی لمبائی کی کچھ تھا. اس کے بعد ہم کتنا بھرتی میں شامل کریں گے؟ صرف ایک اور 4 میں سے ایک سے زیادہ بنانے کے لئے. لیکن اس کا کہنا ہے کہ ہم ن = 2 کی طرف سے اس مخصوص تصویر پیمائی کر رہے ہیں. تو پھر ہم آخر میں کتنے نیلے رنگ کے پکسلز ہوگا؟ ہم 6 ہوگا. 1، 2، 3، 4، 5، 6. ٹھیک ہے. 6 4 میں سے ایک سے زیادہ نہیں ہے. 4 کے قریبی ایک سے زیادہ کیا ہے؟ یہ 8 ہونے جا رہا ہے. تو ہم اصل میں بھرتی کے 2 حروف کو وہاں جا رہے ہیں. کیا کسی کو یاد رکھیں اگر ہم بھرتی کا حساب کرنے کے فارمولے ہے اور یہ کہ کہاں ہو سکتا ہے؟ [اشراوی طالب علم کے جواب] >> جی ہاں copy.c.، ٹھیک ہے. copy.c میں فارمولہ حساب آپ کتنا بھرتی ہے بٹ نقشہ تصویر کے ایک خاص چوڑائی دیا. تو پھر چل رہا ہے مفید ہو جب آپ کی ایک مخصوص مقدار میں بھرتی میں شامل کرنے کی ضرورت اصل میں باہر اعداد و شمار کتنا بھرتی آپ کو شامل کرنے کی ضرورت ہے. لیکن ایک نوٹ، اگرچہ یہ ہے کہ آپ کو اس بات کا یقین کر لیں کہ آپ صحیح سائز کا استعمال کرتے ہوئے کر رہے ہیں کرنا چاہتے ہیں. ہوشیار رہو کیونکہ آپ بنیادی طور پر دو بٹ ​​نقشہ تصاویر کے ساتھ نمٹنے جا رہے ہیں. آپ کو اس بات کا یقین کر لیں کہ آپ صحیح استعمال کر رہے ہیں کرنا چاہتے ہیں. جب آپ outfile کے لئے بھرتی حساب کر رہے ہیں، آپ outfile کی چوڑائی کو استعمال کرنے کے لئے چاہتے ہیں اور پچھلے ایک کی چوڑائی نہیں. بہت اچھا ہے. اس طرح کی ایک پوری بٹ نقشہ نقش افقی طور پر ھیںچ کی دیکھ بھال کرتا ہے. لیکن اصل میں جو ہم کرنا چاہتے ہیں اس کے ساتھ عمودی بڑھاتے. یہ تھوڑا سا trickier کیونکہ جب تم میں سے کسی ایک کو ہم ایک قطار کاپی ختم کر دیا ہے جا رہا ہے اور اس صف لکھنے، ہمارے کرسر کے آخر میں ہونے جا رہا ہے. تو اگر ہم بار دوبارہ پڑھیں، تو یہ صرف اگلی لائن میں پڑھنا ہو رہا ہے. تو جو ہم کرنا چاہتے ہیں کی قسم ان قطاروں کو دوبارہ کاپی کا کوئی راستہ تلاش یا اس صف لینے اور پھر اسے دوبارہ دوبارہ لکھ قسم. جیسا کہ میں نے قسم alluded، ایسا کرنے کے لئے کئی مختلف طریقے ہیں. آپ کیا کر سکتے ہیں ہے جیسا کہ آپ کے ذریعے جا رہے ہیں اور خاص scanline کے ذریعے پڑھنے اور ضرورت کے مطابق اسے تبدیل کرنے پر، تو سٹور کی طرح ایک صف میں ان پکسلز کے سب. پھر اس کے بعد تم پر میں جانتا ہوں کہ آپ کو اس صف پر دوبارہ پرنٹ کی ضرورت ہو گی، اور اسی طرح آپ کو اس صف ایسا استعمال کر سکتے ہیں. ایسا کرنے کا ایک اور طریقہ ہے تم نیچے ایک صف کاپی کر سکتے، سمجھنے کی کوشش کرتا ہے کہ آپ پھر سے کاپی کرنے کے لئے کی ضرورت ہے، تو اصل میں آپ کا کرسر کو منتقل کریں، اور یہ کہ طریقہ fseek کا استعمال کرتے ہوئے کیا جا رہا ہے. آپ منتقل آپ کا کرسر پورے راستے واپس اور پھر سکتا ہے کاپی کے عمل کو دوبارہ. لہذا اگر ہمارے پیمائی نمبر (ن) ہے، تو پھر کس طرح کئی بار ہمیں واپس جانا ہوگا اور ایک لائن کو دوبارہ سے لکھنا ہے؟ >> [طالب علم] N - 1. >> جی ہاں، کامل. N - 1. ہم نے یہ کیا ایک بار پہلے سے ہی ہے، تو ہم واپس عمل کا دوبارہ کرنا چاہیں گے N - 1 بار رقم. ٹھیک ہے. تو وہاں آپ کو آپ کے بازسائز تقریب ہے. اب ہم ایک بہت مزہ حصہ، میرا پسندیدہ pset ہے، جو بازیافت حاصل کرنے کے لئے کر سکتے ہیں. bitmaps کے بجائے، اس وقت ہم JPEGs کے ساتھ کام کر رہے ہو. دراصل ہم کو صرف JPEGs کی فائل نہیں کر رہے ہیں، ہم بنیادی طور پر خام میموری کارڈ فارمیٹ دے رہے ہیں. اور اس طرح یہ شروع میں معلومات اور ردی کی ٹوکری کی اقدار کے تھوڑا سا پر مشتمل ہوتی ہے، اور پھر یہ شروع ہوتا ہے اور یہ JPEG فائلوں کا ایک گروپ ہے. تاہم، ہم نے ایک کارڈ کے حوالے کیا ہے جہاں ہم تصاویر کو خارج کر دیا ہے رہے ہیں؛ بنیادی طور پر، ہم بھول گئے ہو جہاں تصاویر کارڈ کے اندر اندر واقع ہیں ہے. تو میں بازیافت ہمارا کام اس کارڈ فارمیٹ کے ذریعے جانا ہے اور وہ تصویریں دوبارہ تلاش کریں. خوش قسمتی، JPEG فائلوں اور کارڈ فائل کی ساخت تھوڑا مددگار ہے. یہ یقینی طور پر تھوڑا سا trickier ہو سکتا تھا اگر یہ اس مخصوص شکل میں نہیں تھے. ہر JPEG فائل اصل میں دو ممکنہ انداز، مندرجہ بالا کے ساتھ شروع ہوتا ہے. بنیادی طور پر، جب بھی آپ کو ایک نیا JPEG فائل ہے، یہ یا تو ترتیب ffd8 ffe0 یا دوسرے، ffe1 ffd8 کے ساتھ شروع ہوتا ہے. ایک اور مفید جاننے کی بات یہ ہے کہ JPEGs contiguously جمع کیے جاتے ہیں. تو جب بھی ایک JPEG فائل ختم ہو جاتا ہے، دوسرے ایک شروع ہوتا ہے. تو وہاں اقدار کے درمیان کسی بھی قسم کی نہیں ہے. ایک بار جب آپ نے ایک JPEG کے آغاز کو مارا، اگر آپ کے پاس پہلے سے ہی کیا گیا ہے JPEG پڑھنے، آپ کو معلوم ہے کہ آپ نے پچھلے اور اگلے ایک کے آغاز کے اختتام متاثر کیا ہے. یہ دیکھ طرح کرنے کے لئے، میں نے ایک یوجنابدق کیا. JPEGs کے بارے میں ایک اور بات یہ ہے کہ ہم ایک وقت میں 512 بائٹس کے انداز میں انہیں پڑھ سکتے ہیں، اسی طرح کارڈ کے آغاز کے ساتھ. ہم نے ہر ایک بائٹ کی جانچ پڑتال اس لیے کہ دودھ کی جائے گی کی ضرورت نہیں ہے. تو بجائے، جو ہم کر سکتے ہیں اصل میں صرف ایک وقت میں 512 بائٹس میں پڑھنے اور اس کے بعد، ان چھوٹے تھوڑا سلائسین میں ان لوگوں کے درمیان میں کی جانچ پڑتال کرنے کے بجائے ہم 512 بائٹس کے آغاز چیک کرنے کے لیے کر سکتے ہیں. بنیادی طور پر، اس تصویر میں، جو تم دیکھتے ہو کارڈ کے شروع میں سب سے پہلے ہے، آپ کے پاس وہ اقدار ہیں جو واقعی اصل JPEGs خود متعلقہ نہیں ہیں. لیکن اس وقت میں نے ایک JPEG کے لئے دو شروع انداز میں سے ایک کی نشاندہی کرنے کا ایک ستارہ ہے. تو جب بھی آپ کو ایک ستارہ کو دیکھتے ہیں، تو آپ کو معلوم ہے کہ آپ کو ایک JPEG فائل ہے. اور پھر ہر JPEG فائل 512 بائٹس میں سے کچھ ایک سے زیادہ بننے جا رہا ہے لیکن اس کے ساتھ ایک سے زیادہ ضروری نہیں. جس طرح سے ہے کہ آپ کو معلوم ہے کہ آپ کو کسی دوسرے JPEG متاثر ہے ہے اگر آپ کو ایک اور ستارہ مارا، بائٹس کی ایک اور شروع ترتیب. تو کیا آپ یہاں ہے آپ کو سرخ JPEG فائل جاری ہے جب تک کہ آپ ایک ستارہ کو مارا، جس میں ایک نیا رنگ کی طرف سے نشاندہی کی جاتی ہے. تم اور پھر آپ کو ایک اور ستارہ مارا جاری رکھیں، آپ کو کسی دوسرے JPEG مارا، تم نے آخر تک تمام طرح جاری ہے. تم سے آخری تصویر میں ہو، ایک گلابی. آپ آخر تک جاتے ہیں جب تک آپ فائل کردار کے آخر مارا. یہ بہت مفید ہو جا رہا ہے. چند اہم takeaways یہاں: کارڈ فائل JPEG کے ساتھ نہیں شروع ہوتا ہے، لیکن ایک بار JPEG شروع ہوتا ہے، JPEGs کے تمام پارٹی کی طرف سے ایک دوسرے کی طرف جمع کیے جاتے ہیں. بازیافت کے لئے کچھ pseudocode. سب سے پہلے، ہم ہماری کارڈ کی فائل کو کھولنے کے لئے جا رہے ہیں، اور یہ کہ ہماری فائل I / O افعال کا استعمال کرتے ہوئے کیا جا رہا ہے. ہم مندرجہ ذیل عمل جب تک ہم فائل کے آخر تک پہنچ چکے دہرانے جا رہے ہیں. ہم ایک وقت میں 512 بائٹس پڑھنے جا رہے ہیں. اور کیا میں یہاں کہا ہے ہم یہ بفر میں ذخیرہ کرنے جا رہے ہیں، بنیادی طور پر ان 512 بائٹس پر منعقد جب تک ہم جانتے ہیں کہ بالکل وہی جو ان کے ساتھ کیا کرنا ہے. تو کیا جو ہم کرنا چاہتے ہیں ہم چیک کرنے کے لیے ہے کہ ہم نے ایک ستارہ یا نہ مارو ہے کرنا چاہتے ہیں. ، اگر ہم ایک ستارہ کو مارا ہے، اگر ہم شروع انداز میں سے ایک مارا ہے تو ہم جانتے ہیں کہ ہم نے ایک نیا JPEG فائل متاثر کیا ہے. ہم کیا کرنا چاہتے ہیں کریں گے ہم ہمارے pset4 ڈائریکٹری میں ایک نئی فائل بنانے کے لئے چاہتے ہیں کے لئے جا رہے ہیں وہ فائل کرنا جاری ہے. بلکہ، اگر ہم نے پہلے سے ہی کرنے سے پہلے ایک JPEG ہے بنا دیا، تو ہم نے اس فائل کو ختم کرنے کے لئے اور pset4 فولڈر میں دھکا کرنا چاہتے ہیں، ہم کہاں ہے وہ فائل محفوظ کریں گے، اگر ہم وضاحت نہیں ہے کہ ہم اس JPEG فائل کو ختم کر دیا ہے، کیونکہ تو ہم نے ایک indeterminate رقم بنیادی طور پر پڑے گا. JPEGs کبھی نہیں ختم ہو جائے گی. تو ہم اس بات کا یقین کر لیں کہ جب ہم ایک JPEG فائل میں پڑھ رہے ہیں اور کہ لکھنے بنانے کے لئے چاہتے ہیں، ہم خاص طور پر اگلے ایک کو کھولنے کے لئے کہ بند کرنا چاہتے ہیں. ہم نے کئی چیزوں چیک کرنے کے لیے کرنا چاہتے ہیں کریں گے. ہم چیک کرنے کے لیے چاہتے ہیں کہ ہم اپنے بفر کے ساتھ ایک نئی JPEG کے آغاز میں ہو اور اگر ہم پہلے سے ہی ایک JPEG سے پہلے مل گیا ہے اس لیے کہ وہ اپنے عمل کو تھوڑا سا بدل جائے گی. تو پھر اس کے بعد آپ کو تمام طرح کے ذریعے جاؤ اور تم نے فائل کے آخر مارا، تو کیا آپ کرنا چاہیں گے آپ کو تمام فائلیں اس وقت کھلی رہتی ہے کو بند کرنا چاہتے ہیں کریں گے. یہ آخری JPEG فائل ہے جو آپ نے شاید ہو جائے گا، کارڈ فائل کے طور پر کہ آپ کو ہے سے نمٹنے کے. آخری رکاوٹ ہے کہ ہم سے نمٹنے کے لئے کی ضرورت ہے ہے ہے کہ اصل میں ایک JPEG فائل کو بنانے کے لئے اور کس طرح اصل فولڈر میں دھکا. pset کی ضرورت ہے کہ ہر JPEG کہ آپ محسوس مندرجہ ذیل کی شکل میں، آپ سے نمبر کہاں ہے فوٹو. نمبر، یہاں تک کہ اگر یہ 0 ہے، ہم اسے 000.jpg کہتے ہیں. آپ کو اپنے پروگرام میں جب بھی ایک JPEG تلاش آپ کو یہ حکم ہے کہ یہ ملا ہے میں NAME چاہتے ہیں جا رہے ہیں. اس کا کیا مطلب ہے؟ ہم قسم کے کرنے کی ضرورت ہے کتنے ہم نے محسوس کیا ہے کا ٹریک رکھنے کے اور ہر JPEG کی تعداد کیا ہونا چاہئے. یہاں ہم sprintf تقریب کے فائدہ اٹھانے کے لئے جا رہے ہیں. اسی طرح کے printf، جس سے ٹرمینل میں پرنٹ قسم ایک قدر، sprintf فولڈر میں فائل پرنٹ. اور تو کیا ایسا اگر میں sprintf عنوان، تھا، اور پھر وہاں سٹرنگ، اسے باہر 2.jpg پرنٹ گی. یہ سمجھتے ہوئے کہ میں نے اپنی فائلوں کو درست طریقے سے بند کر دیا ہے، جو فائل ہے کہ میں گیا تھا لکھنے پر مشتمل گے. لیکن ایک بات یہ ہے کہ کوڈ ہے کہ میں یہاں ہے ہے بہت کیا pset کی ضرورت ہے مکمل نہیں ہے. pset کی ضرورت ہے کہ دوسرے JPEG فائل بجائے صرف 2 002 کا نام دیا جائے کیا جانا چاہئے. تو جب آپ کا نام پرنٹ، تو شاید آپ پلیس ہولڈر تھوڑا تبدیل کرنا چاہتے ہیں کر سکتے ہیں. کسی کو یاد ہے کہ ہم کس طرح اضافی خالی جگہوں کے لئے کی اجازت دیتے ہیں جب ہم کچھ پرنٹ؟ جی ہاں. >> [طالب علم] آپ فیصد کی علامت اور 2 کے درمیان 3 ایک رکھ دیا. >> جی ہاں، کامل. آپ کو اس کیس میں ایک 3 ڈال کیونکہ ہم نے 3 کے لئے جگہ کرنا چاہتے ہیں کریں گے. ٪ 3D آپ کو شاید کے بجائے 002.jpg 2 دے گی. پہلی دلیل sprintf تقریب میں اصل میں ایک چار صف ہے، جو ہم پہلے ڈور کے طور پر جانتے تھے. وہ، ایک عارضی ذخیرہ کی طرح کی قسم، کے نتیجے میں سٹرنگ محفوظ ہیں. تم سچ میں نہیں ہو گا اس کے ساتھ نمٹنے کے، لیکن آپ اس کو شامل کرنے کے لئے کی ضرورت ہے. ، یہ جانتے ہوئے کہ ہر فائل کے نام نمبر، جس میں تین حروف لیتا ہے اور پھر فوٹو، اس صف کب تک. ہونا چاہئے؟ ایک نمبر پھینک دیں. عنوان میں نام میں کتنے حروف ہیں؟ تو 3 hashtags، مدت، فوٹو ہے. >> [طالب علم] 7. 7. >> نہیں. ہم 8 چاہتے کیونکہ ہم شہوت انگیز null ٹرمنیٹر کے لئے کے طور پر اجازت دینا چاہتے ہیں کر رہے ہیں. آخر میں، صرف عمل ہے جو آپ کے لئے بازیافت کر کریں گے اپنی طرف متوجہ کرنے کے لئے، کیا آپ کچھ ابتدا کی معلومات ہے. آپ جاری رکھیں جب تک کہ آپ ایک JPEG فائل کے آغاز ملے، اور یہ کہ کسی بھی دو شروع انداز میں سے ایک ہو سکتا ہے. آپ پڑھ رکھو. ہر یہاں سلیش 512 بائٹس کی نمائندگی کرتا ہے. آپ کو پڑھنے پر رکھنے کے لئے، جب تک آپ کو ایک دوسرا شروع ترتیب کا سامنا پڑھنے رکھنا. ایک بار جب آپ یہ ہے کہ، آپ کو موجودہ JPEG ختم - اس معاملے میں، یہ سرخ ایک ہے، تو تم اس کو ختم کرنے کے لئے چاہتے ہیں. تم کہ اپنے pset4 فولڈر میں sprintf نام کرنا چاہتے ہیں، تو آپ کو ایک نیا JPEG اور کھولنے کی تو پڑھنے پر رکھنا چاہتے ہیں جب تک کہ آپ اگلے سامنا. پڑھنے پر رکھیں، پڑھنے پر رکھنا، اور پھر آخر میں، آخر میں، آپ کو فائل کے آخر تک پہنچنے کے لئے جا رہے ہیں، اور تم آخری JPEG بند کرنا چاہتے ہیں کہ آپ کے ساتھ کام کر رہے تھے گے، sprintf کہ اپنے pset4 فولڈر میں تصویروں کے تمام ہے کہ آپ نے ملا کیا ہے اور اس کے بعد نظر آئے. وہ تصویریں اصل CS50 عملے کی تصاویر ہیں، تو یہ وہ جگہ ہے جہاں pset بونس مذاق حصہ میں آتا ہے یہ ہے کہ آپ کو آپ کے حصے میں مقابلہ تصاویر میں TFs تلاش کر رہے ہیں ان کے ساتھ تصاویر لے ثابت اور یہ کہ آپ pset کیا ہے اور آپ دیکھ جس میں عملے کے ارکان کے تصویروں میں ہیں کر سکتے ہیں. تو آپ عملے کے ساتھ تصاویر لے لو. کبھی کبھی آپ کو ان کا پیچھا کرنا پڑے گا. شاید ان میں سے کچھ تم سے دور چلانے کی کوشش کریں گے. آپ ان کے ساتھ تصاویر لے لو. یہ جاری ہے. اس کی وجہ سے نہیں ہے جب pset کی وجہ سے ہے. رپورٹ میں ڈیڈ لائن کا اعلان کیا جائے گا. آپ کے سیکشن کے ساتھ مل کر اس کے بعد، جو بھی سیکشن میں سب سے زیادہ تصویریں لگتا ہے سب سے زیادہ عملے کے ارکان کے ساتھ ایک بہت خوفناک انعام حاصل کریں گے. یہ حاصل کرنے کے لئے حوصلہ افزائی کی ہے آپ pset4 جتنی جلد ممکن ہو ختم کیونکہ تو آپ کے کاروبار کے لئے حاصل کر سکتے ہیں تمام مختلف CS50 عملے کے ارکان کے نیچے شکار ہے. یہ لازمی نہیں ہے، اگرچہ، تو ایک بار جب آپ تصاویر حاصل کریں، تو آپ pset4 کے ساتھ ختم کر رہے ہیں. اور میں 4 Walkthrough کے ساتھ ختم کر رہا ہوں، تو آپ کو آنے کے لئے شکریہ. عدالتی کے ساتھ گڈ لک. [تعریف] [CS50.TV]