[Powered by Google Translate] [Walkthrough - সমস্যা সেট 4] [Zamyla Chan - হার্ভার্ড বিশ্ববিদ্যালয়] [এটি CS50. - CS50.TV] ঠিক আছে. হ্যালো, প্রত্যেককে, Walkthrough 4 যাও এবং স্বাগত জানাই. আজ আমাদের pset হয় ফরেনসিক. ফরেনসিক একটি সত্যিই মজার pset যে বিটম্যাপ ফাইলের সাথে ডিল অন্তর্গত আবিষ্কার যিনি একটি অপরাধের প্রতিশ্রুতিবদ্ধ. তারপর আমরা কিছু বিটম্যাপ ফাইলের মাপ পরিবর্তন চলুন, তারপর আমরা সত্যিই একটি মজার অংশ নামক উদ্ধার সঙ্গে মোকাবিলা করছি যাচ্ছে, যা মূলত আমরা একটি মেমরি কার্ড করছি হস্তান্তর যা ঘটনাক্রমে কেউ কেউ তাদের সমস্ত ফাইল মুছে ফেলা হয়েছে, এবং আমরা এই ফাইল পুনরুদ্ধার জিজ্ঞাসা করছি. কিন্তু প্রথম, আগে আমরা pset ঢোকা, সত্যিই আমি চাই সবাই অভিনন্দন জানাচ্ছি. আমরা এই কোর্সের মিডপয়েন্ট এ সম্পর্কে করছি. ক্যুইজ 0 আমাদের পেছনে, এবং আমরা pset4 করেন, তাই মূলত, আমরা halfway করছি. আমরা একটি দীর্ঘ পথ করেছি আসা যদি আপনি আপনার psets, pset0 এবং pset1 চেহারা ফিরে যাও, যাতে সম্পর্কে নিজেকে অভিনন্দন জানাচ্ছি, এবং আমরা সত্যিই মজার কিছু উপাদান মধ্যে পেতে যাচ্ছেন. তাই এই pset জন্য আমাদের টুলবাক্স, আবার, পরিবর্তে উবুন্টু জন্য yum-y সংস্করণ, আমরা শুধু update50 চালাতে পারবেন যদি আপনি সংস্করণ 17.3 এবং উপরের প্রয়োগ করেন. সুতরাং update50 চালানো নিশ্চিত করা - এটা অনেক সহজ, কয়েক কম অক্ষর - নিশ্চিত করুন যে আপনি প্রয়োগ সর্বশেষ সংস্করণ ব্যবহার করেন না. বিশেষত এটা গুরুত্বপূর্ণ update50 যখন আমরা শুরু CS50 চেক ব্যবহার করে. তাই নিশ্চিত করুন যে আপনি যে কি না. এই বিভাগের সমস্ত pset জন্য, আমরা ফাইল ইনপুট এবং আউটপুট সাথে ডিল করা চলুন, আমি ফাইল / O. আমরা প্রোগ্রাম অ্যারে সঙ্গে কারবার যে অনেক বেশী চালু করা চলুন প্রতি নির্দেশ ফাইল এবং যে ভালো জিনিষ, তাই আমরা নিশ্চিত যে আমরা সত্যিই পরিচিত এবং আরামদায়ক করতে চাই কিভাবে ফাইল মধ্যে ইনপুট এবং আউটপুট সঙ্গে জড়িত. এই pset জন্য ডিস্ট্রিবিউশন কোড ইন একটি ফাইল নামক copy.c, এবং যে কি আমরা খুঁজে পেতে যাচ্ছেন আমাদের সত্যিই দরকারী হবে কারণ আমরা শেষ পর্যন্ত চলুন আসলে copy.c ফাইল অনুলিপি এবং এটি শুধু সামান্য এই সমস্যাটা প্রথমে সেট 2 অংশ অর্জন করতে সক্ষম পরিবর্তনকারী. এবং অতএব হিসাবে আমি আগে উল্লেখ করেছে, আমরা বিটম্যাপ হিসেবে JPEGs সাথে ডিল করা হয়. তাই সত্যিই কি ঐ ফাইল সংগঠিত কাঠামো অন্তর্দৃষ্টিসম্পন্ন, কিভাবে আমরা সত্যিই 0 সেঃ structs মধ্যে এবং 1s অনুবাদ করতে পারেন এবং যে আসলে আমরা বুঝতে এবং ব্যাখ্যা করতে পারেন এবং সম্পাদনা করতে, যে সত্যিই গুরুত্বপূর্ণ হবে, কোন JPEG এবং বিটম্যাপ ফাইলের মধ্যে যাতে যাচ্ছে এবং তাদের গঠন প্রতীতি. চলিত হিসাবে Pset4,, প্রশ্নগুলির একটি অধ্যায় শুরু. যারা ফাইল ইনপুট / আউটপুটের সাথে এবং আপনি যে অভ্যস্ত পেতে চুক্তি হবে. তারপর অংশ 1 রহস্যময় গল্প, যা আপনি একটি বিটম্যাপ ফাইল দেওয়া করছি যে লাল বিন্দুর মতো সব ধরনের. এবং তারপর মূলত আমরা কি করতে যাচ্ছেন এবং এই ফাইলটি শুধুমাত্র নিতে সামান্য সম্পাদনা মধ্যে একটি সংস্করণ যে আমরা পড়তে পারেন. মূলত, যখন আমরা, শেষ করব আমরা একই ফাইলে আছে, ছাড়া আমরা গোপন বার্তা সমস্ত লাল বিন্দু দ্বারা লুকানো দেখতে পারবেন. তারপর পুনরায় মাপ একটি প্রোগ্রাম যে, একটি ফাইলে দেওয়া এবং তারপর ফাইলটি যে আউটপুট নাম দেওয়া হয় এবং তারপর একটি নম্বর হিসাবে দেওয়া ভাল, যে পূর্ণসংখ্যা মান দ্বারা আসলে যে বিটম্যাপ মাপ পরিবর্তন করা হবে. তারপর সর্বশেষে, আমরা পুনরুদ্ধার pset আছে. আমরা একটি মেমরি কার্ড দেওয়া হয় এবং তারপর সব ছবিগুলি পুনরুদ্ধার করা আছে যে ঘটনাক্রমে মুছে ফেলা হয়েছে, কিন্তু, আমরা জানতে পারবেন, আসলে মোছা এবং না ফাইল থেকে মুছে ফেলা হয়েছে; আমরা ঠিক মত হারিয়ে যেখানে তারা ফাইল ছিল, কিন্তু আমরা যে পুনরুদ্ধার চলুন. গ্রেট. ফাইলের মধ্যে দিতে যাচ্ছে, I / O, বিশেষত এই যে আপনি একটি ফাংশন ব্যবহার করা হবে পুরো তালিকা. আপনি ইতিমধ্যে দেখা fopen বুনিয়াদি, fread, এবং fwrite একটি সামান্য বিট, কিন্তু আমরা কিছু ফাইলে আরও দেখুন চলুন আমি / যেমন fputc হিসাবে হে ফাংশন, যা শুধু আপনি একটি সময়ে একটি অক্ষর লিখুন, যাও fseek, যেখানে আপনি কোন ধরনের ফাইল অবস্থান সূচক সম্মুখে এবং পিছনের দিকে সরানো, এবং তারপর অন্যদের কিছু. কিন্তু আমরা যে ভাগ একটু পরে pset সময় যাবেন. সুতরাং প্রথম ঠিক, ফাইলের মধ্যে পেতে, I / O আগে আমরা pset ঢোকা, উদাহরণস্বরূপ একটি ফাইল খুলুন,, আসলে আপনি কি আছে যা একটি ফাইল পয়েন্টার সেট করা আছে. সুতরাং আমরা একটি ফাইল পয়েন্টার * আছে. এই ক্ষেত্রে, আমি এটা পয়েন্টার একটি কলিং কারণ যে আমার infile করা যাচ্ছে না. এবং আমি ফাংশন fopen এবং তারপর ফাইলের নাম ব্যবহার করতে যাচ্ছি এবং তারপর মোডে যা আমি যাচ্ছি ফাইল সাথে ডিল করা. সুতরাং "r" বা এই ক্ষেত্রে পড়ার জন্য, "W" লিখিতভাবে জন্য, এবং তারপর সংযোজন জন্য "একটি" আছে. উদাহরণস্বরূপ, যখন আপনি একটি infile সঙ্গে লেনদেন করছেন এবং সব আপনি করতে চান বিট এবং বাইট সঞ্চিত আছে পড়তে হয়, তাহলে সম্ভবত আপনি "r" বা আপনার মোড হিসাবে ব্যবহার করতে চান সেটি যাচ্ছে. যখন আপনি আসলে লিখতে চান, ধরনের একটি নতুন ফাইল তৈরি করতে, তাহলে কি আমরা করতে যাচ্ছে সেটি আমরা নতুন ফাইল খুলতে যাচ্ছেন এবং লেখার জন্য "W" মোড ব্যবহার. অতএব যখন আপনি আসলে ফাইলের মধ্যে করছি পড়া, কাঠামো নিম্নরূপ হয়. প্রথম আপনি struct যে বাইট যে আপনি পড়ি থাকতে হবে পয়েন্টার অন্তর্ভুক্ত. যাতে যাও বাইট যে আপনি পড়ি শেষে অবস্থান হতে যাচ্ছে. তারপর আপনি থাকেন যাও আকার নির্দেশ করে যাচ্ছে, পছন্দ মূলত কতগুলি বাইট আপনার প্রোগ্রাম ফাইলের মধ্যে পড়তে হয়েছে, মূলত আকার এক উপাদান হল, এবং তারপরে আপনি কতগুলি উপাদান আপনি পড়তে চান নির্দিষ্ট চলুন. এবং পরিশেষে, তাহলে আপনি যেখানে আপনার কাছ থেকে পড়া করছি জানা আছে, যাতে আপনার মধ্যে পয়েন্টার হতে যাচ্ছে. আমি এই রঙ-কোডেড কারণ fread এছাড়াও খুবই fwrite অনুরূপ, ছাড়া আপনি নিশ্চিত যে আপনি সঠিক ক্রম ব্যবহার করতে চাই, নিশ্চিত করুন যে আপনি আসলে করছি লেখার বা ডান থেকে ফাইল পড়ার জন্য. সুতরাং হিসাবে তার আগে, যদি আমরা উপাদান হিসাবে ভাল মাপ হিসাবে উপাদানের নম্বর আছে, তারপর আমরা চারপাশে একটু বিট এখানে বাজাতে পারেন. বলুন, আমি একটা কুকুর আছে এবং struct অতএব আমি এক সময়ে দুই কুকুর পড়তে চাই. আমি কি করতে পারে এক উপাদান মাপ হয় বলে এক কুকুর মাপ হবে এবং আমি আসলে তাদের দুটি পড়তে যাচ্ছি. বিকল্প হিসাবে, আমি কি করতে পারে আমি শুধু এক উপাদান পড়া যাচ্ছে না বলে এবং যে এক উপাদান দুটি কুকুর মাপ হতে হবে. যাতে এর অনুরূপ কিভাবে আপনি মাপ এবং সংখ্যা সহ ধরনের খেলার কাছাকাছি করতে পারেন কি আপনি আরও বেশি ধারণাসম্পন্ন উপর নির্ভর করে. ঠিক আছে. তাই এখন আমরা লিখিতভাবে ফাইল পেতে. আপনি যখন একটি ফাইল লিখতে চান, প্রথম যুক্তি আসলে যেখানে আপনি থেকে পড়ি. যাতে মূলত এর তথ্য যে আপনি ফাইলে লিখতে যাচ্ছি, যা শেষে আউট পয়েন্টার. সুতরাং যখন আপনি pset সঙ্গে লেনদেন করছেন, আপনি নিশ্চিত না বিভ্রান্ত হয়ে যায় না. হয়তো পাশ সংজ্ঞা সাইড আছে. আপনি পুস্তিকায় সংজ্ঞা মুঠি ধরে টেনে তুলবো মানুষ টাইপ করে এবং তারপর fwrite পারেন, উদাহরণস্বরূপ, টার্মিনালে, অথবা আপনি এই স্লাইডে পড়ুন ফিরে যেতে পারেন এবং নিশ্চিত করুন যে আপনি সঠিক ব্যবহার করছেন না. Fwrite জন্য তাই আবার,, যখন আপনি একটা ফাইল আছে যা আপনি মধ্যে লিখতে চান, যে যুক্তি শেষ হবে এবং যে যে ফাইল পয়েন্টার একটি হতে যাচ্ছে এর. আমি তখন যে কিভাবে আমরা লেখার সময় সম্ভবত কয়েক বাইট সঙ্গে কারবার, কিন্তু বলতে আপনি শুধু মাত্র একটি একক অক্ষর লিখতে চান. বিটম্যাপ হিসাবে আমরা এই উদাহরণে পরে দেখতে পাবেন যে, আমরা যে ব্যবহার করতে হবে. এটা যখন আমরা fputc মূলত ব্যবহার করতে পারেন, মাত্র একটি সময়ে একটি অক্ষর বসিয়ে, chr, মধ্যে ফাইল পয়েন্টার, এবং যে এর বাইরে আমাদের আছে পয়েন্টার. অতএব যখনই আমরা বা চাইতে একটি ফাইলের মধ্যে লিখুন, ফাইল যেখানে আমরা অবগত থাকার হয়. এটা কার্সার ফাইল অবস্থান সূচক কেমন. তাই যখনই আমরা লিখুন অথবা একটি ফাইল মধ্যে আবার পড়ুন ফাইলটি শেষ পর্যন্ত যেখানে মনে হয়, এবং তাই যেখানে কার্সার থেকে চলতে হয়. এই উপকারী যখন করতে চান করা, বলতে পারেন, একটি নির্দিষ্ট পরিমাণ মধ্যে কোনো কিছু পড়া এবং তারপর নিম্নলিখিত পরিমাণ মধ্যে পড়তে, কিন্তু আমরা কখনও ফিরে যান বা প্রকৃতপক্ষে একটি নির্দিষ্ট রেফারেন্স মান থেকে শুরু করতে পারেন. আমি তখন fseek ফাংশন, এটি কী জন্য আমাদের একটি নির্দিষ্ট ফাইলে যাও কার্সার সরানোর জন্য করতে পারবেন একটি নির্দিষ্ট সংখ্যক বাইট. এবং তখন আমরা কি কি আছে যেখানে রেফারেন্স মান নির্দিষ্ট করা হয়. সুতরাং হয় এটা যেখানে বর্তমানে কার্সার হল থেকে চলে এগিয়ে অথবা পিছিয়ে যান, অথবা আমরা যে এটি মাত্র ফাইলের শুরুতে থেকে সরানো উচিত নির্দিষ্ট করতে পারেন বা থেকে ফাইলের শেষে. এবং যাতে আপনি নেতিবাচক বা ইতিবাচক মান পরিমাণ সম্পন্ন করতে পারেন, এবং যে কার্সার ধরনের হয় ফরওয়ার্ড বা পিছনের দিকে সরাতে হবে. আগে আমরা অন্যান্য psets ঢোকা, ফাইল সম্পর্কে কোন প্রশ্ন থাকে, I / O? ঠিক আছে. যেহেতু আমরা আরও উদাহরণ মধ্যে পাওয়ার জন্য, প্রশ্নের জন্য সম্পর্কে থামাতে নির্দ্বিধায়. সুতরাং রহস্যময় গল্প মধ্যে, আপনি একটি বিটম্যাপ ফাইল অনুরূপ এই স্লাইডে লাল এক হস্তান্তর করছি, এবং এটা ভালো দেখায় - লাল বিন্দু একটি গুচ্ছ - এবং আপনি কি লেখা কি সত্যিই জানি না. আপনি যদি কটাক্ষ করা, আপনি সামান্য মধ্যম ভিতরে নীলাভ রঙ দেখতে সক্ষম হতে পারে. মূলত, যে যেখানে টেক্সট সংরক্ষিত হয়. একটি হত্যাকান্ডের যে কি ছিল, এবং আমরা খুঁজে বের করতে যারা তা প্রয়োজন. যাতে না, আমরা প্রয়োজন একটি পাঠযোগ্য বিন্যাসে এই ছবিটি রূপান্তর ধরনের. আপনি যদি কখনও না কখনও কখনও এই সমস্যার সম্মুখীন হয়েছে, সামান্য খেলনা হতে পারে যেখানে আপনি একটি একটি লাল ফিল্ম সঙ্গে বিবর্ধক কাচ থাকবে. যে কেউ? হাঁ. সুতরাং আপনি ভালো কিছু হাতি হবে, আপনি একটি কাচ আছে এটি উপর লাল ফিল্ম সঙ্গে, আপনি চিত্রের উপর রাখা হবে, এবং আপনার বার্তা তাহাতে লুকানো দেখতে সক্ষম হবে. আমরা, আছে একটি লাল ফিল্ম সাথে আতস কাঁচ না তাই আমরা ধরনের আমাদের নিজস্ব তৈরি চলুন এই pset. তাই ব্যবহারকারীর ইনপুট রহস্যময় গল্প, তারপরে খেই যাও, যাচ্ছে. Bmp দিয়ে শেষ হয়, যাতে এর infile, যে লাল বিন্দু বার্তা, এবং তারপর তারা verdict.bmp আমাদের outfile হবে বলছে. সুতরাং একটি নতুন বিটম্যাপ ইমেজ অনুরূপ সুরুক এক তৈরি হচ্ছে একটি পাঠযোগ্য বিন্যাসে ছাড়া যেখানে আমরা গোপন বার্তা দেখতে পারেন. যেহেতু আমরা সম্পাদনা এবং কিছু ধরণের বিটম্যাপ সাধিত সাথে ডিল করা যাচ্ছেন, আমরা আমাদের এই বিটম্যাপ ফাইল কাঠামো ডুব ধরনের চলুন. আমরা এই অল্প উপর গিয়েছিলাম বক্তৃতায়, কিন্তু তাদের মধ্যে আরো কিছু দিন এর চেহারা. বিটম্যাপ মূলত শুধু বাইটের একটি বিন্যাস যেখানে আমরা নির্দিষ্ট করেছি যা বাইট মানে কি. সুতরাং এখানে বিটম্যাপ ইমেজ একটা ম্যাপ মত ধরনের যাতে বলা হয় এটি কয়েকটি হেডার ফাইল সঙ্গে শুরু হয়, সেখানে কিছু তথ্য দিয়ে, শুরু হয়. আপনি যে সম্পর্কে বাইট সংখ্যা 14 এ আকার বিটম্যাপ ইমেজ হয়, এবং এটা চলতেই থাকে. তবে কি আমরা এখানে করছি সত্যিই আগ্রহী বাইট নম্বর 54 কাছাকাছি শুরু হয়. আমরা এই আরজিবি triples আছে. কি যে করতে যাচ্ছে প্রকৃত পিক্সেল, রঙ মান থাকতে হয়. হেডারের মধ্যে যে উপরের সব কিছু তথ্য অনুরূপ ইমেজ, ইমেজ প্রস্থ, উচ্চতা এবং মাপ. যখন আমরা প্যাডিং পরে যান, আমরা দেখতে পাবেন কেন চিত্রের আকার প্রস্থ বা উচ্চতা থেকে আলাদা হতে পারে. এই বিটম্যাপ ইমেজ বাইট ক্রমের - তখন এইসব উপস্থাপন - আমরা কি করব তা পারে অনুমোদন করা হয় বলে, আমি মনে রাখতে যাচ্ছি যে সূচক 14, যে যেখানে আকার উদাহরণ স্বরূপ,, কিন্তু এর পরিবর্তে আমরা কি এই সহজ করতে করতে যাচ্ছেন একটি struct তা encapsulate. তাই আমরা দুটি structs আমাদের জন্য, একটি BITMAPFILEHEADER আছে এবং একটি BITMAPINFOHEADER, এবং তাই ডিফল্ট যখনই আমরা যে ফাইল পড়বেন না, এটি করার চালু করা যাচ্ছে, ক্রম যাতে এবং তারা এও যেমন biWidth এবং biSize হিসাবে ভেরিয়েবলের মধ্যে পূরণ করা যাচ্ছে. এবং পরিশেষে, তাহলে পিক্সেল প্রতি তিনটি বাইট প্রতিনিধিত্ব করা হয়. প্রথম এক নীল পিক্সেল পরিমাণ, দ্বিতীয়টি হল সবুজ পরিমাণ, এবং পরিশেষে, লাল, যেখানে 0 মূলত নেই নীল বা কোন সবুজ পরিমাণ অথবা কোনো লাল এবং তারপর ff সর্বোচ্চ মূল্য. এগুলি হেক্সাডেসিমেল মান. তখন যদি আমরা FF0000 থাকে তবে, যে নীল সর্বাধিক পরিমাণ অনুরূপ এবং তারপর সবুজ এবং লাল নেই, অতএব যে কোন একটি নীল পিক্সেল আমাদের দিতে হবে. তারপর যদি আমরা বোর্ড জুড়ে ff এর সমস্ত থাকে, তখন তার মানে যে আমরা একটি সাদা পিক্সেল আছে. এটি প্রথাগতভাবে তার বিপরীত ধরনের যখন আমরা আরজিবি বলে. এটা আসলে এর BGR যাচ্ছে. তাই আপনি যদি আমরা আসলে একটি বিটম্যাপ ইমেজ একটি উদাহরণ দেখব - আমাকে এক আপ এখানে মারবে না. এটা একটা সামান্য ছোট. আমি, zooming এবং আমরা এটি pixelated দেখতে পাবেন না. এটা রং ব্লকের মত দেখাচ্ছে. আপনি ব্লক তারপর সাদা এবং লাল ব্লক আছে. উদাহরণস্বরূপ, যদি আপনি মাইক্রোসফট পেইন্ট মধ্যে খেলা,, আপনি যে ভালো কিছু করতে পারে দ্বারা মূলত শুধুমাত্র একটি নির্দিষ্ট অনুক্রম নির্দিষ্ট স্কোয়ার আলেখ্য. আমি তখন কি বিটম্যাপ এই অনুবাদ নিম্নরূপ. এখানে আমরা প্রথমে সাদা পিক্সেল আছে, যে সমস্ত 6 চ এর, এবং তারপর আমরা লাল পিক্সেল আছে, 0000ff দ্বারা নির্দেশিত. এবং তাই বাইট যে আমরা ক্রম ইঙ্গিত কিভাবে বিটম্যাপ ইমেজ তার থেকে যাচ্ছে. তাই ঠিক কি আমি এখানে সম্পন্ন করেছি করা সমস্ত বাইট আউট এবং লাল হয়ে রঙ্গিন যাতে আপনি ধরনের দেখতে পারেন, যদি আপনি একটি সামান্য বিট কটাক্ষ করা, কিভাবে এই ধরণের একটি হাস্যজ্জল মুখ ইঙ্গিত দেয়. উপায় যে বিটম্যাপ ইমেজ কাজ আমি কল্পনা একটি গ্রিড হিসাবে মূলত এটি. এবং তাই ডিফল্টরূপে, গ্রিড প্রতিটি সারি 4 বাইটের একটি একাধিক হতে হয়েছে. যদি আমরা একটি বিটম্যাপ ইমেজ তাকান, আপনি প্রতি মান পূরণ করছি. উদাহরণস্বরূপ, আপনি একটি লাল এখানে আছে, একটি সবুজ হতে পারে এখানে, এখানে একটি নীল, কিন্তু আপনি কি নিশ্চিত যে ছবিটি চার বাইটের একটি একাধিক দিয়ে পূর্ণ হয় না আছে. সুতরাং যদি আমি তিনটি ব্লক চওড়া হতে আমার ছবিটি চান, তাহলে আমি একটা খালি মান স্থাপন করা হবে গত এক এটি চার জন একাধিক করতে. আমি তখন ভাবলাম কিছু যা আমরা প্যাডিং আহ্বান করছি মধ্যে যোগ করা হবে. আমি শুধু যে কোন নির্দেশ x এর সঙ্গে যাব. এখন আমরা বলতে চাই, উদাহরণের জন্য, একটি চিত্র যা দীর্ঘ 7 পিক্সেল,. আমরা 1, 2, 3, 4, 5, 6, 7 আছে, এবং যে সব রঙ দিয়ে ভরা হয়. উপায় যে বিটম্যাপ ইমেজ কাজ হল যে আমরা একটি 8 প্রয়োজন. রাইট এখন আমরা 1, 2, 3, 4, 5, 6, 7 আছে. আমরা বিটম্যাপ ইমেজ সঠিকভাবে পড়া জন্য 8 শূণ্যস্থান প্রয়োজন. আমি তখন কি আমরা কি শুধু প্যাডিং একটি বিট মধ্যে যোগ করা হয় নিশ্চিত করুন যে সব প্রস্থ হয় একরূপ করা প্রস্থ এবং যে সমস্ত 4 একটি একাধিক. এবং পূর্বে যাতে আমি নির্দেশিত, কোনও একটি বা squiggly লাইন হিসাবে প্যাডিং, কিন্তু প্রকৃত বিটম্যাপ ইমেজ মধ্যে প্যাডিং একটি হেক্সাডেসিমাল 0 দ্বারা করা হয়. যাতে একটি অক্ষর, 0 হবে. কি উপকারে আসতে পারে এমন হয় xxd কমান্ড. এটি কী জন্য আসলে আপনি দেখায়, অনুরূপ কি আমি স্মাইলি সাথে আগে যাও কি না আসলে আমি যখন প্রিন্ট আউট কি রঙ প্রতিটি পিক্সেলের জন্য হবে এবং তারপর এটি রঙ-কোডেড, যখন আপনি নিম্নলিখিত কমান্ডের সাহায্যে চালানো xxd, তারপর আসলে এটি প্রিন্ট আউট হবে কি রং যারা পিক্সেল জন্য. এখানে আপনি উপর কি হবে তা হচ্ছে আমি ইঙ্গিত-গুলি 54 মত, বলছেন যে আমি 54TH বাইট এ শুরু চলেছি আগে যে কারণে, যদি আমরা বিটম্যাপ মানচিত্র ফিরে তাকান মনে রাখবেন, যে সকল তথ্য এবং হেডার যে ভালো জিনিস. কিন্তু সত্যিই কি আমরা যত্নশীল প্রকৃত পিক্সেল যে রঙ নির্দেশ করে. তাই যোগ করার মধ্যে যে পতাকা, 54-গুলি দ্বারা তারপর, আমরা রঙ মান দেখতে সক্ষম. এবং জটিল পতাকা যে ভালো জিনিস এবং চিন্তার কিছু নেই. সমস্যা সেট বৈশিষ্ট, আপনি কিভাবে xxd যাও যাও পিক্সেল প্রদর্শন ব্যবহার নির্দেশ করতে হবে. তাই আপনি যদি এখানে দেখতে, এটি একটি সবুজ বক্স, এই ছোট জিনিস ভালো ধরনের দেখায়. আমি করেছি মূলত কোন নীল, সবুজ অনেক, এবং কোন লাল বলছে হিসাবে 00ff00 রঙ-কোডেড. তাই সবুজ যে অনুরূপ. যেহেতু আপনি এখানে দেখুন, আমরা একটি আয়তক্ষেত্র দেখতে সবুজ. এই সবুজ আয়তক্ষেত্র শুধুমাত্র 3 পিক্সেল চওড়া, অতএব আমরা কি কি আছে নিশ্চিত করুন যে ছবিটি 4 ব্যাপী একটি একাধিক করা হয় অতিরিক্ত প্যাডিং মধ্যে যোগ করুন. এবং অতএব যে কিভাবে আপনি এইসব 0 সেঃ এখানে দেখুন. আসলে এই হতে আপনার পুনরায় মাপ pset ফলাফল হবে, মূলত ছোট বিটম্যাপ গ্রহণ এবং তারপর 4 দ্বারা এটি enlarging. তাই কি আমরা দেখতে হয় যে আসলে এই ছবিটি 12 পিক্সেল চওড়া, কিন্তু 12 4 টি একটি একাধিক, এবং তাই আসলে আমরা, কারণ আমরা কোনো যোগ করার প্রয়োজন হবে না দেখতে না পেলে শেষে কোনো 0 সেঃ না কারণ এটি সম্পূর্ণরূপে padded এর. এটা কোনো জায়গা নেই. ঠিক আছে. প্যাডিং সম্পর্কে কোন প্রশ্ন? ঠিক আছে. কুল. হিসাবে আমি আগে উল্লেখ করেছে, বিটম্যাপ ঠিক বাইট একটা ক্রম. তাই এর পরিবর্তে ঠিক বাইট যার নম্বর ট্র্যাক রাখতে প্রয়োজন কি আমরা আছে অনুরূপ একটি নির্দিষ্ট উপাদান যাও, আমরা আসলে একটি struct যে প্রতিনিধিত্ব তৈরি করেছেন. তাই আমরা যা আছে একটি RGBTRIPLE struct. আপনি যখনই কোনো একটি আরজিবি ট্রিপল একটি দৃষ্টান্ত আছে, কারণ এই একটি টাইপ struct সংজ্ঞায়িত থাকে, তাহলে আপনি rgbtBlue পরিবর্তনশীল অ্যাক্সেস করতে পারেন, একভাবে সবুজ এবং লাল ভেরিয়েবল, যা ইঙ্গিত করা কতটা নীল, সবুজ, লাল, যথাক্রমে, আপনার আছে. তাই আপনি যদি আমরা 0, ff সবুজ সেট, নীল ভেরিয়েবল সেট আছে যা সর্বোচ্চ মান থাকতে পারে, এবং তারপর লাল পরিবর্তনশীল 0 সেট, তারপর কি রঙ এই বিশেষ আরজিবি ট্রিপল উপস্থাপনের? >> [ছাত্রদের] সবুজ. সবুজ. ঠিক. এটা দরকারী জানতে হবে যে যখনই আপনি একটি আরজিবি ট্রিপল একটি দৃষ্টান্ত আছে, নীল, সবুজ, লাল - - আলাদাভাবে আপনি আসলে রঙ পরিমাণ অ্যাক্সেস করতে পারেন. এখন যে আমরা যে কাঠামো সম্পর্কে সায়ীদ করেছি, যাক এর BMP ফাইল কটাক্ষপাত করা. এগুলি জন্য structs. এখানে আমরা একটি BITMAPFILEHEADER struct আছে. সুদ এর আকার. পরে, আমরা হেডারের তথ্য, যা আমাদের জন্য আরও কিছু লোকের জন্য আকর্ষণীয় আছে, যথা আকার, প্রস্থ, উচ্চতা এবং. হিসাবে আমরা পরে এ যাবেন, যখন আপনি ফাইলটি পড়তে যাও, এটি স্বয়ংক্রিয়ভাবে কারণ আমরা যাতে একই সেট করেছি এ সার্চ. সুতরাং biSize ডান বাইট ছবিটি প্রকৃত মাপ যে মিলা থাকতে হবে. এবং তারপর এখানে, সর্বশেষে, হিসাবে আমরা স্বপ্ন করেছি, আমরা RGBTRIPLE typedef struct আছে. আমরা একটি rgbtBlue, সবুজ, লাল এবং এর সাথে জড়িত আছে. গ্রেট. ঠিক আছে. এখন আমরা বুঝতে পারি যে একটি সামান্য বিট বিটম্যাপ, বোঝেন যে আমরা একটি হেডার ফাইল আছে এবং একটি তথ্য হেডারের সাথে এবং তারপর পরে যে যুক্ত, আমরা আকর্ষণীয় উপাদান আছে রঙ, এবং যারা রং RGBTRIPLE structs দ্বারা প্রতিনিধিত্ব করা হয়, এবং ঘুরে যারা,, তিনটি যুক্ত নীল, সবুজ, লাল এবং মূল্যবোধ আছে. সুতরাং এখন, আমরা মনে সম্পর্কে একটি বিট উদ্ধার ধরনের পারেন. দুঃখিত. রহস্যময় গল্প সম্বন্ধে চিন্তা করুন. যখন আমরা আমাদের খেই ফাইল থাকে, তখন আমরা কি করতে চান তা পিক্সেল দ্বারা পিক্সেল পড়তে হয় এবং তারপর যারা একরকম পিক্সেল যাতে আমরা একটি পাঠযোগ্য বিন্যাসে এটি আউটপুট পরিবর্তন করতে পারেন. এবং তাই এটি আউটপুট, আমরা verdict.bmp ফাইলের মধ্যে পিক্সেলের দ্বারা পিক্সেল লিখুন চলুন. এটা অনেক কাজের ধরনের. আমরা বুঝতে পারছি. তাই আমরা যা সম্পন্ন করেছেন তা আমরা আসলে সাথে আপনার দেওয়া copy.c. কি copy.c আছে শুধু একটি প্রদত্ত বিটম্যাপ ফাইলের সঠিক কপি করে তোলে এবং তারপর আউটপুট. সুতরাং আপনি ইতিমধ্যে এই জন্য ফাইল খোলেন, পিক্সেল দ্বারা পিক্সেল মধ্যে সার্চ, এবং তারপর মধ্যে একটি আউটপুট ফাইলের মধ্যে এটি লিখেছেন. চলুন যে কটাক্ষপাত করা. এই সঠিক ব্যবহার নিশ্চিত করা হয়, ফাইলের নাম এখানে পেয়ে. এই কি আছে তা কি আমরা infile সালে পাশ করেছি এখানে করা ইনপুট ফাইল সেট করে, যা আমাদের দ্বিতীয় কমান্ড লাইন আর্গুমেন্ট. নিশ্চিত করুন যে আমরা ফাইল খুলতে পারে না পরীক্ষা. নিশ্চিত আমরা একটি নতুন outfile এখানে করতে পারেন না পরীক্ষা. তারপর এই কি এখানে আছে, এটা মূলত শুরু হয় বিটম্যাপ ফাইল পড়ার শুরুতে থেকে. শুরুতে, আমরা জানি, BITMAPFILEHEADER রয়েছে, এবং তাই সরাসরি বিট যারা ক্রম BITMAPFILEHEADER পূরণ হবে. তাই আমরা এখানে আছে যা BITMAPFILEHEADER bf বলছে না - যে আমাদের টাইপ BITMAPFILEHEADER নতুন পরিবর্তনশীল - আমরা bf ভিতর কি আমরা পয়েন্টার থেকে পড়তে করা যাচ্ছেন, যা আমাদের infile. আমরা কত না পড়া? আমরা কত বাইট আমরা পুরো BITMAPFILEHEADER থাকতে প্রয়োজন পড়তে. একইভাবে, যে তথ্য হেডার এর জন্য আমরা কি করব তা. সুতরাং আমরা আমাদের ফাইল বরাবর infile মধ্যে অব্যাহত করছি, এবং আমরা যারা বিট এবং বাইট পড়া করছি, এবং আমরা তাদের প্লাগিং সরাসরি করছি ভেরিয়েবলের মধ্যে যে আমরা করছি এই দৃষ্টান্ত. এখানে শুধু আমরা নিশ্চিত করছি যে বিটম্যাপ একটি বিটম্যাপ. এখন আমরা একটি outfile অধিকার,? তাই যেমন আছে তেমনি যখন আমরা এটি তৈরি, এটা মূলত খালি. তাই আমরা মূলত: একটি স্ক্র্যাচ থেকে নতুন বিটম্যাপ তৈরি করা আছে. আমরা কি করব তা হল আমরা নিশ্চিত যে আমরা হেডারের ফাইল কপি করতে হবে এবং শুধুমাত্র infile ভালো হেডারের তথ্য আছে. আমরা কি করব তা হল আমরা লিখুন - এবং যে bf পরিবর্তনশীল স্মরণ ধরণ BITMAPFILEHEADER, তাই আমরা কি করব তা হল আমরা শুধু যে কন্টেন্ট ব্যবহার outfile মধ্যে লিখতে. এখানে, মনে রাখবেন আমরা প্যাডিং সম্পর্কে বললাম, কিভাবে এটা নিশ্চিত যে পিক্সেল যে আমরা পরিমাণ 4 একটি একাধিক করা গুরুত্বপূর্ণ. এটি একটি চমত্কার দরকারী সূত্র কত প্যাডিং আপনার নিরূপণ আপনার দেওয়া ফাইল প্রস্থ. আমি আপনাকে বলছি যে copy.c আমরা হিসাবী প্যাডিং জন্য একটি সূত্র আছে মনে রাখতে চান. ঠিক আছে? যাতে সবাই যে মনে রাখবেন. গ্রেট. আমি তখন কি copy.c আছে পরবর্তী এটা iterates scanlines সব উপর. এটা সারি মাধ্যমে প্রথম যায় এবং তারপর প্রতি ট্রিপল যে এটি সার্চ সঞ্চয় এবং তারপর outfile মধ্যে এটি লিখেছেন. সুতরাং এখানে আমরা এমন এক সময়ে শুধুমাত্র একটি আরজিবি ট্রিপল করছেন পড়া এবং তারপর outfile মধ্যে যে একই ট্রিপল নির্বাণ. চতুর ভাগে যে প্যাডিং একটি আরজিবি ট্রিপল হয় না, এবং সে জন্য আমরা যে আরজিবি triples এর প্যাডিং পরিমাণ পড়তে পারে না. কি আমরা কি শুধু আমাদের ফাইল অবস্থান নির্দেশক সরানোর জন্য আমাদের কার্সার সরানোর জন্য, সব প্যাডিং উপর লাফালাফি করা যাতে আমরা পরের সারি করেন ধরনের. এবং তারপর কি আছে এই একটি কপি আপনি দেখায় কিভাবে আপনি প্যাডিং যোগ করতে পারেন. সুতরাং আমরা কত প্যাডিং আমরা প্রয়োজন হিসাব করেছি, যাতে এর মানে হল যে আমরা 0 সেঃ এর প্যাডিং নম্বর প্রয়োজন. কি আছে এই লুপ যে আমাদের মধ্যে outfile 0 সেঃ এর প্যাডিং নম্বর রাখে জন্য একটি. এবং তারপর অবশেষে, আপনি উভয় ফাইল বন্ধ. আপনি infile হিসেবে outfile বন্ধ. সুতরাং যে কিভাবে copy.c কাজ, এবং যে চমত্কার উপযোগী হতে যাচ্ছে. পরিবর্তে শুধুমাত্র আসলে সরাসরি কপি পেস্ট অথবা, শুধু আমি এবং যাহা চান সেটি টাইপ, আপনি শুধু এই টার্মিনালে নিম্নলিখিত কমান্ড প্রয়োগ করতে পারেন, cp copy.c whodunit.c, যা একটি নতুন ফাইল তৈরি হবে, whodunit.c, যে সঠিক একই কন্টেন্ট হিসাবে কপি আছে রয়েছে. আমি তখন কি আমরা করতে পারি যে হিসাবে একটি কাঠামোর উপর যা নির্মাণ ও সম্পাদনা করতে ব্যবহার করা হয় রহস্যময় গল্প আমাদের জন্য ফাইল. এই আমাদের-ডস রহস্যময় গল্প জন্য না হয়, কিন্তু কি copy.c আছে না আসলে আমাদের জন্য তাদের অধিকাংশই যত্ন নেয়. তাই আমরা পরবর্তীতে আপনার প্রয়োজন হয় পিক্সেল হিসাবে পরিবর্তন প্রয়োজন প্রকৃতপক্ষে ফাইল পাঠযোগ্য না. একটি প্রদত্ত পিক্সেল ট্রিপল জন্য যে মনে রাখবেন, যাতে একটি টাইপ RGBTRIPLE প্রদত্ত পরিবর্তনশীল জন্য, আপনি নীল, সবুজ, লাল এবং মান অ্যাক্সেস করতে পারেন. যে উপকারে আসতে যাচ্ছে এর কারণ আপনি যদি তাদের অ্যাক্সেস করতে পারেন, তার মানে আপনি তাদের পরীক্ষা করতে পারবেন, এবং তার মানে আপনি তাদের পরিবর্তন করতে পারবেন. সুতরাং যখন আমরা আমাদের লাল বিবর্ধক বস্তু যেমন ফিরে গিয়েছিলাম, মূলত, যে ফিল্টার একটি আমাদের জন্য সাজানোর হিসাবে অভিনয় করেন. তাই আমরা যা করে যেতে চাই হয় আমরা triples যে এখনো সদস্য না হয়ে আসছে তার সমস্ত ফিল্টার করতে চান বিভিন্নভাবে এই কাজ করতে হয়. মূলত, আপনি ফিল্টারের যাই হোক না কেন আপনি টাইপ করতে চান করতে পারেন. হয়তো আপনি সব লাল পিক্সেল পরিবর্তন করতে চান অথবা হয়ত আপনি একটি ভিন্ন রঙ ভিন্ন একটি পিক্সেল রঙ পরিবর্তন করতে চান. যে আপনার উপর. মনে রাখবেন যে, আপনি কি রঙ পিক্সেল হয় চেক করতে পারেন এবং তারপর আপনি এটি হিসাবে আপনি মাধ্যমে চলুন পরিবর্তন করতে পারেন. ঠিক আছে. যাতে এর রহস্যময় গল্প. আপনি একবার রহস্যময় গল্প চালানোর জন্য, আপনাকে অপরাধের অপরাধী ছিল জানতে পারবেন. এখন আমরা পুনরায় আকার যেতে চলুন. আমরা এখনও বিটম্যাপ সাথে ডিল করা চলুন. আমরা কি চলুন যাও না হয় আমরা এক ইনপুট বিটম্যাপ আছে চলুন এবং তারপর আমরা একটা সংখ্যা এবং তারপর পাস outfile একটি বিটম্যাপ পেতে যাচ্ছেন যেখানে মূলত আমাদের infile n দ্বারা কমিয়ে এনেছে. বলুন, আমার ফাইল ছিল মাত্র একটি বৃহৎ পিক্সেল. তারপর যদি আমার n 3 দ্বারা ছিল 3, স্কেলিং তারপর, আমি যে বার পিক্সেল n নম্বর পুনরাবৃত্তি হবে, তাই 3 বার, তারপর এবং এটা আনুপাতিক হারে কমান 3 বার হিসাবে ভাল. সুতরাং আপনি দেখতে আমি এটা করছি স্কেলিং উল্লম্বভাবে হিসেবে অনুভূমিকভাবে. এবং তারপর এখানে একটি উদাহরণ. যদি n = 2 আছে, আপনি দেখতে যে প্রথম নীল পিক্সেল পুনরাবৃত্তি দুই বার আছে অনুভূমিকভাবে হিসাবে দুই বার উল্লম্বভাবে হিসাবে ভাল. এবং তারপর যা উপর, এবং যাতে আপনি আপনার আসল ইমেজ সরাসরি দুই আরোহী আছে. তখন যদি আমরা এই জন্য pseudocode বিস্তারিত, আমরা ফাইল খোলার জন্য চান. এবং তারপর বুদ্ধিমান যে যদি আমরা ফিরে যেতে এখানে, আমরা দেখতে যে outfile জন্য প্রস্থ infile প্রস্থ জন্য অবশ্যই আলাদা হতে হবে. এর অর্থ কি? এটার মানে হল যে আমাদের হেডারের তথ্য পরিবর্তন করতে হবে. তাই কি আমরা করতে চাইবেন হয় হেডারের তথ্য আপডেট, বুদ্ধিমান যে, যখন আমরা ফাইল পড়ার জন্য যদি আপনি copy.c কাঠামো অপারেটিং করছি, আমরা ইতিমধ্যে একটি পরিবর্তনশীল যে ইঙ্গিত কি আকার এবং যে মত জিনিষ আছে. তাই একবার আপনি আছে যে, আপনি কি করতে চাইবেন যারা নির্দিষ্ট ভেরিয়েবলের মান পরিবর্তন হয়. মনে রাখবেন, যদি আপনি একটি struct আছে, কিভাবে আপনি যে ভেরিয়েবলের মধ্যে অ্যাক্সেস. আপনি বিন্দু অপারেটর ব্যবহারের অধিকার,? আমি তখন যে ব্যবহার করে, আপনি কি জানেন যে আপনি হেডারের তথ্য পরিবর্তন করার প্রয়োজন হবে. তাই এখানে শুধু প্রকৃত উপাদান আছে যা আপনার ফাইল পরিবর্তন করা যাচ্ছে একটি তালিকা. ফাইলের মাপ পরিবর্তন করা ইমেজ হিসেবে প্রস্থ এবং উচ্চতা, যাচ্ছে. আমি তখন বিটম্যাপ মানচিত্র ফিরে যাওয়া, তাকান কিনা এটা হেডার ফাইল বা তথ্য হেডারে যে যে তথ্য রয়েছে এবং তারপর পরিবর্তন প্রয়োজন. আবার, বলতে cp copy.c resize.c. এটার মানে হল যে এখন resize.c যা কপি ভিতর আছে এর মধ্যে রয়েছে কারণ কপি প্রদান পিক্সেল দ্বারা প্রতিটি পিক্সেল scanline মধ্যে পড়া একটি উপায় আমাদের. ছাড়া এখন, পরিবর্তে শুধুমাত্র মান পরিবর্তন করার মত আমরা রহস্যময় গল্প করেছিল, আমরা কি করতে হয় আমরা একাধিক পিক্সেল লিখতে চান যতদিন আমাদের n হল 1 চেয়ে বেশী. তারপর কি আমরা করতে হয় আমরা তা প্রসারিত করুন অনুভূমিকভাবে n দ্বারা চান, সেইসাথে এটি প্রসারিত করুন উল্লম্বভাবে n দ্বারা. কিভাবে এই আমরা কি হতে পারে? আপনার n হল 2 বলুন এবং আপনি এই infile দেওয়া আছে. তোমার কার্সার প্রথম এক সময়ে শুরু হতে চলেছে, এবং কি করতে চান, যদি n হল 2, আপনি তাদের মধ্যে 2 প্রিন্ট করতে চান. সুতরাং আপনি তাদের মধ্যে 2 মুদ্রণ. তারপর আপনার কার্সর পরবর্তী পিক্সেল, যা লাল এক সরাতে হবে, এবং এটি ঐ লাল বেশী 2 প্রিন্ট আউট, কি আগে এটি শেষ এর মধ্যে এটি সংযোজন করে যাচ্ছে. তারপর কার্সর পরবর্তী পিক্সেল যাও এবং যারা 2 গুটান সরাতে হবে. আপনি যদি copy.c ফ্রেমওয়ার্ক, কি আছে এই ফিরে তাকান অধিকার এখানে এটি একটি একটি আরজিবি ট্রিপল, একটি নতুন পরিবর্তনশীল নামক ট্রিপল নতুন উদাহরণ সৃষ্টি করে. এবং এখানে যখন তা সার্চ, এটি infile 1 RGBTRIPLE থেকে সার্চ সঞ্চয় এবং যে ট্রিপল ভেরিয়েবলের ভিতরে এটি. আমি তখন আসলে আপনি একটি পরিবর্তনশীল যে বিশেষ পিক্সেল প্রতিনিধিত্বমূলক আছে. তারপর একটি মধ্যে fwrite লুপ জন্য বিবৃতি বাঁধা যখন আপনি লিখুন, আপনি কি করতে চাইবেন হয় যে আপনার outfile মধ্যে অনেকবার প্রয়োজন হিসাবে এটি লিখেছেন. এটা সহজ যথেষ্ট. শুধু মূলত লিখন পদ্ধতি n কতবার অনুভূমিকভাবে এটি পরা পুনরাবৃত্তি. কিন্তু তারপর আমরা আমাদের প্যাডিং পরিবর্তন করতে হবে মনে রাখা আছে. পূর্বে, বলতে আমরা দৈর্ঘ্য 3 কিছু ছিল. তারপর আমরা কত প্যাডিং মধ্যে যোগ করবেন? শুধুমাত্র আর একটি 4 এটি একটি একাধিক করতে. কিন্তু আমরা বলতে n = 2 দ্বারা করছি এই ছবিটি বিশেষ স্কেলিং. আমি তখন কতগুলি নীল পিক্সেল আমরা শেষে থাকবে? আমরা 6 থাকবে. 1, 2, 3, 4, 5, 6. ঠিক আছে. 6 4 একাধিক নয়. 4 কাছের একাধিক কি? যে যাও 8 হতে যাচ্ছে. তাই আসলে আমরা সেখানে প্যাডিং এর মধ্যে 2 টি অক্ষর আছে করছেন যাচ্ছে. কেউ যদি আমরা প্যাডিং নিরূপণ একটি সূত্র আছে মনে রাখা এবং যেখানে যে হতে পারে? [শ্রবণাতীত ছাত্র প্রতিক্রিয়া] >> হ্যাঁ, copy.c. রাইট. Copy.c মধ্যে একটি সূত্র কত প্যাডিং আপনার গণনা পর্যন্ত একটি বিটম্যাপ ইমেজ নির্দিষ্ট প্রস্থ দেওয়া. আমি তখন কি দেয়া হবে এই দরকারী হতে পারে যখন আপনি একটি নির্দিষ্ট পরিমাণ প্যাডিং মধ্যে যোগ করতে হবে প্রকৃতপক্ষে জিনিসটা কত প্যাডিং আপনাকে যুক্ত করতে হবে. কিন্তু এক নোট যদিও, যে আপনি নিশ্চিত যে আপনি সঠিক মাপ ব্যবহার করছেন করতে চাই. শুধু সতর্কতা অবলম্বন করা আবশ্যক কারণ মূলত আপনি যাচ্ছেন দুই বিটম্যাপ ইমেজ সাথে ডিল করা হবে. আপনি কি নিশ্চিত যে আপনি সঠিক ব্যবহার করছেন করতে চাই. আপনি যখন outfile জন্য প্যাডিং করছি বিবেচক, আপনি outfile প্রস্থ ব্যবহার করতে চান এবং. আগের এক প্রস্থ না গ্রেট. তজ্জাতীয় পুরো বিটম্যাপ ইমেজ অনুভূমিকভাবে stretching যত্ন নেয়. কিন্তু আসলে কি আমরা যেতে চাই তা না উল্লম্বভাবে হিসাবে ভাল প্রসারিত করুন. এটি একটি সামান্য বিট trickier কারণ যখন আমরা একটি সারি অনুলিপি সমাপ্ত করেছি যাচ্ছে এবং যে সারি লেখা, আমাদের কার্সার শেষ হতে যাচ্ছে. তাই আপনি যদি আমরা আবার পড়ুন, তারপর পরের লাইন এ পড়া যাচ্ছে. তাই আমরা যা করে যেতে চাই হয় ধরনের যারা সারি আবার অনুলিপি করার একটি উপায় খুঁজে পাওয়া অথবা যে সারি গ্রহণ এবং তারপর এটা আবার rewriting শুধু ধরনের. হিসাবে আমি ধরনের উদ্দিষ্ট, বিভিন্নরূপে এই কাজ করতে হয়. আপনি কি হতে পারে হিসাবে আপনি ভিতর দিয়ে যাচ্ছে নির্দিষ্ট scanline মাধ্যমে পড়ি এবং প্রয়োজনীয় হিসাবে এটি পরিবর্তন, তারপর দোকান ধরনের একটি অ্যারের মধ্যে যারা পিক্সেল সব. তারপর পরে আপনি কি জানেন যে আপনি যে অ্যারের মুদ্রণ আবার আউট করতে হবে, এবং যাতে আপনি শুধু যে অ্যারের কি সেটা ব্যবহার করতে পারেন. আরেকটি উপায় হল এটা আপনি এক সারি নিচে অনুলিপি করতে পারিনি, যে যা আপনাকে আবার কপি করা আবশ্যক বুঝতে, তাই আসলে আপনার কার্সার সরানোর জন্য, এবং যে পদ্ধতিটির fseek ব্যবহার করা যাচ্ছে. আপনি সমস্ত উপায় আপনার কার্সার পিছান এবং তারপর কপি করতে পারে প্রক্রিয়া আবার পুনরাবৃত্তি. তাই আপনি যদি আমাদের আরোহী সংখ্যা হল n, তারপর কতবার আমরা ফিরে যেতে হবে এবং একটি লাইন পুনর্লিখন? >> [ছাত্রদের] হবে - 1. >> হ্যাঁ, নিখুঁত. এন - 1. আমরা এটা করেছেন একবার ইতিমধ্যে, অতএব আমরা ফিরে যাওয়াকে প্রক্রিয়ার পুনরাবৃত্তি করতে চাইবেন এন - ২ 1 পরিমাণ. ঠিক আছে. তাই সেখানে আপনি আপনার পুনরায় মাপ ফাংশন আছে. এখন আমরা সত্যিই মজার অংশ, আমার প্রিয় pset, যা উদ্ধার করতে পারেন. পরিবর্তে বিটম্যাপ, এই সময় আমরা JPEGs সঙ্গে লেনদেন করছেন. আমরা আসলে করছি দেওয়া ঠিক JPEGs একটি ফাইল হইনি, আমরা মূলত একটি কাঁচা মেমরি কার্ড ফরম্যাট করছি দেওয়া. তাই এই তথ্য এবং আবর্জনা মানসহ একটি প্রারম্ভে বিট রয়েছে, এবং তারপর শুরু হয় এবং এটি কোন JPEG ফাইল একটি গুচ্ছ আছে. যাইহোক, আমরা একটি কার্ড হস্তান্তর করছেন যেখানে আমরা ফটো মুছে ফেলেন; মূলত, আমরা যেখানে ফটো কার্ড মধ্যে অবস্থিত হয় বিস্মৃত করেছি. তখন আমাদের মধ্যে উদ্ধার টাস্ক এই কার্ড ফরম্যাট মাধ্যমে যেতে হয় এবং আবার সেই ছবি খুঁজে পেতে. সৌভাগ্য যে, কোন JPEG ফাইল এবং কার্ড ফাইল কাঠামো একটি বিট সহায়ক. এটা স্পষ্টভাবে হয়েছে একটি বিট trickier থাকতে পারে যদি এটি এই বিশেষ বিন্যাসে ছিল না. প্রতিটি JPEG ফাইল দুটো সম্ভব সিকোয়েন্স, উপরে তালিকাভুক্ত সঙ্গে শুরু হয়. মূলত, যখনই আপনি কোনো নতুন JPEG ফাইল আছে, এটি হয় ক্রম ffd8 ffe0 অথবা অন্য এক, ffd8 ffe1 সঙ্গে শুরু হয়. আরেকটি বড় বিষয় জানতে হয় যে contiguously JPEGs সংরক্ষণ করা হয়. সুতরাং যখনই এক JPEG ফাইল শেষ হয়, অন্য এক শুরু. সুতরাং হয় মধ্যবর্তী মান সেখানে কোন ধরনের যায় না. আপনি একবার কোন JPEG শুরু আঘাত, যদি আপনার আগে থেকেই করা হয়েছে করেছি কোন JPEG পড়া, আপনি কি জানেন যে আপনি আগের এবং পরের এক শুরুর শেষ আঘাত করেছেন. এই ধরণের দৃশ্য কল্পনা করুন, আমি একটি পরিকল্পিত হয়েছে. JPEGs সম্পর্কে আরেকটি ব্যাপার হল আমরা 512 বাইট ক্রমের তাদের একটি সময়ে পড়তে পারেন, একই সঙ্গে কার্ড শুরুতে. আমরা প্রতি একক বাইট কারণ যে স্তন্যপান করে চেক করার দরকার নেই. তাই, আমরা কি করতে পারি আসলে 512 বাইট অনুসারে শুধুমাত্র একটি সময়ে পড়া এবং তারপর, পরিবর্তে মধ্যে যারা একটু ছোট টুকরা করে চেকিং, আমরা মাত্র 512 বাইট শুরুতে চেক করতে পারেন. এই ছবিতে মূলত,, আপনি কি দেখতে কার্ড প্রারম্ভে হয়, আপনি যে প্রকৃত মান JPEGs নিজেদের সত্যিই প্রাসঙ্গিক হয় না আছে. কিন্তু তারপর আমি কি আছে একটি তারকা দুটি কোন JPEG জন্য শুরু ক্রম একটি ইঙ্গিত. তাই যখনই আপনি একটি তারকা দেখতে, আপনি কি জানেন যে আপনি একটি JPEG ফাইল আছে. এবং তারপর প্রতি JPEG ফাইল যাও 512 বাইট কিছু একাধিক হতে যাচ্ছে কিন্তু অগত্যা একই একাধিক না. উপায় যে আপনি কি জানেন যে, আপনি অন্য কোন JPEG আঘাত করেছেন তা যদি আপনি অন্য তারকা আঘাত, অন্য বাইটের অনুক্রম শুরু. তারপর আপনি কি এখানে আছে আপনার লাল JPEG ফাইল অব্যাহত আছে পর্যন্ত আপনি একটি তারকা আঘাত, এর ফলে একটি নতুন রঙ দ্বারা চিহ্নিত হয়. আপনি এবং তারপরে অবিরত আপনি অন্য তারকা আঘাত, আপনি অন্য কোন JPEG আঘাত, আপনি শেষ পর্যন্ত সমস্ত উপায় অবিরত. আপনি শেষ ছবি এখানে এসেছি, গোলাপী এক. আপনি শেষ পর্যন্ত যেতে আপনি ফাইলটি অক্ষর শেষ আঘাত. এটি সত্যিই কার্যকর হবে. কয়েক প্রধান এখানে takeaways: কার্ড ফাইলটি কোন JPEG গৃহযুদ্ধ শুরু হয় না, কিন্তু একবার কোন JPEG শুরু হয়, JPEGs সব পার্শ্বে এক অন্য সাইড জমা হয়. উদ্ধার জন্য কিছু pseudocode. প্রথমত, আমরা আমাদের কার্ড ফাইল খুলতে যাচ্ছেন, এবং যে আমাদের ফাইল ইনপুট / আউটপুট ফাংশন ব্যবহার করা হচ্ছে. আমরা নিম্নোক্ত প্রক্রিয়া পর্যন্ত আমরা ফাইলের শেষে পৌঁছেছেন পুনরাবৃত্তি চলুন. আমরা এক সময়ে 512 বাইট পড়া চলুন. এবং কি আমি এখানে বলেন, হয় আমরা একটি বাফারের মধ্যে এটি সংরক্ষণ চলুন, যারা 512 বাইট তাই মূলত পর্যন্ত আমরা জানতে পারি যে ঠিক কি তাদের সাথে না রাখা. তারপর কি আমরা করতে হয় আমরা কি আমরা একটি নক্ষত্র অথবা আঘাত না তা চেক করতে চান. যদি আমরা একটি তারকা আঘাত করেছি, যদি আমরা শুরু সিকোয়েন্স এক আঘাত করেছেন, তারপর আমরা জানি যে আমরা একটি নতুন JPEG ফাইল আঘাত করেছেন. আমরা কি করতে হয় চাইবেন আমরা আমাদের pset4 ডিরেক্টরির মধ্যে নতুন ফাইল তৈরি করতে যাচ্ছেন যে ফাইল তৈরীর অবিরত. তবে, যদি ইতিমধ্যে আমরা আগে করেছি কোন JPEG তৈরি, তারপর আমরা এই ফাইলটি এবং শেষ pset4 ফোল্ডারে এটি push করতে চান, যেখানে আমরা যে ফাইল সংরক্ষিত থাকবে কারণ যদি আমরা যে আমরা যে JPEG ফাইল শেষ করেছি উল্লেখ না, তারপর আমরা মূলত একটি অনির্দিষ্ট পরিমাণ থাকবে. JPEGs কখনও শেষ হয়ে যাবে. তাই আমরা নিশ্চিত যে, যখন আমরা একটি JPEG ফাইল এবং পড়া লেখা করছি যে করতে চাই, আমরা বিশেষভাবে যে যাতে পরবর্তী এক খোলা বন্ধ করতে চান. আমরা কয়েকটি জিনিস চেক করতে চাইবেন. আমরা কি একটি নতুন কোন JPEG শুরু সময়ে আমরা আমাদের বাফার সঙ্গে হন চেক করতে চান এবং এছাড়াও যদি ইতিমধ্যে আমরা কোন JPEG পাওয়া আগে কারণ যে আপনার পদ্ধতি সামান্য পরিবর্তন করতে হবে. আমি তখন পরে সমস্ত উপায় মাধ্যমে আপনি যেতে পারেন এবং আপনি ফাইলের শেষে আঘাত, তারপর কি করতে চাইবেন হয় আপনি যে সমস্ত ফাইল বর্তমানে খোলা বন্ধ করতে চাইবেন. যে সম্ভবত শেষ হতে JPEG ফাইল যে আপনি থাকবে, সেইসাথে কার্ড ফাইলটি আপনার সাথে যে আচরণ করা হয়েছে করেছি. সর্বশেষ বাধা আমরা মোকাবেলা করার প্রয়োজন হয় কিভাবে আসলে একটি JPEG ফাইল করা এবং কিভাবে ঐ ফোল্ডারে এটি ধাক্কা. pset প্রয়োজন যে প্রতি কোন JPEG যা আপনি নিম্নলিখিত বিন্যাসে হতে, যেখানে আপনি নম্বর আছে. jpg. নম্বর, এমনকি যদি 0, আমরা এটি 000.jpg. যখনই আপনি আপনার প্রোগ্রামে কোন JPEG খুঁজে, আপনি যাতে এটি পাওয়া গেছে এর মধ্যে এটি নাম দিতে চান চলুন. এর মানে কি? আমরা কিভাবে আমরা পেয়েছি অনেক ট্র্যাক রাখতে ধরনের প্রয়োজন এবং কি কোন JPEG প্রতিটি সংখ্যা হওয়া উচিত. এখানে আমরা sprintf ফাংশন সুবিধা গ্রহণ করতে যাচ্ছেন. অনুরূপ printf, যা কপি করে প্রিন্ট শুধু ধরনের একটি টার্মিনাল মধ্যে মান আউট, sprintf ছাপে ফোল্ডারের মধ্যে ফাইল. এবং তাই এই যদি আমি sprintf, শিরোনাম ছিল, না এবং তারপর সেখানে স্ট্রিং হবে, এটি 2.jpg আউট প্রিন্ট করা হবে. Assuming যে আমি আমার ফাইলগুলি সঠিকভাবে বন্ধ করেছি, যে ফাইলটি আমি আউট লেখা হয়েছে থাকতে হবে. কিন্তু একটি ব্যাপার হল কোড যে আমি এখানে আছে না কি pset প্রয়োজন পুরোপুরি সন্তুষ্ট না. pset প্রয়োজন যে দ্বিতীয় JPEG ফাইল নামে পরিবর্তে মাত্র 2 002 করা উচিত. সুতরাং যখন আপনি মুদ্রণ নামের আউট করে, সম্ভবত আপনার সামান্য প্লেসহোল্ডার পরিবর্তন করতে চাইতে পারেন. কেউ কি মনে রাখবেন কিভাবে আমরা অতিরিক্ত ফাঁকা স্থানের জন্য অনুমতি দেয় যখন আমরা কিছু প্রিন্ট? হাঁ. >> [ছাত্রদের] আপনি সাইন শতাংশ এবং 2 মধ্যে একটি 3 করান. >> হ্যাঁ, নিখুঁত. আপনি এই ক্ষেত্রে একটি 3 রাখা কারণ আমরা 3 জন্য স্থান চাইবেন. % 3d সম্ভবত দিতে 002.jpg পরিবর্তে 2 আপনি চান. sprintf ফাংশন মধ্যে প্রথম যুক্তি আসলে একটি গৃহস্থালি অ্যারে, যা আমরা পূর্বে স্ট্রিং হিসাবে জানত. যারা হবে, একটি অস্থায়ী সংগ্রহস্থলের মত আরো ধরনের মাত্র, পরিসমাপ্তি স্ট্রিং সঞ্চয়. আপনি কি সত্যিই এই সঙ্গে আচরণ করা যাবে না, কিন্তু আপনি তা অন্তর্ভুক্ত করা প্রয়োজন. বুদ্ধিমান যে সমস্ত ফাইল নামের সংখ্যা, যা লাগে তিনটি অক্ষর আপ আছে, এবং তারপর jpg., কতদিন এই অ্যারে হওয়া উচিত? একটি নম্বর নিক্ষেপ আউট. কত শিরোনামে অক্ষর নামে,? তাই 3 হ্যাশট্যাগ, সময়সীমার জন্য jpg আছে. >> [ছাত্রদের] 7. >> 7. বেশ নেই. আমরা 8 চান যাচ্ছে না কারণ আমরা নাল টারমিনেটর জন্য পাশাপাশি মঞ্জুরি দিতে চান করছি. অবশেষে, শুধুমাত্র প্রক্রিয়া যে আপনার জন্য কাজ করা উদ্ধার করব আঁকতে আউট, আপনি শুরুতে কিছু তথ্য আছে. আপনি অবিরত যতক্ষন না আপনি কোন JPEG ফাইল খুঁজে পেতে শুরু, এবং যে দুটি শুরু অনুক্রমের হয় এক হতে পারে. আপনি পড়া রাখা. এখানে প্রতিটি স্ল্যাশ 512 বাইট প্রতিনিধিত্ব করে. পড়ার জন্য আপনি, রাখা পড়া পর্যন্ত আপনি অন্য শুরু ক্রম সম্মুখীন রাখা. আপনি একবার আছে যে, আপনি বর্তমান কোন JPEG শেষ - এই ক্ষেত্রে, এটা এক লাল, তাই আপনার আর যে শেষ করতে চান. আপনি sprintf যে আপনার pset4 ফোল্ডার মধ্যে নাম করতে চান, তাহলে একটি নতুন কোন JPEG এবং তারপর খুলুন পড়া উপর রাখতে চান যতক্ষন না আপনি পরের সম্মুখীন. পড়ার রাখুন, পড়া বন্ধ না করা, এবং পরিশেষে, তাহলে অবশেষে, আপনি ফাইলের শেষে পৌঁছানোর চলুন, এবং তাই আপনার শেষ কোন JPEG বন্ধ করুন যে আপনার সাথে কাজ ছিল চাইবেন, sprintf যে আপনার pset4 ফোল্ডার, এবং তারপর আপনি যে সব ছবি অর্জিত করেছি তাকান. যারা ছবি আসলে CS50 কর্মীদের ছবি, এবং তাই এই হল যেখানে pset মধ্যে বোনাস মজা অংশ আসে হয় আপনি যে ছবি মধ্যে টিএফএস আপনার বিভাগে প্রতিদ্বন্দ্বী হয় এবং তাদের সাথে ছবি নিতে যে আপনি pset সম্পন্ন করেছি প্রমাণ এবং তাই আপনি যা কর্মী সদস্যদের ছবি আছে দেখতে পারেন. আমি তখন আপনি কর্মীদের সঙ্গে ছবি নিতে. কখনও কখনও আপনি সেগুলি মনে করে পেছনে তাড়া করতে হবে. সম্ভবত তাদের কিছু আপনার কাছ থেকে দূরে চালানোর চেষ্টা করা হবে. তাদের সঙ্গে ছবি নিতে. এটি একটি চলমান বিষয়. এটা যখন pset কারণে কারণে হইনি. নির্দিষ্ট সময়সীমা বৈশিষ্ট ঘোষণা করা হবে. আপনার অধ্যায় সঙ্গে একসঙ্গে তারপর, যেটা বিভাগে ছবি লাগে অধিকাংশ কর্মী সদস্যদের সাথে একটি বেশ ভালো পুরস্কার জিততে হবে. যে উদ্দীপনা পেতে ধরনের আপনার pset4 সমাপ্ত যত দ্রুত সম্ভব কারণ তখন আপনি ব্যবসা পেতে বাড়তেও পারে সব বিভিন্ন CS50 কর্মী সদস্যদের নিচে হান্টিং. এটা বাধ্যতামূলক নয় যদিও, তাই একবার আপনি ছবি পাবেন, তারপর আপনি pset4 দিয়ে সমাপ্ত হয়. এবং আমি 4 Walkthrough সঙ্গে, সমাপ্ত তাই আপনাকে ধন্যবাদ সব আসছে জন্য করছি. ফরেনসিক সাথে সৌভাগ্য কামনা করছি. [সাধুবাদ] [CS50.TV]