[موسیقی بجانا] ZAMYLA چان: چلو دھچکا نیا سائز کے ساتھ چیزوں کو. نیا سائز میں، صارف کے ذریعے، میں گزر جائے گا کمانڈ لائن، ایک بٹ نقشہ تصویر ہے وہ آپ کو ایک بڑی تعداد کی طرف سے بڑے پیمانے پر کرنے کے لئے چاہتے انہوں نے یہ بھی، میں منتقل ہے کہ کمانڈ لائن میں. ہم اس کو کس طرح کرتے ہیں؟ ٹھیک ہے، پہلی چیزیں، چلو اقدامات میں اس کو توڑنے کے. آپ infile کھولنے کے لئے چاہتے ہیں کے لئے جا رہے ہیں وہ تمہیں دینے کے، کے طور پر بھی ہے کہ تخلیق اور outfile کھولیں آپ کو ڈال کرنے کے لئے جا رہے ہیں اندر تبدیل تصویر اس کے بعد، آپ کو نیا سائز، اور کر رہے ہیں یہ ایک بٹ نقشہ ہے کیونکہ، یہ ایک ہیڈر، تو آپ کو بھی ہیڈر اپ ڈیٹ کرنے کے لئے جا رہے ہیں outfile کے لئے کے بارے میں معلومات، اور اندر کہ لکھنے اس کے بعد، آپ میں پڑھنے کے لئے جا رہے ہیں infile کے scanline، پکسل کی طرف سے پکسل، افقی نیا سائز اور میں ان پکسلز لکھنے outfile، مخصوص طور پر صارف کے پیمانے کی طرف سے. آپ کو یاد کرنے کے لئے جا رہے ہیں ضروری طور پر بھرتی میں شامل کریں. بعد میں اس پر مزید. اور پھر، بھی عمودی طور پر سائز تبدیل کریں. ٹھیک ہے. تو یہ تھوڑا سا زیادہ ہونے جا رہا ہے یہ کیا کون سے پیچیدہ، لیکن کیا اسی طرح ہے کہ copy.c گا، پھر، بہت مفید ثابت. ، copy.c ایک فائل کو کھولتا ہے یاد رکھیں کہ کے لئے ہیڈر کی معلومات اپ ڈیٹ outfile، تو scanline میں پڑھتا ہے، پکسل کی طرف سے پکسل، ہر پکسل لکھنے آؤٹ پٹ فائل کی scanline میں. تو پھر، تمہارا پہلا قدم شاید شاید CP، copy.c، resize.c ہو جائے آپ PSET5 ڈائریکٹری میں. آپ کو اس کی کاپی سے پہلے، اگرچہ یاد رکھیں، آپ سمجھتے ہیں کہ اس بات کو یقینی بنانے کے لئے بہت اچھی طرح copy.c. ٹھیک ہے. تو ایک فائل کو کھولنے ہیں. تم نے ایسا کس طرح جانتے ہیں. میں آپ کو چھوڑ کر جا رہا ہوں. اگلا، ہیڈر کی معلومات کو اپ ڈیٹ کریں outfile کے لئے. ہم ایک نئی بٹ نقشہ ہے، ہم نئے ہیڈر کی معلومات ہے. یہاں کس کو تبدیل کر رہا ہے؟ ٹھیک ہے، فائل کا سائز تبدیل کرنے کے لئے کی جا رہی ہے ہم زیادہ سے زیادہ کرنے کے لئے جا رہے ہیں پہلے سے پکسلز. تصویر کا سائز بھی، اس طرح، ہے ہے کے طور پر، تبدیل کرنے جا رہا چوڑائی اور اونچائی. تو جس متغیر لوگ بالکل، ہیں؟ ٹھیک ہے، اگر آپ کو ہیڈر میں نظر آتے ہیں کے بارے میں معلومات، آپ کو وہاں دیکھ کل نمائندگی کرتا ہے جو biSizeImage، بائٹس میں تصویر کا سائز، پکسلز اور بھرتی سمیت. biWidth تصویر کی چوڑائی ہے پکسلز میں، بھرتی مائنس. biHeight کی اونچائی ہے پکسلز میں تصویر. اور اس طرح ان لوگوں میں موجود ہیں structs BITMAPFILEHEADER اور BITMAPINFOHEADER. آپ کی طرف سے ہے جس میں ہے جو بتا سکتے ہیں bmp.h پر جا کر اور میں تلاش BITMAPINFOHEADER struct اور دیکھ متغیر وہاں درج ہیں جس میں. تو outfiles ہیڈر کو اپ ڈیٹ کرنے کے بارے میں معلومات، آپ چاہتے ہیں جا رہے ہیں کے ان اقدار کو تبدیل اونچائی اور چوڑائی. لیکن امکانات ہیں، آپ کو کچھ ضرورت ہو سکتی ہے infile کی ہیڈر کی معلومات کے بعد میں، تو سب سے بہتر دونوں کے ٹریک رکھنے کے لئے. لیکن آپ کی متغیر کے ساتھ بہت واضح ہو جائے ناموں تاکہ آپ نہیں اتفاقی غلط اقدار میں لکھنا outfile کے لئے ہیڈر. تو اب میں پڑھنے کے لئے حاصل کرتے ہیں scanline پکسل کی طرف سے پکسل. ایک بار پھر، ہم اپنے قابل اعتماد کرنے کے لئے تبدیل کرنے کے لئے جا رہے ہیں I / O لائبریری فائل، اور پر نظر fread تقریب. fread ایک struct پوائنٹر میں لیتا ہے اس بائٹس پر مشتمل گا کہ آپ میں پڑھ رہے ہیں، ہر ایک کا سائز آپ پڑھ رہے ہیں اس عنصر - دوبارہ ہے، sizeof مفید ہو جا رہا ہے یہاں تقریب، کی تعداد تم اس کے سائز، سائز کے عناصر، پھر آخر میں پڑھنے، اور، inpointer، فائل ہے کہ آپ کی طرف سے پڑھ رہے ہیں. تو آپ کا نمبر عناصر لے جا رہے ہیں inpointer سے سائز، اور اعداد و شمار میں ڈال. اب یہ افقی طور پر سائز تبدیل کرنے کا وقت ہے. (ن) میں ہر پکسل کے لئے اس کے بعد، 2 برابر ہے infile، ہم اسے لکھنے کے لئے جا رہے ہیں دو بار outfile میں. ہم کس طرح فائلوں کو لکھ سکتا ہوں؟ ٹھیک ہے، ہم fwrite تقریب ہے، تو ہم struct پر پوائنٹر لیا ہے کہ آپ ہیں بائٹس پر مشتمل ہے کی طرف سے تحریری طور پر، اور پھر ہم میں منتقل سائز، تعداد، اور پیداوار، جہاں آپ اس لکھنے جا رہے ہیں. اور پھر ایک عمل کو دوبارہ ہو جائے گا، لوپ کے لئے کے قابل ایک سادہ تکراری. لیکن ہم نے یاد کرنے کی ضرورت اندر بھرتی شامل کرنے کے لئے بھرتی کے تصور ہے، اچھی طرح سے، ہے ہر پکسل تین کے کاٹنے ہے، لیکن ہر scanline ضروری کا سائز 4 بائٹس کی ایک سے زیادہ ہو. تو پکسلز کی تعداد نہیں ہے اگر ایک 4 کے ایک سے زیادہ، ہم نے کچھ شامل کرنے کی ضرورت صرف صفر ہے جو بھرتی،. اب، یہ کیا کس کے برعکس، اور کے برعکس کاپی، تو infile تصویر اور outfile فائل مختلف ہے ہے مختلف بھرتی وہ ہیں کیونکہ مختلف widths کے. ٹھیک ہے. تو شاید ایک فارمولا گے یہاں ہاتھ میں آئے. میں اسے باہر تلاش کرنے کے لئے آپ کو چھوڑ، لیکن گے بھرتی لکھنے کے لئے، کہ آپ کو بتا، ٹھیک ہے، یہ صرف ایک سادہ fputc تقریب ہے، کردار میں گزر تو آپ لکھنا چاہتے ہیں، اور یہ کہ فائل پوائنٹر کہ آپ لکھنے کے لئے چاہتے ہیں. تو اب ہم، افقی طور پر تبدیل کر دیا ہے اور اس کے بعد، بھرتی استعمال کیا جاتا ہے آپ کو آپ کی فائل میں منتقل کرنے کی ضرورت ہے یاد رکھیں کہ پوزیشن کے اشارے، آپ کی وجہ سے بھرتی میں fread نہیں کر سکتے ہیں. تو آپ کو اس بات کو یقینی بنانا چاہتے ہیں آپ کی فائل infile میں پوزیشن اشارے صحیح نقطہ پر ہے. ہم بھی چاہتے ہیں عمودی طور پر سائز تبدیل کریں. ہم صرف، افقی طور پر اسے بڑھاتے نہیں کر سکتے ہیں ہر قطار کی ضرورت ہے N اوقات کاپی کرنے کے لئے. اب، مختلف کئی ہیں ایسا کرنے کے طریقوں. تو ایک، ہم میں، ایک دوبارہ سے لکھنا طریقہ استعمال کر سکتے ہیں ہم پکسلز کے سب کو یاد ہے کہ کی ایک دی گئی ایک صف میں صف، اور پھر ہم نے اس صف لکھنے کئی بار ضرورت کے مطابق. یا جہاں recopy طریقہ ہے، infile میں ایک صف میں پڑھنے کے بعد اور پھر outfile میں کہ لکھنے، بھرتی انہوں نے مزید کہا، ہم fseek اصل صف کے شروع کرنے کے لئے واپس، اور پھر افقی دوبارہ وہاں سے نیا سائز کرنا. طریقے سے قطع نظر، اگرچہ، تمہیں ہر پکسل بار بار کرنا چاہتے ہیں (ن) کے اوقات، اور ہر صف ہو اس کے ساتھ ساتھ (ن) بار بار بار. اس کے ساتھ، آپ بٹ نقشہ پڑے گا زندگی سے بڑی. میرا نام کیا Zamyla ہے، اور اس CS50 ہے.