[সঙ্গীত বাজাচ্ছি] ZAMYLA Chan: এটা মিস Scarlett ছিল পিলসুজ সঙ্গে. রহস্যময় গল্প? ভাল, আমরা খুঁজে বের করতে যাচ্ছেন. বোর্ড খেলা সুরুক, আপনি হতে পারে একটি শারীরিক লাল চিত্র দেওয়া. এবং যে ছবিটি খুব লাল এবং হয় তিলকিত, এবং আপনার কাজ হল গোপন বার্তা প্রকাশ করা. এবং সাধারণত আপনি একটি লাল সাথে উপলব্ধ করছি কাচ, অথবা একটি লাল পর্দা যে গোপন বার্তা প্রকাশ করা. ভাল, আমরা যে অনুকরণমূলক চলুন. রহস্যময় গল্প, আপনি একটি বিটম্যাপ ইমেজ দেওয়া করছি যে খুব তিলকিত এবং লাল দেখায় এবং তারপর রহস্যময় গল্প প্রোগ্রাম চালানো একটি লুকানো বার্তা প্রকাশ করা. সুতরাং আসুন পদক্ষেপ মধ্যে এই বিরতি দেওয়া. প্রথমত, আপনি ফাইলটি খুলতে চান - আপনি দেওয়া করছি যে খেই. এবং তারপর আরো একটি তৈরি রায় বিটম্যাপ ফাইল. তারপর আপনি বিটম্যাপ আপডেট করতে চান রায় outfile জন্য তথ্য শিরোলেখ. পরে যে আরও. এবং তারপর আপনি মধ্যে পড়তে যাচ্ছেন খেই, scanline, পিক্সেল দ্বারা পিক্সেল, হিসাবে পিক্সেল রং পরিবর্তন প্রয়োজনীয়, এবং লেখার রায়ের মধ্যে যারা - মধ্যে পিক্সেলের দ্বারা পিক্সেল রায় scanline. কিভাবে আমরা এই বিষয়ে যাওয়া শুরু করব? ওয়েল, সৌভাগ্য যে, আমরা copy.c আছে ডিস্ট্রিবিউশন কোড ইন. এবং এই প্রমাণ করতে যাচ্ছে আমাদের কাছে বেশ উপযোগী. Copy.c, একটি ফাইল খোলে যে সার্চ তারপর infile এর হেডার, এবং আপডেট outfile এর হেডার. এবং তারপর এটা প্রতিটি পিক্সেল সার্চ তারপর scanline, পিক্সেল দ্বারা পিক্সেল, এবং outfile মধ্যে যে পিক্সেল লিখেছেন. সুতরাং, আপনার প্রথম পদক্ষেপ হতে পারে নিম্নলিখিত চালানো হবে টার্মিনালে কমান্ড - cp copy.c whodunit.c. এই একটি কপি তৈরি হবে copy.c whodunit.c নামে. তাই খুলতে আমাদের প্রথম পদক্ষেপ ফাইল, ভাল, একটি সঠিক আছে copy.c. মধ্যে যে প্রতিরূপ তাই আমি যে তাকান আপনি ছেড়ে দেব. আমরা এই pset মধ্যে দিয়ে হয় লেনদেন করছেন কি ফাইল ইনপুট / আউটপুট, মূলত ফাইল গ্রহণ, , পড়া, লেখা, তাদের সম্পাদনা. কিভাবে আপনি প্রথম একটি ফাইল খুলতে হয়? হ্যাঁ, আপনি একটি ফাইল ডিক্লেয়ার চলুন পয়েন্টার, এবং তারপর আপনি কল ফাংশন fopen. পাথ, বা যে নামে Pass ফাইল, এবং তারপর আপনি চান যে মোড ইন যে ফাইল খোলার জন্য একটি দ মধ্যে পাসিং খুলবে পড়ার জন্য foo.bmp. যেহেতু একটি W কথা প্রসঙ্গে সঙ্গে fopen করবে খোলা bar.bmp, ফাইল লেখার জন্য এবং আসলে এটি সম্পাদনা. তাই এখন আমরা ফাইল খোলা করেছি যে, আমাদের পরবর্তী ধাপে হেডারের তথ্য আপডেট করতে হয় outfile জন্য. একটি হেডার তথ্য কি? ওয়েল, প্রথম আমরা জানতে হবে কি একটি বিটম্যাপ হয়. একটি বিটম্যাপ শুধুমাত্র একটি সহজ হয় বাইট ব্যবস্থা. এবং তারা এই ফাইলে ঘোষণা করছি একটি গুচ্ছ সঙ্গে এখানে, bmp.h, কি একটি বিটম্যাপ এর তথ্য আসলে বাইরে তৈরি করা হয়. কিন্তু কি আমরা সত্যিই যত্নশীল হয় বিটম্যাপ ফাইল হেডার, এখানে ডান, এবং এখানে উপর বিটম্যাপ তথ্য হেডার,. হেডার কয়েক হাজার গঠিত হয় খুব দরকারী প্রমাণ করা হবে যে ভেরিয়েবল. যা biSizeImage পর্যন্ত, বাইট ছবিটি মোট আয়তন. এবং এই পিক্সেল এবং প্যাডিং রয়েছে. প্যাডিং খুবই গুরুত্বপূর্ণ, কিন্তু আমরা পরে যে পাবেন. BiWidth প্রস্থ প্রতিনিধিত্ব করে পিক্সেল বিয়োগ প্যাডিং এ ছবিটি. BiHeight এছাড়াও তারপর উচ্চতা হল পিক্সেলে ছবিটি. এবং তারপর BITMAPFILEHEADER এবং আমি হিসাবে উল্লেখ করেছে BITMAPINFOHEADER, এর আগে, যারা প্রতিনিধিত্ব করছেন structs হিসাবে. সুতরাং, আপনি ফাইল হেডার ব্যবহার করতে সক্ষম নয় নিজেই, কিন্তু আপনি পেতে চাইবেন ভিতরে ঐ ভেরিয়েবল. ঠিক আছে. তাই কিভাবে আমরা হেডারের তথ্য আপডেট করব? ওয়েল, প্রথম আমরা দেখতে আছে আমরা কিনা থেকে কোনো তথ্য পরিবর্তন প্রয়োজন যাও infile, খেই, outfile, রায়. কিছু এই ক্ষেত্রে পরিবর্তিত হচ্ছে? ভাল, আসলে, আমরা চলুন না, কারণ শুধু রং পরিবর্তন করা হবে. আমরা ফাইল পরিবর্তন করা যাচ্ছে না আকার, ছবির আকার, প্রস্থ, বা উচ্চতা. তাই আপনার দ্বারা এখন জন্য ঠিক করছি শুধু প্রতিটি পিক্সেল কপি. ঠিক আছে. তাই এখন আমি কি কিভাবে আমরা আসলে তাকান ফাইল থেকে প্রতি পিক্সেল পড়তে পারেন. আরেকটি ফাইল ইনপুট / আউটপুট ফাংশন করে আসা হবে - 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 চার বাইটের একটি একাধিক হতে হয়েছে. এবং পিক্সেল সংখ্যা নয় যদি চার একাধিক, তাহলে আমরা যুক্ত করতে হবে এই প্যাডিং. প্যাডিং মাত্র 0 সেঃ প্রতিনিধিত্ব করেন. সুতরাং, কিভাবে আমরা লিখতে, অথবা এই পড়া হয়? ওয়েল, এটা দেখা যাচ্ছে আপনি না করতে পারেন যে আসলে fread প্যাডিং, কিন্তু আপনি যা করতে পারেন এটা নিরূপণ. এই ক্ষেত্রে, খেই এবং রায় একই প্রস্থ আছে, তাই প্যাডিং একই. আর প্যাডিং, আপনি দেখতে পাবেন copy.c সালে গণনা করা হয় নিচের সূত্র সঙ্গে - bi.biWidth বার sizeof (RGBTRIPLE) করবে না কত বাইট BMP আমাদের দিতে প্রত্যেক সারিতে আছে. সেখান থেকে, modulos এবং subtractions 4 নিরূপণ করতে পারেন সঙ্গে কিভাবে অনেক বাইট যোগ করা হবে যাতে প্রথম বাইট একাধিক প্রতি সারিতে চারটি হয়. এখন আমরা জন্য সূত্র আছে আমরা প্রয়োজন কত প্যাডিং, এখন আমরা তা লিখতে পারেন. এখন, আমি আগে উল্লেখ করেছে, প্যাডিং মাত্র 0 সেঃ হয়. সুতরাং সেই ক্ষেত্রে, আমরা শুধু নির্বাণ করছি এই ক্ষেত্রে একটি 0 একটি গৃহস্থালি, আমাদের outptr - আমাদের outfile. সুতরাং যে শুধু fputc হতে পারে 0, কমা outptr. সুতরাং, আমরা মধ্যে পড়া করছি, যখন আমাদের ফাইল, ফাইল ইনপুট / আউটপুট উপর নজর রাখা হয়েছে আমাদের কিছু যাদের ফাইল অবস্থান ফাইল অবস্থান সূচক বলা. একটি কার্সার হিসাবে মনে করে. মূলত, এটা প্রত্যেক সময় অগ্রগতি আমরা fread, কিন্তু আমরা যে খুব, এটি উপর নিয়ন্ত্রণ. ফাইল অবস্থান নির্দেশক সরানোর জন্য, আপনি ফাংশন fseek ব্যবহার করতে পারেন. Inptr ফাইল প্রতিনিধিত্ব করে কোথায় আপনি চাইছেন করছি পয়েন্টার, পরিমাণ বাইট সংখ্যা যে আপনি থেকে তারপর কার্সার সরানোর জন্য, এবং চাই রেফারেন্স বিন্দু সম্পর্কিত আপনার কার্সার যেখানে থেকে. আপনি SEEK_CUR মধ্যে পাস, যে বর্তমান প্রতিনিধিত্ব করে ফাইলে অবস্থান. অথবা আপনি অন্য কিছু প্যারামিটার ব্যবহার করতে পারেন. সুতরাং, আমরা এড়িয়ে যাও fseek ব্যবহার করতে চাইতে পারেন এ ফাইলের প্যাডিং উপর. আপনি আটকে করছি এবং আবার,, আছে copy.c. মধ্যে যে একটি উদাহরণ তাই এখন আমরা ফাইল খোলা করেছি, খেই, এবং রায়. আমরা হেডারের তথ্য আপডেট করেছি আমাদের রায়, কারণ প্রতি বিটম্যাপ একটি হেডার প্রয়োজন. আমরা তখন খেই এর মধ্যে পড়েছি scanline, পিক্সেল দ্বারা পিক্সেল, পরিবর্তন প্রত্যেক রং হিসাবে প্রয়োজনীয়, এবং মধ্যে যারা লেখা রায়, পিক্সেল দ্বারা পিক্সেল. আপনি রায় খুলতে, আপনি দেখতে পারেন যারা অভিযুক্ত ব্যক্তি, বা কি গোপন বার্তা. আমার নাম Zamyla, এবং এই রহস্যময় গল্প ছিল.