>> [সঙ্গীত বাজাচ্ছি]
>> ZAMYLA Chan: ধরা যাক এর ঘা পুনরায় মাপ সঙ্গে জিনিষ আপ.
পুনরায় মাপ, ব্যবহারকারী মাধ্যমে, এ পাস হবে কমান্ড লাইন, একটি বিটম্যাপ ইমেজ যে
তারা আপনাকে একটি নম্বর দ্বারা আকার পরিবর্তন করতে চান তারা, পাস যে
কমান্ড লাইনে.
আমরা এই কিভাবে করব?
>> ওয়েল, প্রথম জিনিস প্রথম, যাক এর পদক্ষেপ মধ্যে এই ভাঙ্গিয়া.
আপনি infile খুলতে চান চলুন তারা আপনাকে দেবে, যেমন করে
তৈরি এবং outfile খুলতে যে আপনাকে করা চলুন
ইন পরিবর্তিত ইমেজ
এর পরে, আপনি resizing, এবং করছি কারণ এটি একটি বিটম্যাপ কারণ, এটি একটি হেডার, তাই
তবে আপনাকে হেডার আপডেট চলুন outfile জন্য তথ্য,
এবং এখনো করে লিখুন
এর পরে, আপনি মধ্যে পড়তে যাচ্ছেন infile এর scanline,
পিক্সেল বাই পিক্সেল, অনুভূমিকভাবে resizing এবং মধ্যে যারা পিক্সেল লেখা
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 পিক্সেল বাই পিক্সেল.
আবার, আমরা আমাদের বিশ্বাসভাজন চালু করতে যাচ্ছেন ইনপুট / আউটপুট লাইব্রেরি ফাইল, এবং তাকান
fread ফাংশন.
fread একটি struct একটি পয়েন্টার লাগে যে বাইট ধারণ করবে
আপনি মধ্যে পড়ি, প্রতিটি মাপ আপনি পড়ি যে উপাদান -
আবার, sizeof উপযোগী হতে যাচ্ছে এখানে কাজ, সংখ্যা
আপনি যে আকার, আয়তন উপাদান, তারপর অবশেষে মধ্যে পড়া, এবং,
inpointer, ফাইলের যে আপনার কাছ থেকে পড়ি.
তাই আপনি যদি সংখ্যা উপাদান গ্রহণ করছেন inpointer থেকে আকার, এবং এর
তথ্য সেগুলি নির্বাণ.
>> এখন এটি অনুভূমিকভাবে মাপ পরিবর্তন করার সময়.
এন প্রতিটি পিক্সেল জন্য তারপর, 2 সমান হলে infile, আমরা তা লিখতে যাচ্ছেন
দু 'বার outfile মধ্যে.
কিভাবে আমরা ফাইল লিখুন?
ভাল, আমরা fwrite ফাংশন আছে, তাই আমরা struct যাও পয়েন্টার গ্রহণ করেছেন
যে আপনি যে বাইট রয়েছে থেকে লেখা, এবং তারপর আমরা পাস
আকার, সংখ্যা, এবং আউটপুট, যেখানে আপনি যে লেখার করা চলুন.
এবং তারপর একটি প্রক্রিয়া পুনরাবৃত্তি, হবে লুপ জন্য সক্ষম একটি সহজ পুনরাবৃত্ত.
>> কিন্তু আমরা মনে রাখা প্রয়োজন ইন প্যাডিং যোগ করতে
প্যাডিং ধারণা যে, ভাল, হয় প্রতিটি পিক্সেল তিনটি কামড়, কিন্তু
প্রতিটি scanline আবশ্যক মাপ 4 বাইটের একটি একাধিক হতে.
তাই পিক্সেল সংখ্যা নয় যদি 4 একাধিক, আমরা কিছু যুক্ত করতে হবে
শুধু শূণ্যসমূহ যা প্যাডিং,.
এখন, এটা সম্পন্ন কে পৃথক, এবং অসদৃশ কপি, তারপর infile ইমেজ এবং
outfile ফাইলের বিভিন্ন আছে আছে বিভিন্ন প্যাডিং তারা কারণ
বিভিন্ন প্রশস্ততা.
>> ঠিক আছে.
তাই সম্ভবত একটি সূত্র would এখানে উপকারে আসা.
আমি এটা খুঁজে বের করতে যদি আপনি এটি ছেড়ে, কিন্তু করব প্যাডিং লিখতে, যে আপনাকে বলতে,
ওয়েল, এটা শুধুমাত্র একটি সহজ fputc ফাংশন, চরিত্রের কথা প্রসঙ্গে
এর পরে লিখতে চান, এবং যে ফাইল পয়েন্টার যে আপনি
লিখতে চাই.
তাই এখন আমরা, অনুভূমিকভাবে মাপ পরিবর্তন করেছি এবং তারপর, প্যাডিং ব্যবহার
আপনি আপনার ফাইল সরানো প্রয়োজন মনে রাখা অবস্থান নির্দেশক, আপনি কারণ
প্যাডিং মধ্যে fread করতে পারবেন না.
সুতরাং আপনি নিশ্চিত যে করতে চাই আপনার ফাইল infile মধ্যে অবস্থান নির্দেশক
সঠিক সময়ে হয়.
আমরা চাই কারণ উল্লম্বভাবে মাপ পরিবর্তন.
আমরা শুধু, অনুভূমিকভাবে এটি প্রসারিত করতে পারবেন না প্রত্যেক সারিতে চাহিদা কারণ
এন বার কপি করা.
>> এখন, বিভিন্ন বিভিন্ন আছে এটি করার উপায়.
তাই এক, আমরা, একটি পুনঃলিখনের পদ্ধতি ব্যবহার করতে পারেন আমরা পিক্সেল সব মনে রাখবেন যে
একটি প্রদত্ত একটি অ্যারের মধ্যে সারি, এবং তারপর আমরা হিসাবে যে অ্যারের লিখুন
অনেক বার হিসাবে প্রয়োজন.
অথবা যেখানে recopy পদ্ধতি আছে, infile এক সারিতে পড়ার পর
এবং তারপর outfile মধ্যে যে লেখা, প্যাডিং যোগ, আমরা যাও fseek
মূল সারি শুরু করার ব্যাক, এবং তারপর অনুভূমিক পুনরাবৃত্তি
সেখানে থেকে resizing.
তথাপি পদ্ধতি, যদিও, আপনি পাবেন প্রতি পিক্সেল পুনরাবৃত্তি করা চাই
এন বার, এবং প্রতি সারিতে থাকা পাশাপাশি এন বার পুনরাবৃত্তি.
>> যে সঙ্গে, আপনি বিটম্যাপ করতে হবে জীবনের চেয়ে বড়.
আমার নাম Zamyla, এবং এই CS50.