1 00:00:00,000 --> 00:00:02,700 [Powered by Google Translate] [Walkthrough - সমস্যা সেট 4] 2 00:00:02,700 --> 00:00:05,000 [Zamyla Chan - হার্ভার্ড বিশ্ববিদ্যালয়] 3 00:00:05,000 --> 00:00:07,340 [এটি CS50. - CS50.TV] 4 00:00:08,210 --> 00:00:11,670 ঠিক আছে. হ্যালো, প্রত্যেককে, Walkthrough 4 যাও এবং স্বাগত জানাই. 5 00:00:11,670 --> 00:00:14,270 >> আজ আমাদের pset হয় ফরেনসিক. 6 00:00:14,270 --> 00:00:18,080 ফরেনসিক একটি সত্যিই মজার pset যে বিটম্যাপ ফাইলের সাথে ডিল অন্তর্গত 7 00:00:18,080 --> 00:00:21,550 আবিষ্কার যিনি একটি অপরাধের প্রতিশ্রুতিবদ্ধ. 8 00:00:21,550 --> 00:00:24,200 তারপর আমরা কিছু বিটম্যাপ ফাইলের মাপ পরিবর্তন চলুন, 9 00:00:24,200 --> 00:00:27,780 তারপর আমরা সত্যিই একটি মজার অংশ নামক উদ্ধার সঙ্গে মোকাবিলা করছি যাচ্ছে, 10 00:00:27,780 --> 00:00:31,160 যা মূলত আমরা একটি মেমরি কার্ড করছি হস্তান্তর 11 00:00:31,160 --> 00:00:34,350 যা ঘটনাক্রমে কেউ কেউ তাদের সমস্ত ফাইল মুছে ফেলা হয়েছে, 12 00:00:34,350 --> 00:00:38,860 এবং আমরা এই ফাইল পুনরুদ্ধার জিজ্ঞাসা করছি. 13 00:00:38,860 --> 00:00:42,910 >> কিন্তু প্রথম, আগে আমরা pset ঢোকা, সত্যিই আমি চাই সবাই অভিনন্দন জানাচ্ছি. 14 00:00:42,910 --> 00:00:45,230 আমরা এই কোর্সের মিডপয়েন্ট এ সম্পর্কে করছি. 15 00:00:45,230 --> 00:00:50,070 ক্যুইজ 0 আমাদের পেছনে, এবং আমরা pset4 করেন, তাই মূলত, আমরা halfway করছি. 16 00:00:50,070 --> 00:00:55,490 আমরা একটি দীর্ঘ পথ করেছি আসা যদি আপনি আপনার psets, pset0 এবং pset1 চেহারা ফিরে যাও, 17 00:00:55,490 --> 00:00:57,300 যাতে সম্পর্কে নিজেকে অভিনন্দন জানাচ্ছি, 18 00:00:57,300 --> 00:01:00,760 এবং আমরা সত্যিই মজার কিছু উপাদান মধ্যে পেতে যাচ্ছেন. 19 00:01:00,760 --> 00:01:07,070 >> তাই এই pset জন্য আমাদের টুলবাক্স, আবার, পরিবর্তে উবুন্টু জন্য yum-y সংস্করণ, 20 00:01:07,070 --> 00:01:13,890 আমরা শুধু update50 চালাতে পারবেন যদি আপনি সংস্করণ 17.3 এবং উপরের প্রয়োগ করেন. 21 00:01:13,890 --> 00:01:17,380 সুতরাং update50 চালানো নিশ্চিত করা - এটা অনেক সহজ, কয়েক কম অক্ষর - 22 00:01:17,380 --> 00:01:20,640 নিশ্চিত করুন যে আপনি প্রয়োগ সর্বশেষ সংস্করণ ব্যবহার করেন না. 23 00:01:20,640 --> 00:01:25,410 বিশেষত এটা গুরুত্বপূর্ণ update50 যখন আমরা শুরু CS50 চেক ব্যবহার করে. 24 00:01:25,410 --> 00:01:28,700 তাই নিশ্চিত করুন যে আপনি যে কি না. 25 00:01:28,700 --> 00:01:30,760 >> এই বিভাগের সমস্ত pset জন্য, 26 00:01:30,760 --> 00:01:34,350 আমরা ফাইল ইনপুট এবং আউটপুট সাথে ডিল করা চলুন, আমি ফাইল / O. 27 00:01:34,350 --> 00:01:38,140 আমরা প্রোগ্রাম অ্যারে সঙ্গে কারবার যে অনেক বেশী চালু করা চলুন 28 00:01:38,140 --> 00:01:40,350 প্রতি নির্দেশ ফাইল এবং যে ভালো জিনিষ, 29 00:01:40,350 --> 00:01:43,050 তাই আমরা নিশ্চিত যে আমরা সত্যিই পরিচিত এবং আরামদায়ক করতে চাই 30 00:01:43,050 --> 00:01:47,990 কিভাবে ফাইল মধ্যে ইনপুট এবং আউটপুট সঙ্গে জড়িত. 31 00:01:47,990 --> 00:01:52,080 >> এই pset জন্য ডিস্ট্রিবিউশন কোড ইন একটি ফাইল নামক copy.c, 32 00:01:52,080 --> 00:01:55,280 এবং যে কি আমরা খুঁজে পেতে যাচ্ছেন আমাদের সত্যিই দরকারী হবে 33 00:01:55,280 --> 00:02:00,340 কারণ আমরা শেষ পর্যন্ত চলুন আসলে copy.c ফাইল অনুলিপি 34 00:02:00,340 --> 00:02:05,350 এবং এটি শুধু সামান্য এই সমস্যাটা প্রথমে সেট 2 অংশ অর্জন করতে সক্ষম পরিবর্তনকারী. 35 00:02:05,350 --> 00:02:09,030 >> এবং অতএব হিসাবে আমি আগে উল্লেখ করেছে, আমরা বিটম্যাপ হিসেবে JPEGs সাথে ডিল করা হয়. 36 00:02:09,030 --> 00:02:13,170 তাই সত্যিই কি ঐ ফাইল সংগঠিত কাঠামো অন্তর্দৃষ্টিসম্পন্ন, 37 00:02:13,170 --> 00:02:16,170 কিভাবে আমরা সত্যিই 0 সেঃ structs মধ্যে এবং 1s অনুবাদ করতে পারেন 38 00:02:16,170 --> 00:02:19,040 এবং যে আসলে আমরা বুঝতে এবং ব্যাখ্যা করতে পারেন এবং সম্পাদনা করতে, 39 00:02:19,040 --> 00:02:21,000 যে সত্যিই গুরুত্বপূর্ণ হবে, 40 00:02:21,000 --> 00:02:25,970 কোন JPEG এবং বিটম্যাপ ফাইলের মধ্যে যাতে যাচ্ছে এবং তাদের গঠন প্রতীতি. 41 00:02:25,970 --> 00:02:30,780 >> চলিত হিসাবে Pset4,, প্রশ্নগুলির একটি অধ্যায় শুরু. 42 00:02:30,780 --> 00:02:36,600 যারা ফাইল ইনপুট / আউটপুটের সাথে এবং আপনি যে অভ্যস্ত পেতে চুক্তি হবে. 43 00:02:36,600 --> 00:02:42,520 তারপর অংশ 1 রহস্যময় গল্প, যা আপনি একটি বিটম্যাপ ফাইল দেওয়া করছি 44 00:02:42,520 --> 00:02:45,630 যে লাল বিন্দুর মতো সব ধরনের. 45 00:02:45,630 --> 00:02:52,180 এবং তারপর মূলত আমরা কি করতে যাচ্ছেন এবং এই ফাইলটি শুধুমাত্র নিতে সামান্য সম্পাদনা 46 00:02:52,180 --> 00:02:54,010 মধ্যে একটি সংস্করণ যে আমরা পড়তে পারেন. 47 00:02:54,010 --> 00:02:56,000 মূলত, যখন আমরা, শেষ করব আমরা একই ফাইলে আছে, 48 00:02:56,000 --> 00:03:02,630 ছাড়া আমরা গোপন বার্তা সমস্ত লাল বিন্দু দ্বারা লুকানো দেখতে পারবেন. 49 00:03:02,630 --> 00:03:07,310 তারপর পুনরায় মাপ একটি প্রোগ্রাম যে, একটি ফাইলে দেওয়া 50 00:03:07,310 --> 00:03:11,490 এবং তারপর ফাইলটি যে আউটপুট নাম দেওয়া হয় এবং তারপর একটি নম্বর হিসাবে দেওয়া ভাল, 51 00:03:11,490 --> 00:03:16,850 যে পূর্ণসংখ্যা মান দ্বারা আসলে যে বিটম্যাপ মাপ পরিবর্তন করা হবে. 52 00:03:16,850 --> 00:03:19,240 তারপর সর্বশেষে, আমরা পুনরুদ্ধার pset আছে. 53 00:03:19,240 --> 00:03:24,160 আমরা একটি মেমরি কার্ড দেওয়া হয় এবং তারপর সব ছবিগুলি পুনরুদ্ধার করা আছে 54 00:03:24,160 --> 00:03:25,920 যে ঘটনাক্রমে মুছে ফেলা হয়েছে, 55 00:03:25,920 --> 00:03:31,420 কিন্তু, আমরা জানতে পারবেন, আসলে মোছা এবং না ফাইল থেকে মুছে ফেলা হয়েছে; 56 00:03:31,420 --> 00:03:38,470 আমরা ঠিক মত হারিয়ে যেখানে তারা ফাইল ছিল, কিন্তু আমরা যে পুনরুদ্ধার চলুন. 57 00:03:38,470 --> 00:03:44,950 >> গ্রেট. ফাইলের মধ্যে দিতে যাচ্ছে, I / O, বিশেষত এই যে আপনি একটি ফাংশন ব্যবহার করা হবে পুরো তালিকা. 58 00:03:44,950 --> 00:03:49,840 আপনি ইতিমধ্যে দেখা fopen বুনিয়াদি, fread, এবং fwrite একটি সামান্য বিট, 59 00:03:49,840 --> 00:03:54,350 কিন্তু আমরা কিছু ফাইলে আরও দেখুন চলুন আমি / যেমন fputc হিসাবে হে ফাংশন, 60 00:03:54,350 --> 00:03:56,930 যা শুধু আপনি একটি সময়ে একটি অক্ষর লিখুন, 61 00:03:56,930 --> 00:04:02,000 যাও fseek, যেখানে আপনি কোন ধরনের ফাইল অবস্থান সূচক সম্মুখে এবং পিছনের দিকে সরানো, 62 00:04:02,000 --> 00:04:05,770 এবং তারপর অন্যদের কিছু. কিন্তু আমরা যে ভাগ একটু পরে pset সময় যাবেন. 63 00:04:08,050 --> 00:04:13,100 >> সুতরাং প্রথম ঠিক, ফাইলের মধ্যে পেতে, I / O আগে আমরা pset ঢোকা, 64 00:04:13,100 --> 00:04:19,860 উদাহরণস্বরূপ একটি ফাইল খুলুন,, আসলে আপনি কি আছে যা একটি ফাইল পয়েন্টার সেট করা আছে. 65 00:04:19,860 --> 00:04:22,710 সুতরাং আমরা একটি ফাইল পয়েন্টার * আছে. 66 00:04:22,710 --> 00:04:27,140 এই ক্ষেত্রে, আমি এটা পয়েন্টার একটি কলিং কারণ যে আমার infile করা যাচ্ছে না. 67 00:04:27,140 --> 00:04:33,340 এবং আমি ফাংশন fopen এবং তারপর ফাইলের নাম ব্যবহার করতে যাচ্ছি 68 00:04:33,340 --> 00:04:36,360 এবং তারপর মোডে যা আমি যাচ্ছি ফাইল সাথে ডিল করা. 69 00:04:36,360 --> 00:04:42,080 সুতরাং "r" বা এই ক্ষেত্রে পড়ার জন্য, "W" লিখিতভাবে জন্য, এবং তারপর সংযোজন জন্য "একটি" আছে. 70 00:04:42,080 --> 00:04:44,270 উদাহরণস্বরূপ, যখন আপনি একটি infile সঙ্গে লেনদেন করছেন 71 00:04:44,270 --> 00:04:47,310 এবং সব আপনি করতে চান বিট এবং বাইট সঞ্চিত আছে পড়তে হয়, 72 00:04:47,310 --> 00:04:50,420 তাহলে সম্ভবত আপনি "r" বা আপনার মোড হিসাবে ব্যবহার করতে চান সেটি যাচ্ছে. 73 00:04:50,420 --> 00:04:54,520 যখন আপনি আসলে লিখতে চান, ধরনের একটি নতুন ফাইল তৈরি করতে, 74 00:04:54,520 --> 00:04:57,220 তাহলে কি আমরা করতে যাচ্ছে সেটি আমরা নতুন ফাইল খুলতে যাচ্ছেন 75 00:04:57,220 --> 00:05:02,410 এবং লেখার জন্য "W" মোড ব্যবহার. 76 00:05:02,410 --> 00:05:07,540 >> অতএব যখন আপনি আসলে ফাইলের মধ্যে করছি পড়া, কাঠামো নিম্নরূপ হয়. 77 00:05:07,540 --> 00:05:14,930 প্রথম আপনি struct যে বাইট যে আপনি পড়ি থাকতে হবে পয়েন্টার অন্তর্ভুক্ত. 78 00:05:14,930 --> 00:05:19,830 যাতে যাও বাইট যে আপনি পড়ি শেষে অবস্থান হতে যাচ্ছে. 79 00:05:19,830 --> 00:05:23,360 তারপর আপনি থাকেন যাও আকার নির্দেশ করে যাচ্ছে, পছন্দ মূলত কতগুলি বাইট 80 00:05:23,360 --> 00:05:30,100 আপনার প্রোগ্রাম ফাইলের মধ্যে পড়তে হয়েছে, মূলত আকার এক উপাদান হল, 81 00:05:30,100 --> 00:05:32,620 এবং তারপরে আপনি কতগুলি উপাদান আপনি পড়তে চান নির্দিষ্ট চলুন. 82 00:05:32,620 --> 00:05:34,980 এবং পরিশেষে, তাহলে আপনি যেখানে আপনার কাছ থেকে পড়া করছি জানা আছে, 83 00:05:34,980 --> 00:05:37,580 যাতে আপনার মধ্যে পয়েন্টার হতে যাচ্ছে. 84 00:05:37,580 --> 00:05:41,780 আমি এই রঙ-কোডেড কারণ fread এছাড়াও খুবই fwrite অনুরূপ, 85 00:05:41,780 --> 00:05:47,050 ছাড়া আপনি নিশ্চিত যে আপনি সঠিক ক্রম ব্যবহার করতে চাই, 86 00:05:47,050 --> 00:05:51,960 নিশ্চিত করুন যে আপনি আসলে করছি লেখার বা ডান থেকে ফাইল পড়ার জন্য. 87 00:05:54,910 --> 00:05:58,610 >> সুতরাং হিসাবে তার আগে, যদি আমরা উপাদান হিসাবে ভাল মাপ হিসাবে উপাদানের নম্বর আছে, 88 00:05:58,610 --> 00:06:00,600 তারপর আমরা চারপাশে একটু বিট এখানে বাজাতে পারেন. 89 00:06:00,600 --> 00:06:06,810 বলুন, আমি একটা কুকুর আছে এবং struct অতএব আমি এক সময়ে দুই কুকুর পড়তে চাই. 90 00:06:06,810 --> 00:06:12,450 আমি কি করতে পারে এক উপাদান মাপ হয় বলে এক কুকুর মাপ হবে 91 00:06:12,450 --> 00:06:14,770 এবং আমি আসলে তাদের দুটি পড়তে যাচ্ছি. 92 00:06:14,770 --> 00:06:18,290 বিকল্প হিসাবে, আমি কি করতে পারে আমি শুধু এক উপাদান পড়া যাচ্ছে না বলে 93 00:06:18,290 --> 00:06:21,340 এবং যে এক উপাদান দুটি কুকুর মাপ হতে হবে. 94 00:06:21,340 --> 00:06:24,320 যাতে এর অনুরূপ কিভাবে আপনি মাপ এবং সংখ্যা সহ ধরনের খেলার কাছাকাছি করতে পারেন 95 00:06:24,320 --> 00:06:28,250 কি আপনি আরও বেশি ধারণাসম্পন্ন উপর নির্ভর করে. 96 00:06:28,250 --> 00:06:30,810 >> ঠিক আছে. তাই এখন আমরা লিখিতভাবে ফাইল পেতে. 97 00:06:30,810 --> 00:06:36,880 আপনি যখন একটি ফাইল লিখতে চান, প্রথম যুক্তি আসলে যেখানে আপনি থেকে পড়ি. 98 00:06:36,880 --> 00:06:42,050 যাতে মূলত এর তথ্য যে আপনি ফাইলে লিখতে যাচ্ছি, 99 00:06:42,050 --> 00:06:44,490 যা শেষে আউট পয়েন্টার. 100 00:06:44,490 --> 00:06:47,670 সুতরাং যখন আপনি pset সঙ্গে লেনদেন করছেন, আপনি নিশ্চিত না বিভ্রান্ত হয়ে যায় না. 101 00:06:47,670 --> 00:06:50,480 হয়তো পাশ সংজ্ঞা সাইড আছে. 102 00:06:50,480 --> 00:06:58,090 আপনি পুস্তিকায় সংজ্ঞা মুঠি ধরে টেনে তুলবো মানুষ টাইপ করে এবং তারপর fwrite পারেন, উদাহরণস্বরূপ, 103 00:06:58,090 --> 00:06:59,950 টার্মিনালে, অথবা আপনি এই স্লাইডে পড়ুন ফিরে যেতে পারেন 104 00:06:59,950 --> 00:07:03,570 এবং নিশ্চিত করুন যে আপনি সঠিক ব্যবহার করছেন না. 105 00:07:03,570 --> 00:07:08,700 Fwrite জন্য তাই আবার,, যখন আপনি একটা ফাইল আছে যা আপনি মধ্যে লিখতে চান, 106 00:07:08,700 --> 00:07:14,290 যে যুক্তি শেষ হবে এবং যে যে ফাইল পয়েন্টার একটি হতে যাচ্ছে এর. 107 00:07:14,290 --> 00:07:18,670 আমি তখন যে কিভাবে আমরা লেখার সময় সম্ভবত কয়েক বাইট সঙ্গে কারবার, 108 00:07:18,670 --> 00:07:21,820 কিন্তু বলতে আপনি শুধু মাত্র একটি একক অক্ষর লিখতে চান. 109 00:07:21,820 --> 00:07:25,940 বিটম্যাপ হিসাবে আমরা এই উদাহরণে পরে দেখতে পাবেন যে, আমরা যে ব্যবহার করতে হবে. 110 00:07:25,940 --> 00:07:32,180 এটা যখন আমরা fputc মূলত ব্যবহার করতে পারেন, মাত্র একটি সময়ে একটি অক্ষর বসিয়ে, chr, 111 00:07:32,180 --> 00:07:37,050 মধ্যে ফাইল পয়েন্টার, এবং যে এর বাইরে আমাদের আছে পয়েন্টার. 112 00:07:38,700 --> 00:07:41,560 অতএব যখনই আমরা বা চাইতে একটি ফাইলের মধ্যে লিখুন, 113 00:07:41,560 --> 00:07:44,690 ফাইল যেখানে আমরা অবগত থাকার হয়. 114 00:07:44,690 --> 00:07:47,810 এটা কার্সার ফাইল অবস্থান সূচক কেমন. 115 00:07:47,810 --> 00:07:54,330 তাই যখনই আমরা লিখুন অথবা একটি ফাইল মধ্যে আবার পড়ুন 116 00:07:54,330 --> 00:07:56,760 ফাইলটি শেষ পর্যন্ত যেখানে মনে হয়, 117 00:07:56,760 --> 00:07:59,270 এবং তাই যেখানে কার্সার থেকে চলতে হয়. 118 00:07:59,270 --> 00:08:03,970 এই উপকারী যখন করতে চান করা, বলতে পারেন, একটি নির্দিষ্ট পরিমাণ মধ্যে কোনো কিছু পড়া 119 00:08:03,970 --> 00:08:06,160 এবং তারপর নিম্নলিখিত পরিমাণ মধ্যে পড়তে, 120 00:08:06,160 --> 00:08:10,700 কিন্তু আমরা কখনও ফিরে যান বা প্রকৃতপক্ষে একটি নির্দিষ্ট রেফারেন্স মান থেকে শুরু করতে পারেন. 121 00:08:10,700 --> 00:08:16,870 আমি তখন fseek ফাংশন, এটি কী জন্য আমাদের একটি নির্দিষ্ট ফাইলে যাও কার্সার সরানোর জন্য করতে পারবেন 122 00:08:16,870 --> 00:08:19,680 একটি নির্দিষ্ট সংখ্যক বাইট. 123 00:08:19,680 --> 00:08:24,260 এবং তখন আমরা কি কি আছে যেখানে রেফারেন্স মান নির্দিষ্ট করা হয়. 124 00:08:24,260 --> 00:08:31,520 সুতরাং হয় এটা যেখানে বর্তমানে কার্সার হল থেকে চলে এগিয়ে অথবা পিছিয়ে যান, 125 00:08:31,520 --> 00:08:35,750 অথবা আমরা যে এটি মাত্র ফাইলের শুরুতে থেকে সরানো উচিত নির্দিষ্ট করতে পারেন 126 00:08:35,750 --> 00:08:37,090 বা থেকে ফাইলের শেষে. 127 00:08:37,090 --> 00:08:41,230 এবং যাতে আপনি নেতিবাচক বা ইতিবাচক মান পরিমাণ সম্পন্ন করতে পারেন, 128 00:08:41,230 --> 00:08:44,960 এবং যে কার্সার ধরনের হয় ফরওয়ার্ড বা পিছনের দিকে সরাতে হবে. 129 00:08:46,170 --> 00:08:51,920 >> আগে আমরা অন্যান্য psets ঢোকা, ফাইল সম্পর্কে কোন প্রশ্ন থাকে, I / O? 130 00:08:53,860 --> 00:08:59,990 ঠিক আছে. যেহেতু আমরা আরও উদাহরণ মধ্যে পাওয়ার জন্য, প্রশ্নের জন্য সম্পর্কে থামাতে নির্দ্বিধায়. 131 00:08:59,990 --> 00:09:06,930 >> সুতরাং রহস্যময় গল্প মধ্যে, আপনি একটি বিটম্যাপ ফাইল অনুরূপ এই স্লাইডে লাল এক হস্তান্তর করছি, 132 00:09:06,930 --> 00:09:14,510 এবং এটা ভালো দেখায় - লাল বিন্দু একটি গুচ্ছ - এবং আপনি কি লেখা কি সত্যিই জানি না. 133 00:09:14,510 --> 00:09:23,310 আপনি যদি কটাক্ষ করা, আপনি সামান্য মধ্যম ভিতরে নীলাভ রঙ দেখতে সক্ষম হতে পারে. 134 00:09:23,310 --> 00:09:26,270 মূলত, যে যেখানে টেক্সট সংরক্ষিত হয়. 135 00:09:26,270 --> 00:09:30,270 একটি হত্যাকান্ডের যে কি ছিল, এবং আমরা খুঁজে বের করতে যারা তা প্রয়োজন. 136 00:09:30,270 --> 00:09:36,760 যাতে না, আমরা প্রয়োজন একটি পাঠযোগ্য বিন্যাসে এই ছবিটি রূপান্তর ধরনের. 137 00:09:36,760 --> 00:09:42,740 আপনি যদি কখনও না কখনও কখনও এই সমস্যার সম্মুখীন হয়েছে, সামান্য খেলনা হতে পারে 138 00:09:42,740 --> 00:09:48,510 যেখানে আপনি একটি একটি লাল ফিল্ম সঙ্গে বিবর্ধক কাচ থাকবে. যে কেউ? হাঁ. 139 00:09:48,510 --> 00:09:52,770 সুতরাং আপনি ভালো কিছু হাতি হবে, আপনি একটি কাচ আছে 140 00:09:52,770 --> 00:09:58,130 এটি উপর লাল ফিল্ম সঙ্গে, আপনি চিত্রের উপর রাখা হবে, 141 00:09:58,130 --> 00:10:03,410 এবং আপনার বার্তা তাহাতে লুকানো দেখতে সক্ষম হবে. 142 00:10:03,410 --> 00:10:07,080 আমরা, আছে একটি লাল ফিল্ম সাথে আতস কাঁচ না তাই আমরা ধরনের আমাদের নিজস্ব তৈরি চলুন 143 00:10:07,080 --> 00:10:09,060 এই pset. 144 00:10:09,060 --> 00:10:15,760 তাই ব্যবহারকারীর ইনপুট রহস্যময় গল্প, তারপরে খেই যাও, যাচ্ছে. Bmp দিয়ে শেষ হয়, 145 00:10:15,760 --> 00:10:18,800 যাতে এর infile, যে লাল বিন্দু বার্তা, 146 00:10:18,800 --> 00:10:23,550 এবং তারপর তারা verdict.bmp আমাদের outfile হবে বলছে. 147 00:10:23,550 --> 00:10:27,900 সুতরাং একটি নতুন বিটম্যাপ ইমেজ অনুরূপ সুরুক এক তৈরি হচ্ছে 148 00:10:27,900 --> 00:10:32,600 একটি পাঠযোগ্য বিন্যাসে ছাড়া যেখানে আমরা গোপন বার্তা দেখতে পারেন. 149 00:10:32,600 --> 00:10:37,550 >> যেহেতু আমরা সম্পাদনা এবং কিছু ধরণের বিটম্যাপ সাধিত সাথে ডিল করা যাচ্ছেন, 150 00:10:37,550 --> 00:10:42,400 আমরা আমাদের এই বিটম্যাপ ফাইল কাঠামো ডুব ধরনের চলুন. 151 00:10:42,400 --> 00:10:48,130 আমরা এই অল্প উপর গিয়েছিলাম বক্তৃতায়, কিন্তু তাদের মধ্যে আরো কিছু দিন এর চেহারা. 152 00:10:48,130 --> 00:10:51,740 বিটম্যাপ মূলত শুধু বাইটের একটি বিন্যাস 153 00:10:51,740 --> 00:10:55,790 যেখানে আমরা নির্দিষ্ট করেছি যা বাইট মানে কি. 154 00:10:55,790 --> 00:11:00,540 সুতরাং এখানে বিটম্যাপ ইমেজ একটা ম্যাপ মত ধরনের 155 00:11:00,540 --> 00:11:08,550 যাতে বলা হয় এটি কয়েকটি হেডার ফাইল সঙ্গে শুরু হয়, সেখানে কিছু তথ্য দিয়ে, শুরু হয়. 156 00:11:08,550 --> 00:11:16,540 আপনি যে সম্পর্কে বাইট সংখ্যা 14 এ আকার বিটম্যাপ ইমেজ হয়, 157 00:11:16,540 --> 00:11:18,520 এবং এটা চলতেই থাকে. 158 00:11:18,520 --> 00:11:23,810 তবে কি আমরা এখানে করছি সত্যিই আগ্রহী বাইট নম্বর 54 কাছাকাছি শুরু হয়. 159 00:11:23,810 --> 00:11:26,060 আমরা এই আরজিবি triples আছে. 160 00:11:26,060 --> 00:11:30,760 কি যে করতে যাচ্ছে প্রকৃত পিক্সেল, রঙ মান থাকতে হয়. 161 00:11:30,760 --> 00:11:35,950 হেডারের মধ্যে যে উপরের সব কিছু তথ্য 162 00:11:35,950 --> 00:11:41,240 অনুরূপ ইমেজ, ইমেজ প্রস্থ, উচ্চতা এবং মাপ. 163 00:11:41,240 --> 00:11:44,930 যখন আমরা প্যাডিং পরে যান, আমরা দেখতে পাবেন কেন চিত্রের আকার 164 00:11:44,930 --> 00:11:48,670 প্রস্থ বা উচ্চতা থেকে আলাদা হতে পারে. 165 00:11:48,670 --> 00:11:54,240 এই বিটম্যাপ ইমেজ বাইট ক্রমের - তখন এইসব উপস্থাপন - 166 00:11:54,240 --> 00:11:59,370 আমরা কি করব তা পারে অনুমোদন করা হয় বলে, আমি মনে রাখতে যাচ্ছি যে সূচক 14, 167 00:11:59,370 --> 00:12:03,380 যে যেখানে আকার উদাহরণ স্বরূপ,, কিন্তু এর পরিবর্তে আমরা কি এই সহজ করতে করতে যাচ্ছেন 168 00:12:03,380 --> 00:12:06,020 একটি struct তা encapsulate. 169 00:12:06,020 --> 00:12:08,880 তাই আমরা দুটি structs আমাদের জন্য, একটি BITMAPFILEHEADER আছে 170 00:12:08,880 --> 00:12:10,440 এবং একটি BITMAPINFOHEADER, 171 00:12:10,440 --> 00:12:14,840 এবং তাই ডিফল্ট যখনই আমরা যে ফাইল পড়বেন না, এটি করার চালু করা যাচ্ছে, 172 00:12:14,840 --> 00:12:22,360 ক্রম যাতে এবং তারা এও যেমন biWidth এবং biSize হিসাবে ভেরিয়েবলের মধ্যে পূরণ করা যাচ্ছে. 173 00:12:25,270 --> 00:12:31,230 এবং পরিশেষে, তাহলে পিক্সেল প্রতি তিনটি বাইট প্রতিনিধিত্ব করা হয়. 174 00:12:31,230 --> 00:12:35,500 প্রথম এক নীল পিক্সেল পরিমাণ, দ্বিতীয়টি হল সবুজ পরিমাণ, 175 00:12:35,500 --> 00:12:41,120 এবং পরিশেষে, লাল, যেখানে 0 মূলত নেই নীল বা কোন সবুজ পরিমাণ অথবা কোনো লাল 176 00:12:41,120 --> 00:12:43,720 এবং তারপর ff সর্বোচ্চ মূল্য. 177 00:12:43,720 --> 00:12:46,800 এগুলি হেক্সাডেসিমেল মান. 178 00:12:46,800 --> 00:12:53,870 তখন যদি আমরা FF0000 থাকে তবে, যে নীল সর্বাধিক পরিমাণ অনুরূপ 179 00:12:53,870 --> 00:12:58,890 এবং তারপর সবুজ এবং লাল নেই, অতএব যে কোন একটি নীল পিক্সেল আমাদের দিতে হবে. 180 00:12:58,890 --> 00:13:04,190 তারপর যদি আমরা বোর্ড জুড়ে ff এর সমস্ত থাকে, তখন তার মানে যে আমরা একটি সাদা পিক্সেল আছে. 181 00:13:04,190 --> 00:13:11,370 এটি প্রথাগতভাবে তার বিপরীত ধরনের যখন আমরা আরজিবি বলে. এটা আসলে এর BGR যাচ্ছে. 182 00:13:12,750 --> 00:13:18,990 >> তাই আপনি যদি আমরা আসলে একটি বিটম্যাপ ইমেজ একটি উদাহরণ দেখব - আমাকে এক আপ এখানে মারবে না. 183 00:13:31,560 --> 00:13:33,830 এটা একটা সামান্য ছোট. 184 00:13:39,890 --> 00:13:47,840 আমি, zooming এবং আমরা এটি pixelated দেখতে পাবেন না. এটা রং ব্লকের মত দেখাচ্ছে. 185 00:13:47,840 --> 00:13:50,110 আপনি ব্লক তারপর সাদা এবং লাল ব্লক আছে. 186 00:13:50,110 --> 00:13:53,700 উদাহরণস্বরূপ, যদি আপনি মাইক্রোসফট পেইন্ট মধ্যে খেলা,, আপনি যে ভালো কিছু করতে পারে 187 00:13:53,700 --> 00:13:58,960 দ্বারা মূলত শুধুমাত্র একটি নির্দিষ্ট অনুক্রম নির্দিষ্ট স্কোয়ার আলেখ্য. 188 00:13:58,960 --> 00:14:08,060 আমি তখন কি বিটম্যাপ এই অনুবাদ নিম্নরূপ. 189 00:14:08,060 --> 00:14:15,710 এখানে আমরা প্রথমে সাদা পিক্সেল আছে, যে সমস্ত 6 চ এর, এবং তারপর আমরা লাল পিক্সেল আছে, 190 00:14:15,710 --> 00:14:19,910 0000ff দ্বারা নির্দেশিত. 191 00:14:19,910 --> 00:14:27,940 এবং তাই বাইট যে আমরা ক্রম ইঙ্গিত কিভাবে বিটম্যাপ ইমেজ তার থেকে যাচ্ছে. 192 00:14:27,940 --> 00:14:32,230 তাই ঠিক কি আমি এখানে সম্পন্ন করেছি করা সমস্ত বাইট আউট এবং লাল হয়ে রঙ্গিন 193 00:14:32,230 --> 00:14:37,550 যাতে আপনি ধরনের দেখতে পারেন, যদি আপনি একটি সামান্য বিট কটাক্ষ করা, কিভাবে এই ধরণের একটি হাস্যজ্জল মুখ ইঙ্গিত দেয়. 194 00:14:40,180 --> 00:14:46,390 >> উপায় যে বিটম্যাপ ইমেজ কাজ আমি কল্পনা একটি গ্রিড হিসাবে মূলত এটি. 195 00:14:46,390 --> 00:14:54,940 এবং তাই ডিফল্টরূপে, গ্রিড প্রতিটি সারি 4 বাইটের একটি একাধিক হতে হয়েছে. 196 00:15:00,520 --> 00:15:07,060 যদি আমরা একটি বিটম্যাপ ইমেজ তাকান, আপনি প্রতি মান পূরণ করছি. 197 00:15:07,060 --> 00:15:17,370 উদাহরণস্বরূপ, আপনি একটি লাল এখানে আছে, একটি সবুজ হতে পারে এখানে, এখানে একটি নীল, 198 00:15:17,370 --> 00:15:24,950 কিন্তু আপনি কি নিশ্চিত যে ছবিটি চার বাইটের একটি একাধিক দিয়ে পূর্ণ হয় না আছে. 199 00:15:24,950 --> 00:15:32,200 সুতরাং যদি আমি তিনটি ব্লক চওড়া হতে আমার ছবিটি চান, তাহলে আমি একটা খালি মান স্থাপন করা হবে 200 00:15:32,200 --> 00:15:35,640 গত এক এটি চার জন একাধিক করতে. 201 00:15:35,640 --> 00:15:39,530 আমি তখন ভাবলাম কিছু যা আমরা প্যাডিং আহ্বান করছি মধ্যে যোগ করা হবে. 202 00:15:39,530 --> 00:15:43,750 আমি শুধু যে কোন নির্দেশ x এর সঙ্গে যাব. 203 00:15:44,920 --> 00:15:54,160 এখন আমরা বলতে চাই, উদাহরণের জন্য, একটি চিত্র যা দীর্ঘ 7 পিক্সেল,. 204 00:15:54,160 --> 00:15:59,550 আমরা 1, 2, 3, 4, 5, 6, 7 আছে, 205 00:16:04,750 --> 00:16:07,000 এবং যে সব রঙ দিয়ে ভরা হয়. 206 00:16:07,000 --> 00:16:10,620 উপায় যে বিটম্যাপ ইমেজ কাজ হল যে আমরা একটি 8 প্রয়োজন. 207 00:16:10,620 --> 00:16:12,460 রাইট এখন আমরা 1, 2, 3, 4, 5, 6, 7 আছে. 208 00:16:12,460 --> 00:16:19,360 আমরা বিটম্যাপ ইমেজ সঠিকভাবে পড়া জন্য 8 শূণ্যস্থান প্রয়োজন. 209 00:16:19,360 --> 00:16:25,600 আমি তখন কি আমরা কি শুধু প্যাডিং একটি বিট মধ্যে যোগ করা হয় 210 00:16:25,600 --> 00:16:29,430 নিশ্চিত করুন যে সব প্রস্থ হয় একরূপ করা 211 00:16:29,430 --> 00:16:34,260 প্রস্থ এবং যে সমস্ত 4 একটি একাধিক. 212 00:16:42,110 --> 00:16:47,310 এবং পূর্বে যাতে আমি নির্দেশিত, কোনও একটি বা squiggly লাইন হিসাবে প্যাডিং, 213 00:16:47,310 --> 00:16:53,880 কিন্তু প্রকৃত বিটম্যাপ ইমেজ মধ্যে প্যাডিং একটি হেক্সাডেসিমাল 0 দ্বারা করা হয়. 214 00:16:53,880 --> 00:16:57,340 যাতে একটি অক্ষর, 0 হবে. 215 00:16:58,980 --> 00:17:06,329 কি উপকারে আসতে পারে এমন হয় xxd কমান্ড. 216 00:17:06,329 --> 00:17:11,220 এটি কী জন্য আসলে আপনি দেখায়, অনুরূপ কি আমি স্মাইলি সাথে আগে যাও কি না 217 00:17:11,220 --> 00:17:15,630 আসলে আমি যখন প্রিন্ট আউট কি রঙ প্রতিটি পিক্সেলের জন্য হবে 218 00:17:15,630 --> 00:17:21,800 এবং তারপর এটি রঙ-কোডেড, যখন আপনি নিম্নলিখিত কমান্ডের সাহায্যে চালানো xxd, 219 00:17:21,800 --> 00:17:28,670 তারপর আসলে এটি প্রিন্ট আউট হবে কি রং যারা পিক্সেল জন্য. 220 00:17:28,670 --> 00:17:33,810 এখানে আপনি উপর কি হবে তা হচ্ছে আমি ইঙ্গিত-গুলি 54 মত, 221 00:17:33,810 --> 00:17:36,530 বলছেন যে আমি 54TH বাইট এ শুরু চলেছি 222 00:17:36,530 --> 00:17:40,820 আগে যে কারণে, যদি আমরা বিটম্যাপ মানচিত্র ফিরে তাকান মনে রাখবেন, 223 00:17:40,820 --> 00:17:42,690 যে সকল তথ্য এবং হেডার যে ভালো জিনিস. 224 00:17:42,690 --> 00:17:46,280 কিন্তু সত্যিই কি আমরা যত্নশীল প্রকৃত পিক্সেল যে রঙ নির্দেশ করে. 225 00:17:46,280 --> 00:17:52,700 তাই যোগ করার মধ্যে যে পতাকা, 54-গুলি দ্বারা তারপর, আমরা রঙ মান দেখতে সক্ষম. 226 00:17:52,700 --> 00:17:56,020 এবং জটিল পতাকা যে ভালো জিনিস এবং চিন্তার কিছু নেই. 227 00:17:56,020 --> 00:18:05,020 সমস্যা সেট বৈশিষ্ট, আপনি কিভাবে xxd যাও যাও পিক্সেল প্রদর্শন ব্যবহার নির্দেশ করতে হবে. 228 00:18:07,070 --> 00:18:15,590 তাই আপনি যদি এখানে দেখতে, এটি একটি সবুজ বক্স, এই ছোট জিনিস ভালো ধরনের দেখায়. 229 00:18:15,590 --> 00:18:23,610 আমি করেছি মূলত কোন নীল, সবুজ অনেক, এবং কোন লাল বলছে হিসাবে 00ff00 রঙ-কোডেড. 230 00:18:23,610 --> 00:18:26,370 তাই সবুজ যে অনুরূপ. 231 00:18:26,370 --> 00:18:31,920 যেহেতু আপনি এখানে দেখুন, আমরা একটি আয়তক্ষেত্র দেখতে সবুজ. 232 00:18:31,920 --> 00:18:36,660 এই সবুজ আয়তক্ষেত্র শুধুমাত্র 3 পিক্সেল চওড়া, অতএব আমরা কি কি আছে 233 00:18:36,660 --> 00:18:44,350 নিশ্চিত করুন যে ছবিটি 4 ব্যাপী একটি একাধিক করা হয় অতিরিক্ত প্যাডিং মধ্যে যোগ করুন. 234 00:18:44,350 --> 00:18:49,460 এবং অতএব যে কিভাবে আপনি এইসব 0 সেঃ এখানে দেখুন. 235 00:18:49,460 --> 00:18:54,510 আসলে এই হতে আপনার পুনরায় মাপ pset ফলাফল হবে, 236 00:18:54,510 --> 00:19:01,350 মূলত ছোট বিটম্যাপ গ্রহণ এবং তারপর 4 দ্বারা এটি enlarging. 237 00:19:01,350 --> 00:19:09,380 তাই কি আমরা দেখতে হয় যে আসলে এই ছবিটি 12 পিক্সেল চওড়া, কিন্তু 12 4 টি একটি একাধিক, 238 00:19:09,380 --> 00:19:12,940 এবং তাই আসলে আমরা, কারণ আমরা কোনো যোগ করার প্রয়োজন হবে না দেখতে না পেলে শেষে কোনো 0 সেঃ না 239 00:19:12,940 --> 00:19:19,070 কারণ এটি সম্পূর্ণরূপে padded এর. এটা কোনো জায়গা নেই. 240 00:19:20,720 --> 00:19:23,470 >> ঠিক আছে. প্যাডিং সম্পর্কে কোন প্রশ্ন? 241 00:19:25,150 --> 00:19:27,460 ঠিক আছে. কুল. 242 00:19:27,460 --> 00:19:32,520 >> হিসাবে আমি আগে উল্লেখ করেছে, বিটম্যাপ ঠিক বাইট একটা ক্রম. 243 00:19:32,520 --> 00:19:39,170 তাই এর পরিবর্তে ঠিক বাইট যার নম্বর ট্র্যাক রাখতে প্রয়োজন কি আমরা আছে 244 00:19:39,170 --> 00:19:47,050 অনুরূপ একটি নির্দিষ্ট উপাদান যাও, আমরা আসলে একটি struct যে প্রতিনিধিত্ব তৈরি করেছেন. 245 00:19:47,050 --> 00:19:50,930 তাই আমরা যা আছে একটি RGBTRIPLE struct. 246 00:19:50,930 --> 00:19:54,590 আপনি যখনই কোনো একটি আরজিবি ট্রিপল একটি দৃষ্টান্ত আছে, 247 00:19:54,590 --> 00:20:00,970 কারণ এই একটি টাইপ struct সংজ্ঞায়িত থাকে, তাহলে আপনি rgbtBlue পরিবর্তনশীল অ্যাক্সেস করতে পারেন, 248 00:20:00,970 --> 00:20:09,520 একভাবে সবুজ এবং লাল ভেরিয়েবল, যা ইঙ্গিত করা কতটা নীল, সবুজ, লাল, 249 00:20:09,520 --> 00:20:11,580 যথাক্রমে, আপনার আছে. 250 00:20:11,580 --> 00:20:16,800 >> তাই আপনি যদি আমরা 0, ff সবুজ সেট, নীল ভেরিয়েবল সেট আছে 251 00:20:16,800 --> 00:20:22,060 যা সর্বোচ্চ মান থাকতে পারে, এবং তারপর লাল পরিবর্তনশীল 0 সেট, 252 00:20:22,060 --> 00:20:27,870 তারপর কি রঙ এই বিশেষ আরজিবি ট্রিপল উপস্থাপনের? >> [ছাত্রদের] সবুজ. 253 00:20:27,870 --> 00:20:29,150 সবুজ. ঠিক. 254 00:20:29,150 --> 00:20:34,480 এটা দরকারী জানতে হবে যে যখনই আপনি একটি আরজিবি ট্রিপল একটি দৃষ্টান্ত আছে, 255 00:20:34,480 --> 00:20:41,340 নীল, সবুজ, লাল - - আলাদাভাবে আপনি আসলে রঙ পরিমাণ অ্যাক্সেস করতে পারেন. 256 00:20:43,350 --> 00:20:54,900 >> এখন যে আমরা যে কাঠামো সম্পর্কে সায়ীদ করেছি, যাক এর BMP ফাইল কটাক্ষপাত করা. 257 00:20:54,900 --> 00:20:57,870 এগুলি জন্য structs. 258 00:20:57,870 --> 00:21:01,820 এখানে আমরা একটি BITMAPFILEHEADER struct আছে. 259 00:21:01,820 --> 00:21:07,610 সুদ এর আকার. 260 00:21:07,610 --> 00:21:12,660 পরে, আমরা হেডারের তথ্য, যা আমাদের জন্য আরও কিছু লোকের জন্য আকর্ষণীয় আছে, 261 00:21:12,660 --> 00:21:15,480 যথা আকার, প্রস্থ, উচ্চতা এবং. 262 00:21:15,480 --> 00:21:19,170 হিসাবে আমরা পরে এ যাবেন, যখন আপনি ফাইলটি পড়তে যাও, 263 00:21:19,170 --> 00:21:25,500 এটি স্বয়ংক্রিয়ভাবে কারণ আমরা যাতে একই সেট করেছি এ সার্চ. 264 00:21:25,500 --> 00:21:31,990 সুতরাং biSize ডান বাইট ছবিটি প্রকৃত মাপ যে মিলা থাকতে হবে. 265 00:21:34,700 --> 00:21:40,500 এবং তারপর এখানে, সর্বশেষে, হিসাবে আমরা স্বপ্ন করেছি, আমরা RGBTRIPLE typedef struct আছে. 266 00:21:40,500 --> 00:21:46,840 আমরা একটি rgbtBlue, সবুজ, লাল এবং এর সাথে জড়িত আছে. 267 00:21:48,210 --> 00:21:49,340 >> গ্রেট. ঠিক আছে. 268 00:21:49,340 --> 00:21:56,360 এখন আমরা বুঝতে পারি যে একটি সামান্য বিট বিটম্যাপ, বোঝেন যে আমরা একটি হেডার ফাইল আছে 269 00:21:56,360 --> 00:22:00,790 এবং একটি তথ্য হেডারের সাথে এবং তারপর পরে যে যুক্ত, আমরা আকর্ষণীয় উপাদান আছে 270 00:22:00,790 --> 00:22:05,110 রঙ, এবং যারা রং RGBTRIPLE structs দ্বারা প্রতিনিধিত্ব করা হয়, 271 00:22:05,110 --> 00:22:12,710 এবং ঘুরে যারা,, তিনটি যুক্ত নীল, সবুজ, লাল এবং মূল্যবোধ আছে. 272 00:22:12,710 --> 00:22:17,270 >> সুতরাং এখন, আমরা মনে সম্পর্কে একটি বিট উদ্ধার ধরনের পারেন. 273 00:22:17,270 --> 00:22:20,130 দুঃখিত. রহস্যময় গল্প সম্বন্ধে চিন্তা করুন. 274 00:22:20,130 --> 00:22:25,750 যখন আমরা আমাদের খেই ফাইল থাকে, তখন আমরা কি করতে চান তা পিক্সেল দ্বারা পিক্সেল পড়তে হয় 275 00:22:25,750 --> 00:22:33,860 এবং তারপর যারা একরকম পিক্সেল যাতে আমরা একটি পাঠযোগ্য বিন্যাসে এটি আউটপুট পরিবর্তন করতে পারেন. 276 00:22:33,860 --> 00:22:41,020 এবং তাই এটি আউটপুট, আমরা verdict.bmp ফাইলের মধ্যে পিক্সেলের দ্বারা পিক্সেল লিখুন চলুন. 277 00:22:41,020 --> 00:22:45,120 এটা অনেক কাজের ধরনের. আমরা বুঝতে পারছি. 278 00:22:45,120 --> 00:22:49,860 তাই আমরা যা সম্পন্ন করেছেন তা আমরা আসলে সাথে আপনার দেওয়া copy.c. 279 00:22:49,860 --> 00:22:57,610 কি copy.c আছে শুধু একটি প্রদত্ত বিটম্যাপ ফাইলের সঠিক কপি করে তোলে এবং তারপর আউটপুট. 280 00:22:57,610 --> 00:23:01,900 সুতরাং আপনি ইতিমধ্যে এই জন্য ফাইল খোলেন, পিক্সেল দ্বারা পিক্সেল মধ্যে সার্চ, 281 00:23:01,900 --> 00:23:04,510 এবং তারপর মধ্যে একটি আউটপুট ফাইলের মধ্যে এটি লিখেছেন. 282 00:23:04,510 --> 00:23:07,080 >> চলুন যে কটাক্ষপাত করা. 283 00:23:13,390 --> 00:23:18,290 এই সঠিক ব্যবহার নিশ্চিত করা হয়, 284 00:23:18,290 --> 00:23:22,640 ফাইলের নাম এখানে পেয়ে. 285 00:23:22,640 --> 00:23:29,940 এই কি আছে তা কি আমরা infile সালে পাশ করেছি এখানে করা ইনপুট ফাইল সেট করে, 286 00:23:29,940 --> 00:23:34,750 যা আমাদের দ্বিতীয় কমান্ড লাইন আর্গুমেন্ট. 287 00:23:34,750 --> 00:23:37,640 নিশ্চিত করুন যে আমরা ফাইল খুলতে পারে না পরীক্ষা. 288 00:23:38,960 --> 00:23:44,860 নিশ্চিত আমরা একটি নতুন outfile এখানে করতে পারেন না পরীক্ষা. 289 00:23:45,630 --> 00:23:53,270 তারপর এই কি এখানে আছে, এটা মূলত শুরু হয় বিটম্যাপ ফাইল পড়ার শুরুতে থেকে. 290 00:23:53,270 --> 00:23:56,700 শুরুতে, আমরা জানি, BITMAPFILEHEADER রয়েছে, 291 00:23:56,700 --> 00:24:03,200 এবং তাই সরাসরি বিট যারা ক্রম BITMAPFILEHEADER পূরণ হবে. 292 00:24:03,200 --> 00:24:07,940 তাই আমরা এখানে আছে যা BITMAPFILEHEADER bf বলছে না - 293 00:24:07,940 --> 00:24:13,150 যে আমাদের টাইপ BITMAPFILEHEADER নতুন পরিবর্তনশীল - 294 00:24:13,150 --> 00:24:22,560 আমরা bf ভিতর কি আমরা পয়েন্টার থেকে পড়তে করা যাচ্ছেন, যা আমাদের infile. 295 00:24:22,560 --> 00:24:23,970 আমরা কত না পড়া? 296 00:24:23,970 --> 00:24:32,160 আমরা কত বাইট আমরা পুরো BITMAPFILEHEADER থাকতে প্রয়োজন পড়তে. 297 00:24:32,160 --> 00:24:34,660 একইভাবে, যে তথ্য হেডার এর জন্য আমরা কি করব তা. 298 00:24:34,660 --> 00:24:39,010 সুতরাং আমরা আমাদের ফাইল বরাবর infile মধ্যে অব্যাহত করছি, 299 00:24:39,010 --> 00:24:44,360 এবং আমরা যারা বিট এবং বাইট পড়া করছি, এবং আমরা তাদের প্লাগিং সরাসরি করছি 300 00:24:44,360 --> 00:24:47,880 ভেরিয়েবলের মধ্যে যে আমরা করছি এই দৃষ্টান্ত. 301 00:24:49,370 --> 00:24:53,800 এখানে শুধু আমরা নিশ্চিত করছি যে বিটম্যাপ একটি বিটম্যাপ. 302 00:24:57,670 --> 00:25:01,030 >> এখন আমরা একটি outfile অধিকার,? 303 00:25:01,030 --> 00:25:04,420 তাই যেমন আছে তেমনি যখন আমরা এটি তৈরি, এটা মূলত খালি. 304 00:25:04,420 --> 00:25:07,710 তাই আমরা মূলত: একটি স্ক্র্যাচ থেকে নতুন বিটম্যাপ তৈরি করা আছে. 305 00:25:07,710 --> 00:25:12,280 আমরা কি করব তা হল আমরা নিশ্চিত যে আমরা হেডারের ফাইল কপি করতে হবে 306 00:25:12,280 --> 00:25:16,850 এবং শুধুমাত্র infile ভালো হেডারের তথ্য আছে. 307 00:25:16,850 --> 00:25:22,850 আমরা কি করব তা হল আমরা লিখুন - এবং যে bf পরিবর্তনশীল স্মরণ 308 00:25:22,850 --> 00:25:29,300 ধরণ BITMAPFILEHEADER, তাই আমরা কি করব তা হল আমরা শুধু যে কন্টেন্ট ব্যবহার 309 00:25:29,300 --> 00:25:34,980 outfile মধ্যে লিখতে. 310 00:25:36,550 --> 00:25:38,510 এখানে, মনে রাখবেন আমরা প্যাডিং সম্পর্কে বললাম, 311 00:25:38,510 --> 00:25:47,820 কিভাবে এটা নিশ্চিত যে পিক্সেল যে আমরা পরিমাণ 4 একটি একাধিক করা গুরুত্বপূর্ণ. 312 00:25:47,820 --> 00:25:52,790 এটি একটি চমত্কার দরকারী সূত্র কত প্যাডিং আপনার নিরূপণ 313 00:25:52,790 --> 00:25:57,670 আপনার দেওয়া ফাইল প্রস্থ. 314 00:25:57,670 --> 00:26:04,120 আমি আপনাকে বলছি যে copy.c আমরা হিসাবী প্যাডিং জন্য একটি সূত্র আছে মনে রাখতে চান. 315 00:26:04,120 --> 00:26:07,970 ঠিক আছে? যাতে সবাই যে মনে রাখবেন. গ্রেট. 316 00:26:07,970 --> 00:26:14,050 আমি তখন কি copy.c আছে পরবর্তী এটা iterates scanlines সব উপর. 317 00:26:14,050 --> 00:26:23,730 এটা সারি মাধ্যমে প্রথম যায় এবং তারপর প্রতি ট্রিপল যে এটি সার্চ সঞ্চয় 318 00:26:23,730 --> 00:26:26,920 এবং তারপর outfile মধ্যে এটি লিখেছেন. 319 00:26:26,920 --> 00:26:33,120 সুতরাং এখানে আমরা এমন এক সময়ে শুধুমাত্র একটি আরজিবি ট্রিপল করছেন পড়া 320 00:26:33,120 --> 00:26:39,860 এবং তারপর outfile মধ্যে যে একই ট্রিপল নির্বাণ. 321 00:26:41,120 --> 00:26:48,340 চতুর ভাগে যে প্যাডিং একটি আরজিবি ট্রিপল হয় না, 322 00:26:48,340 --> 00:26:55,200 এবং সে জন্য আমরা যে আরজিবি triples এর প্যাডিং পরিমাণ পড়তে পারে না. 323 00:26:55,200 --> 00:27:01,460 কি আমরা কি শুধু আমাদের ফাইল অবস্থান নির্দেশক সরানোর জন্য আমাদের কার্সার সরানোর জন্য, 324 00:27:01,460 --> 00:27:06,840 সব প্যাডিং উপর লাফালাফি করা যাতে আমরা পরের সারি করেন ধরনের. 325 00:27:06,840 --> 00:27:12,990 এবং তারপর কি আছে এই একটি কপি আপনি দেখায় কিভাবে আপনি প্যাডিং যোগ করতে পারেন. 326 00:27:12,990 --> 00:27:14,990 সুতরাং আমরা কত প্যাডিং আমরা প্রয়োজন হিসাব করেছি, 327 00:27:14,990 --> 00:27:18,220 যাতে এর মানে হল যে আমরা 0 সেঃ এর প্যাডিং নম্বর প্রয়োজন. 328 00:27:18,220 --> 00:27:24,510 কি আছে এই লুপ যে আমাদের মধ্যে outfile 0 সেঃ এর প্যাডিং নম্বর রাখে জন্য একটি. 329 00:27:24,510 --> 00:27:31,170 এবং তারপর অবশেষে, আপনি উভয় ফাইল বন্ধ. আপনি infile হিসেবে outfile বন্ধ. 330 00:27:31,170 --> 00:27:34,870 >> সুতরাং যে কিভাবে copy.c কাজ, 331 00:27:34,870 --> 00:27:37,430 এবং যে চমত্কার উপযোগী হতে যাচ্ছে. 332 00:27:39,720 --> 00:27:43,750 পরিবর্তে শুধুমাত্র আসলে সরাসরি কপি পেস্ট 333 00:27:43,750 --> 00:27:46,800 অথবা, শুধু আমি এবং যাহা চান সেটি টাইপ, 334 00:27:46,800 --> 00:27:49,440 আপনি শুধু এই টার্মিনালে নিম্নলিখিত কমান্ড প্রয়োগ করতে পারেন, 335 00:27:49,440 --> 00:27:54,520 cp copy.c whodunit.c, যা একটি নতুন ফাইল তৈরি হবে, whodunit.c, 336 00:27:54,520 --> 00:27:58,330 যে সঠিক একই কন্টেন্ট হিসাবে কপি আছে রয়েছে. 337 00:27:58,330 --> 00:28:03,880 আমি তখন কি আমরা করতে পারি যে হিসাবে একটি কাঠামোর উপর যা নির্মাণ ও সম্পাদনা করতে ব্যবহার করা হয় 338 00:28:03,880 --> 00:28:06,900 রহস্যময় গল্প আমাদের জন্য ফাইল. 339 00:28:08,500 --> 00:28:14,670 >> এই আমাদের-ডস রহস্যময় গল্প জন্য না হয়, কিন্তু কি copy.c আছে 340 00:28:14,670 --> 00:28:16,730 না আসলে আমাদের জন্য তাদের অধিকাংশই যত্ন নেয়. 341 00:28:16,730 --> 00:28:21,900 তাই আমরা পরবর্তীতে আপনার প্রয়োজন হয় পিক্সেল হিসাবে পরিবর্তন প্রয়োজন 342 00:28:21,900 --> 00:28:25,920 প্রকৃতপক্ষে ফাইল পাঠযোগ্য না. 343 00:28:25,920 --> 00:28:32,960 একটি প্রদত্ত পিক্সেল ট্রিপল জন্য যে মনে রাখবেন, যাতে একটি টাইপ RGBTRIPLE প্রদত্ত পরিবর্তনশীল জন্য, 344 00:28:32,960 --> 00:28:35,990 আপনি নীল, সবুজ, লাল এবং মান অ্যাক্সেস করতে পারেন. 345 00:28:35,990 --> 00:28:38,670 যে উপকারে আসতে যাচ্ছে এর কারণ আপনি যদি তাদের অ্যাক্সেস করতে পারেন, 346 00:28:38,670 --> 00:28:41,770 তার মানে আপনি তাদের পরীক্ষা করতে পারবেন, 347 00:28:41,770 --> 00:28:45,430 এবং তার মানে আপনি তাদের পরিবর্তন করতে পারবেন. 348 00:28:45,430 --> 00:28:49,430 >> সুতরাং যখন আমরা আমাদের লাল বিবর্ধক বস্তু যেমন ফিরে গিয়েছিলাম, 349 00:28:49,430 --> 00:28:53,390 মূলত, যে ফিল্টার একটি আমাদের জন্য সাজানোর হিসাবে অভিনয় করেন. 350 00:28:53,390 --> 00:28:58,160 তাই আমরা যা করে যেতে চাই হয় আমরা triples যে এখনো সদস্য না হয়ে আসছে তার সমস্ত ফিল্টার করতে চান 351 00:28:58,160 --> 00:29:01,240 বিভিন্নভাবে এই কাজ করতে হয়. 352 00:29:01,240 --> 00:29:07,100 মূলত, আপনি ফিল্টারের যাই হোক না কেন আপনি টাইপ করতে চান করতে পারেন. 353 00:29:07,100 --> 00:29:09,890 হয়তো আপনি সব লাল পিক্সেল পরিবর্তন করতে চান 354 00:29:09,890 --> 00:29:13,570 অথবা হয়ত আপনি একটি ভিন্ন রঙ ভিন্ন একটি পিক্সেল রঙ পরিবর্তন করতে চান. 355 00:29:13,570 --> 00:29:15,400 যে আপনার উপর. 356 00:29:15,400 --> 00:29:19,580 মনে রাখবেন যে, আপনি কি রঙ পিক্সেল হয় চেক করতে পারেন 357 00:29:19,580 --> 00:29:23,000 এবং তারপর আপনি এটি হিসাবে আপনি মাধ্যমে চলুন পরিবর্তন করতে পারেন. 358 00:29:24,410 --> 00:29:26,420 >> ঠিক আছে. যাতে এর রহস্যময় গল্প. 359 00:29:26,420 --> 00:29:32,760 আপনি একবার রহস্যময় গল্প চালানোর জন্য, আপনাকে অপরাধের অপরাধী ছিল জানতে পারবেন. 360 00:29:32,760 --> 00:29:35,540 >> এখন আমরা পুনরায় আকার যেতে চলুন. 361 00:29:35,540 --> 00:29:37,990 আমরা এখনও বিটম্যাপ সাথে ডিল করা চলুন. 362 00:29:37,990 --> 00:29:40,750 আমরা কি চলুন যাও না হয় আমরা এক ইনপুট বিটম্যাপ আছে চলুন 363 00:29:40,750 --> 00:29:45,890 এবং তারপর আমরা একটা সংখ্যা এবং তারপর পাস outfile একটি বিটম্যাপ পেতে যাচ্ছেন 364 00:29:45,890 --> 00:29:51,380 যেখানে মূলত আমাদের infile n দ্বারা কমিয়ে এনেছে. 365 00:29:54,670 --> 00:30:01,450 বলুন, আমার ফাইল ছিল মাত্র একটি বৃহৎ পিক্সেল. 366 00:30:01,450 --> 00:30:09,100 তারপর যদি আমার n 3 দ্বারা ছিল 3, স্কেলিং তারপর, আমি যে বার পিক্সেল n নম্বর পুনরাবৃত্তি হবে, 367 00:30:09,100 --> 00:30:14,410 তাই 3 বার, তারপর এবং এটা আনুপাতিক হারে কমান 3 বার হিসাবে ভাল. 368 00:30:14,410 --> 00:30:17,840 সুতরাং আপনি দেখতে আমি এটা করছি স্কেলিং উল্লম্বভাবে হিসেবে অনুভূমিকভাবে. 369 00:30:17,840 --> 00:30:19,680 >> এবং তারপর এখানে একটি উদাহরণ. 370 00:30:19,680 --> 00:30:27,590 যদি n = 2 আছে, আপনি দেখতে যে প্রথম নীল পিক্সেল পুনরাবৃত্তি দুই বার আছে 371 00:30:27,590 --> 00:30:30,930 অনুভূমিকভাবে হিসাবে দুই বার উল্লম্বভাবে হিসাবে ভাল. 372 00:30:30,930 --> 00:30:38,040 এবং তারপর যা উপর, এবং যাতে আপনি আপনার আসল ইমেজ সরাসরি দুই আরোহী আছে. 373 00:30:40,920 --> 00:30:47,600 >> তখন যদি আমরা এই জন্য pseudocode বিস্তারিত, আমরা ফাইল খোলার জন্য চান. 374 00:30:47,600 --> 00:30:49,880 এবং তারপর বুদ্ধিমান যে যদি আমরা ফিরে যেতে এখানে, 375 00:30:49,880 --> 00:30:54,540 আমরা দেখতে যে outfile জন্য প্রস্থ infile প্রস্থ জন্য অবশ্যই আলাদা হতে হবে. 376 00:30:54,540 --> 00:30:56,130 এর অর্থ কি? 377 00:30:56,130 --> 00:31:01,230 এটার মানে হল যে আমাদের হেডারের তথ্য পরিবর্তন করতে হবে. 378 00:31:01,230 --> 00:31:03,790 তাই কি আমরা করতে চাইবেন হয় হেডারের তথ্য আপডেট, 379 00:31:03,790 --> 00:31:11,820 বুদ্ধিমান যে, যখন আমরা ফাইল পড়ার জন্য যদি আপনি copy.c কাঠামো অপারেটিং করছি, 380 00:31:11,820 --> 00:31:17,570 আমরা ইতিমধ্যে একটি পরিবর্তনশীল যে ইঙ্গিত কি আকার এবং যে মত জিনিষ আছে. 381 00:31:17,570 --> 00:31:24,060 তাই একবার আপনি আছে যে, আপনি কি করতে চাইবেন যারা নির্দিষ্ট ভেরিয়েবলের মান পরিবর্তন হয়. 382 00:31:24,060 --> 00:31:29,380 মনে রাখবেন, যদি আপনি একটি struct আছে, কিভাবে আপনি যে ভেরিয়েবলের মধ্যে অ্যাক্সেস. 383 00:31:29,380 --> 00:31:32,080 আপনি বিন্দু অপারেটর ব্যবহারের অধিকার,? 384 00:31:32,080 --> 00:31:36,420 আমি তখন যে ব্যবহার করে, আপনি কি জানেন যে আপনি হেডারের তথ্য পরিবর্তন করার প্রয়োজন হবে. 385 00:31:36,480 --> 00:31:41,030 তাই এখানে শুধু প্রকৃত উপাদান আছে যা আপনার ফাইল পরিবর্তন করা যাচ্ছে একটি তালিকা. 386 00:31:41,030 --> 00:31:45,180 ফাইলের মাপ পরিবর্তন করা ইমেজ হিসেবে প্রস্থ এবং উচ্চতা, যাচ্ছে. 387 00:31:45,180 --> 00:31:50,080 আমি তখন বিটম্যাপ মানচিত্র ফিরে যাওয়া, 388 00:31:50,080 --> 00:31:57,730 তাকান কিনা এটা হেডার ফাইল বা তথ্য হেডারে যে যে তথ্য রয়েছে 389 00:31:57,730 --> 00:32:00,920 এবং তারপর পরিবর্তন প্রয়োজন. 390 00:32:05,010 --> 00:32:12,470 আবার, বলতে cp copy.c resize.c. 391 00:32:12,470 --> 00:32:19,270 এটার মানে হল যে এখন resize.c যা কপি ভিতর আছে এর মধ্যে রয়েছে 392 00:32:19,270 --> 00:32:24,490 কারণ কপি প্রদান পিক্সেল দ্বারা প্রতিটি পিক্সেল scanline মধ্যে পড়া একটি উপায় আমাদের. 393 00:32:24,490 --> 00:32:29,860 ছাড়া এখন, পরিবর্তে শুধুমাত্র মান পরিবর্তন করার মত আমরা রহস্যময় গল্প করেছিল, 394 00:32:29,860 --> 00:32:37,980 আমরা কি করতে হয় আমরা একাধিক পিক্সেল লিখতে চান 395 00:32:37,980 --> 00:32:43,580 যতদিন আমাদের n হল 1 চেয়ে বেশী. 396 00:32:43,580 --> 00:32:47,110 >> তারপর কি আমরা করতে হয় আমরা তা প্রসারিত করুন অনুভূমিকভাবে n দ্বারা চান, 397 00:32:47,110 --> 00:32:50,490 সেইসাথে এটি প্রসারিত করুন উল্লম্বভাবে n দ্বারা. 398 00:32:50,490 --> 00:32:52,710 কিভাবে এই আমরা কি হতে পারে? 399 00:32:52,710 --> 00:32:56,890 আপনার n হল 2 বলুন এবং আপনি এই infile দেওয়া আছে. 400 00:32:56,890 --> 00:32:58,730 তোমার কার্সার প্রথম এক সময়ে শুরু হতে চলেছে, 401 00:32:58,730 --> 00:33:03,530 এবং কি করতে চান, যদি n হল 2, আপনি তাদের মধ্যে 2 প্রিন্ট করতে চান. 402 00:33:03,530 --> 00:33:05,490 সুতরাং আপনি তাদের মধ্যে 2 মুদ্রণ. 403 00:33:05,490 --> 00:33:10,830 তারপর আপনার কার্সর পরবর্তী পিক্সেল, যা লাল এক সরাতে হবে, 404 00:33:10,830 --> 00:33:18,400 এবং এটি ঐ লাল বেশী 2 প্রিন্ট আউট, কি আগে এটি শেষ এর মধ্যে এটি সংযোজন করে যাচ্ছে. 405 00:33:18,400 --> 00:33:26,280 তারপর কার্সর পরবর্তী পিক্সেল যাও এবং যারা 2 গুটান সরাতে হবে. 406 00:33:26,280 --> 00:33:37,180 আপনি যদি copy.c ফ্রেমওয়ার্ক, কি আছে এই ফিরে তাকান অধিকার এখানে 407 00:33:37,180 --> 00:33:42,830 এটি একটি একটি আরজিবি ট্রিপল, একটি নতুন পরিবর্তনশীল নামক ট্রিপল নতুন উদাহরণ সৃষ্টি করে. 408 00:33:42,830 --> 00:33:50,500 এবং এখানে যখন তা সার্চ, এটি infile 1 RGBTRIPLE থেকে সার্চ 409 00:33:50,500 --> 00:33:53,470 সঞ্চয় এবং যে ট্রিপল ভেরিয়েবলের ভিতরে এটি. 410 00:33:53,470 --> 00:33:57,590 আমি তখন আসলে আপনি একটি পরিবর্তনশীল যে বিশেষ পিক্সেল প্রতিনিধিত্বমূলক আছে. 411 00:33:57,590 --> 00:34:05,290 তারপর একটি মধ্যে fwrite লুপ জন্য বিবৃতি বাঁধা যখন আপনি লিখুন, আপনি কি করতে চাইবেন হয় 412 00:34:05,290 --> 00:34:11,080 যে আপনার outfile মধ্যে অনেকবার প্রয়োজন হিসাবে এটি লিখেছেন. 413 00:34:17,449 --> 00:34:20,100 এটা সহজ যথেষ্ট. 414 00:34:20,200 --> 00:34:27,590 শুধু মূলত লিখন পদ্ধতি n কতবার অনুভূমিকভাবে এটি পরা পুনরাবৃত্তি. 415 00:34:27,590 --> 00:34:32,969 >> কিন্তু তারপর আমরা আমাদের প্যাডিং পরিবর্তন করতে হবে মনে রাখা আছে. 416 00:34:47,350 --> 00:34:53,020 পূর্বে, বলতে আমরা দৈর্ঘ্য 3 কিছু ছিল. 417 00:34:53,020 --> 00:35:00,130 তারপর আমরা কত প্যাডিং মধ্যে যোগ করবেন? শুধুমাত্র আর একটি 4 এটি একটি একাধিক করতে. 418 00:35:00,130 --> 00:35:10,480 কিন্তু আমরা বলতে n = 2 দ্বারা করছি এই ছবিটি বিশেষ স্কেলিং. 419 00:35:10,480 --> 00:35:16,300 আমি তখন কতগুলি নীল পিক্সেল আমরা শেষে থাকবে? আমরা 6 থাকবে. 420 00:35:16,300 --> 00:35:21,470 1, 2, 3, 4, 5, 6. ঠিক আছে. 421 00:35:21,470 --> 00:35:26,580 6 4 একাধিক নয়. 4 কাছের একাধিক কি? যে যাও 8 হতে যাচ্ছে. 422 00:35:26,580 --> 00:35:33,200 তাই আসলে আমরা সেখানে প্যাডিং এর মধ্যে 2 টি অক্ষর আছে করছেন যাচ্ছে. 423 00:35:33,200 --> 00:35:38,720 >> কেউ যদি আমরা প্যাডিং নিরূপণ একটি সূত্র আছে মনে রাখা 424 00:35:38,720 --> 00:35:41,350 এবং যেখানে যে হতে পারে? 425 00:35:41,350 --> 00:35:45,160 [শ্রবণাতীত ছাত্র প্রতিক্রিয়া] >> হ্যাঁ, copy.c. রাইট. 426 00:35:45,160 --> 00:35:49,800 Copy.c মধ্যে একটি সূত্র কত প্যাডিং আপনার গণনা পর্যন্ত 427 00:35:49,800 --> 00:35:53,810 একটি বিটম্যাপ ইমেজ নির্দিষ্ট প্রস্থ দেওয়া. 428 00:35:53,810 --> 00:36:02,950 আমি তখন কি দেয়া হবে এই দরকারী হতে পারে যখন আপনি একটি নির্দিষ্ট পরিমাণ প্যাডিং মধ্যে যোগ করতে হবে 429 00:36:02,950 --> 00:36:06,160 প্রকৃতপক্ষে জিনিসটা কত প্যাডিং আপনাকে যুক্ত করতে হবে. 430 00:36:10,820 --> 00:36:15,850 কিন্তু এক নোট যদিও, যে আপনি নিশ্চিত যে আপনি সঠিক মাপ ব্যবহার করছেন করতে চাই. 431 00:36:15,850 --> 00:36:21,410 শুধু সতর্কতা অবলম্বন করা আবশ্যক কারণ মূলত আপনি যাচ্ছেন দুই বিটম্যাপ ইমেজ সাথে ডিল করা হবে. 432 00:36:21,410 --> 00:36:23,410 আপনি কি নিশ্চিত যে আপনি সঠিক ব্যবহার করছেন করতে চাই. 433 00:36:23,410 --> 00:36:26,820 আপনি যখন outfile জন্য প্যাডিং করছি বিবেচক, আপনি outfile প্রস্থ ব্যবহার করতে চান 434 00:36:26,820 --> 00:36:29,860 এবং. আগের এক প্রস্থ না 435 00:36:29,860 --> 00:36:37,240 >> গ্রেট. তজ্জাতীয় পুরো বিটম্যাপ ইমেজ অনুভূমিকভাবে stretching যত্ন নেয়. 436 00:36:37,240 --> 00:36:41,290 কিন্তু আসলে কি আমরা যেতে চাই তা না উল্লম্বভাবে হিসাবে ভাল প্রসারিত করুন. 437 00:36:41,290 --> 00:36:48,760 এটি একটি সামান্য বিট trickier কারণ যখন আমরা একটি সারি অনুলিপি সমাপ্ত করেছি যাচ্ছে 438 00:36:48,760 --> 00:36:51,580 এবং যে সারি লেখা, আমাদের কার্সার শেষ হতে যাচ্ছে. 439 00:36:51,580 --> 00:36:56,210 তাই আপনি যদি আমরা আবার পড়ুন, তারপর পরের লাইন এ পড়া যাচ্ছে. 440 00:36:56,210 --> 00:37:03,660 তাই আমরা যা করে যেতে চাই হয় ধরনের যারা সারি আবার অনুলিপি করার একটি উপায় খুঁজে পাওয়া 441 00:37:03,660 --> 00:37:12,500 অথবা যে সারি গ্রহণ এবং তারপর এটা আবার rewriting শুধু ধরনের. 442 00:37:14,380 --> 00:37:17,940 হিসাবে আমি ধরনের উদ্দিষ্ট, বিভিন্নরূপে এই কাজ করতে হয়. 443 00:37:17,940 --> 00:37:23,040 আপনি কি হতে পারে হিসাবে আপনি ভিতর দিয়ে যাচ্ছে নির্দিষ্ট scanline মাধ্যমে পড়ি 444 00:37:23,040 --> 00:37:28,560 এবং প্রয়োজনীয় হিসাবে এটি পরিবর্তন, তারপর দোকান ধরনের একটি অ্যারের মধ্যে যারা পিক্সেল সব. 445 00:37:28,560 --> 00:37:36,350 তারপর পরে আপনি কি জানেন যে আপনি যে অ্যারের মুদ্রণ আবার আউট করতে হবে, 446 00:37:36,350 --> 00:37:39,830 এবং যাতে আপনি শুধু যে অ্যারের কি সেটা ব্যবহার করতে পারেন. 447 00:37:39,830 --> 00:37:44,500 আরেকটি উপায় হল এটা আপনি এক সারি নিচে অনুলিপি করতে পারিনি, 448 00:37:44,500 --> 00:37:47,950 যে যা আপনাকে আবার কপি করা আবশ্যক বুঝতে, তাই আসলে আপনার কার্সার সরানোর জন্য, 449 00:37:47,950 --> 00:37:50,950 এবং যে পদ্ধতিটির fseek ব্যবহার করা যাচ্ছে. 450 00:37:50,950 --> 00:37:56,410 আপনি সমস্ত উপায় আপনার কার্সার পিছান এবং তারপর কপি করতে পারে প্রক্রিয়া আবার পুনরাবৃত্তি. 451 00:37:56,410 --> 00:38:03,960 >> তাই আপনি যদি আমাদের আরোহী সংখ্যা হল n, তারপর কতবার আমরা ফিরে যেতে হবে 452 00:38:03,960 --> 00:38:10,500 এবং একটি লাইন পুনর্লিখন? >> [ছাত্রদের] হবে - 1. >> হ্যাঁ, নিখুঁত. এন - 1. 453 00:38:10,500 --> 00:38:14,390 আমরা এটা করেছেন একবার ইতিমধ্যে, অতএব আমরা ফিরে যাওয়াকে প্রক্রিয়ার পুনরাবৃত্তি করতে চাইবেন 454 00:38:14,390 --> 00:38:17,460 এন - ২ 1 পরিমাণ. 455 00:38:22,730 --> 00:38:25,860 ঠিক আছে. তাই সেখানে আপনি আপনার পুনরায় মাপ ফাংশন আছে. 456 00:38:25,860 --> 00:38:34,360 >> এখন আমরা সত্যিই মজার অংশ, আমার প্রিয় pset, যা উদ্ধার করতে পারেন. 457 00:38:34,360 --> 00:38:39,580 পরিবর্তে বিটম্যাপ, এই সময় আমরা JPEGs সঙ্গে লেনদেন করছেন. 458 00:38:39,580 --> 00:38:43,370 আমরা আসলে করছি দেওয়া ঠিক JPEGs একটি ফাইল হইনি, 459 00:38:43,370 --> 00:38:46,600 আমরা মূলত একটি কাঁচা মেমরি কার্ড ফরম্যাট করছি দেওয়া. 460 00:38:46,600 --> 00:38:51,790 তাই এই তথ্য এবং আবর্জনা মানসহ একটি প্রারম্ভে বিট রয়েছে, 461 00:38:51,790 --> 00:38:57,240 এবং তারপর শুরু হয় এবং এটি কোন JPEG ফাইল একটি গুচ্ছ আছে. 462 00:38:57,240 --> 00:39:03,430 যাইহোক, আমরা একটি কার্ড হস্তান্তর করছেন যেখানে আমরা ফটো মুছে ফেলেন; 463 00:39:03,430 --> 00:39:08,300 মূলত, আমরা যেখানে ফটো কার্ড মধ্যে অবস্থিত হয় বিস্মৃত করেছি. 464 00:39:08,300 --> 00:39:12,770 তখন আমাদের মধ্যে উদ্ধার টাস্ক এই কার্ড ফরম্যাট মাধ্যমে যেতে হয় 465 00:39:12,770 --> 00:39:16,500 এবং আবার সেই ছবি খুঁজে পেতে. 466 00:39:16,500 --> 00:39:23,990 >> সৌভাগ্য যে, কোন JPEG ফাইল এবং কার্ড ফাইল কাঠামো একটি বিট সহায়ক. 467 00:39:23,990 --> 00:39:28,850 এটা স্পষ্টভাবে হয়েছে একটি বিট trickier থাকতে পারে যদি এটি এই বিশেষ বিন্যাসে ছিল না. 468 00:39:28,850 --> 00:39:40,160 প্রতিটি JPEG ফাইল দুটো সম্ভব সিকোয়েন্স, উপরে তালিকাভুক্ত সঙ্গে শুরু হয়. 469 00:39:40,160 --> 00:39:42,970 মূলত, যখনই আপনি কোনো নতুন JPEG ফাইল আছে, 470 00:39:42,970 --> 00:39:52,720 এটি হয় ক্রম ffd8 ffe0 অথবা অন্য এক, ffd8 ffe1 সঙ্গে শুরু হয়. 471 00:39:52,720 --> 00:39:59,530 আরেকটি বড় বিষয় জানতে হয় যে contiguously JPEGs সংরক্ষণ করা হয়. 472 00:39:59,530 --> 00:40:03,380 সুতরাং যখনই এক JPEG ফাইল শেষ হয়, অন্য এক শুরু. 473 00:40:03,380 --> 00:40:07,070 সুতরাং হয় মধ্যবর্তী মান সেখানে কোন ধরনের যায় না. 474 00:40:07,070 --> 00:40:15,510 আপনি একবার কোন JPEG শুরু আঘাত, যদি আপনার আগে থেকেই করা হয়েছে করেছি কোন JPEG পড়া, 475 00:40:15,510 --> 00:40:21,800 আপনি কি জানেন যে আপনি আগের এবং পরের এক শুরুর শেষ আঘাত করেছেন. 476 00:40:21,800 --> 00:40:25,890 >> এই ধরণের দৃশ্য কল্পনা করুন, আমি একটি পরিকল্পিত হয়েছে. 477 00:40:25,890 --> 00:40:36,910 JPEGs সম্পর্কে আরেকটি ব্যাপার হল আমরা 512 বাইট ক্রমের তাদের একটি সময়ে পড়তে পারেন, 478 00:40:36,910 --> 00:40:39,380 একই সঙ্গে কার্ড শুরুতে. 479 00:40:39,380 --> 00:40:43,370 আমরা প্রতি একক বাইট কারণ যে স্তন্যপান করে চেক করার দরকার নেই. 480 00:40:43,370 --> 00:40:48,200 তাই, আমরা কি করতে পারি আসলে 512 বাইট অনুসারে শুধুমাত্র একটি সময়ে পড়া 481 00:40:48,200 --> 00:40:54,700 এবং তারপর, পরিবর্তে মধ্যে যারা একটু ছোট টুকরা করে চেকিং, 482 00:40:54,700 --> 00:40:58,640 আমরা মাত্র 512 বাইট শুরুতে চেক করতে পারেন. 483 00:40:58,640 --> 00:41:02,570 এই ছবিতে মূলত,, আপনি কি দেখতে কার্ড প্রারম্ভে হয়, 484 00:41:02,570 --> 00:41:08,700 আপনি যে প্রকৃত মান JPEGs নিজেদের সত্যিই প্রাসঙ্গিক হয় না আছে. 485 00:41:08,700 --> 00:41:15,830 কিন্তু তারপর আমি কি আছে একটি তারকা দুটি কোন JPEG জন্য শুরু ক্রম একটি ইঙ্গিত. 486 00:41:15,830 --> 00:41:19,910 তাই যখনই আপনি একটি তারকা দেখতে, আপনি কি জানেন যে আপনি একটি JPEG ফাইল আছে. 487 00:41:19,910 --> 00:41:25,030 এবং তারপর প্রতি JPEG ফাইল যাও 512 বাইট কিছু একাধিক হতে যাচ্ছে 488 00:41:25,030 --> 00:41:27,880 কিন্তু অগত্যা একই একাধিক না. 489 00:41:27,880 --> 00:41:32,050 উপায় যে আপনি কি জানেন যে, আপনি অন্য কোন JPEG আঘাত করেছেন তা যদি আপনি অন্য তারকা আঘাত, 490 00:41:32,050 --> 00:41:39,090 অন্য বাইটের অনুক্রম শুরু. 491 00:41:39,090 --> 00:41:43,330 তারপর আপনি কি এখানে আছে আপনার লাল JPEG ফাইল অব্যাহত আছে পর্যন্ত আপনি একটি তারকা আঘাত, 492 00:41:43,330 --> 00:41:45,150 এর ফলে একটি নতুন রঙ দ্বারা চিহ্নিত হয়. 493 00:41:45,150 --> 00:41:48,510 আপনি এবং তারপরে অবিরত আপনি অন্য তারকা আঘাত, আপনি অন্য কোন JPEG আঘাত, 494 00:41:48,510 --> 00:41:50,590 আপনি শেষ পর্যন্ত সমস্ত উপায় অবিরত. 495 00:41:50,590 --> 00:41:53,180 আপনি শেষ ছবি এখানে এসেছি, গোলাপী এক. 496 00:41:53,180 --> 00:41:58,220 আপনি শেষ পর্যন্ত যেতে আপনি ফাইলটি অক্ষর শেষ আঘাত. 497 00:41:58,220 --> 00:42:00,820 এটি সত্যিই কার্যকর হবে. 498 00:42:00,820 --> 00:42:03,170 >> কয়েক প্রধান এখানে takeaways: 499 00:42:03,170 --> 00:42:06,670 কার্ড ফাইলটি কোন JPEG গৃহযুদ্ধ শুরু হয় না, 500 00:42:06,670 --> 00:42:13,350 কিন্তু একবার কোন JPEG শুরু হয়, JPEGs সব পার্শ্বে এক অন্য সাইড জমা হয়. 501 00:42:17,520 --> 00:42:20,420 >> উদ্ধার জন্য কিছু pseudocode. 502 00:42:20,420 --> 00:42:22,570 প্রথমত, আমরা আমাদের কার্ড ফাইল খুলতে যাচ্ছেন, 503 00:42:22,570 --> 00:42:27,500 এবং যে আমাদের ফাইল ইনপুট / আউটপুট ফাংশন ব্যবহার করা হচ্ছে. 504 00:42:27,500 --> 00:42:32,430 আমরা নিম্নোক্ত প্রক্রিয়া পর্যন্ত আমরা ফাইলের শেষে পৌঁছেছেন পুনরাবৃত্তি চলুন. 505 00:42:32,430 --> 00:42:36,450 আমরা এক সময়ে 512 বাইট পড়া চলুন. 506 00:42:36,450 --> 00:42:39,180 এবং কি আমি এখানে বলেন, হয় আমরা একটি বাফারের মধ্যে এটি সংরক্ষণ চলুন, 507 00:42:39,180 --> 00:42:46,230 যারা 512 বাইট তাই মূলত পর্যন্ত আমরা জানতে পারি যে ঠিক কি তাদের সাথে না রাখা. 508 00:42:46,230 --> 00:42:50,300 তারপর কি আমরা করতে হয় আমরা কি আমরা একটি নক্ষত্র অথবা আঘাত না তা চেক করতে চান. 509 00:42:50,300 --> 00:42:57,960 যদি আমরা একটি তারকা আঘাত করেছি, যদি আমরা শুরু সিকোয়েন্স এক আঘাত করেছেন, 510 00:42:57,960 --> 00:42:59,980 তারপর আমরা জানি যে আমরা একটি নতুন JPEG ফাইল আঘাত করেছেন. 511 00:42:59,980 --> 00:43:08,860 আমরা কি করতে হয় চাইবেন আমরা আমাদের pset4 ডিরেক্টরির মধ্যে নতুন ফাইল তৈরি করতে যাচ্ছেন 512 00:43:08,860 --> 00:43:14,480 যে ফাইল তৈরীর অবিরত. 513 00:43:14,480 --> 00:43:18,220 তবে, যদি ইতিমধ্যে আমরা আগে করেছি কোন JPEG তৈরি, 514 00:43:18,220 --> 00:43:25,620 তারপর আমরা এই ফাইলটি এবং শেষ pset4 ফোল্ডারে এটি push করতে চান, 515 00:43:25,620 --> 00:43:29,780 যেখানে আমরা যে ফাইল সংরক্ষিত থাকবে কারণ যদি আমরা যে আমরা যে JPEG ফাইল শেষ করেছি উল্লেখ না, 516 00:43:29,780 --> 00:43:37,290 তারপর আমরা মূলত একটি অনির্দিষ্ট পরিমাণ থাকবে. JPEGs কখনও শেষ হয়ে যাবে. 517 00:43:37,290 --> 00:43:40,840 তাই আমরা নিশ্চিত যে, যখন আমরা একটি JPEG ফাইল এবং পড়া লেখা করছি যে করতে চাই, 518 00:43:40,840 --> 00:43:46,590 আমরা বিশেষভাবে যে যাতে পরবর্তী এক খোলা বন্ধ করতে চান. 519 00:43:46,590 --> 00:43:48,430 আমরা কয়েকটি জিনিস চেক করতে চাইবেন. 520 00:43:48,430 --> 00:43:52,880 আমরা কি একটি নতুন কোন JPEG শুরু সময়ে আমরা আমাদের বাফার সঙ্গে হন চেক করতে চান 521 00:43:52,880 --> 00:43:56,780 এবং এছাড়াও যদি ইতিমধ্যে আমরা কোন JPEG পাওয়া আগে 522 00:43:56,780 --> 00:44:03,930 কারণ যে আপনার পদ্ধতি সামান্য পরিবর্তন করতে হবে. 523 00:44:03,930 --> 00:44:07,880 আমি তখন পরে সমস্ত উপায় মাধ্যমে আপনি যেতে পারেন এবং আপনি ফাইলের শেষে আঘাত, 524 00:44:07,880 --> 00:44:11,570 তারপর কি করতে চাইবেন হয় আপনি যে সমস্ত ফাইল বর্তমানে খোলা বন্ধ করতে চাইবেন. 525 00:44:11,570 --> 00:44:14,100 যে সম্ভবত শেষ হতে JPEG ফাইল যে আপনি থাকবে, 526 00:44:14,100 --> 00:44:18,930 সেইসাথে কার্ড ফাইলটি আপনার সাথে যে আচরণ করা হয়েছে করেছি. 527 00:44:21,940 --> 00:44:28,670 >> সর্বশেষ বাধা আমরা মোকাবেলা করার প্রয়োজন হয় কিভাবে আসলে একটি JPEG ফাইল করা 528 00:44:28,670 --> 00:44:31,950 এবং কিভাবে ঐ ফোল্ডারে এটি ধাক্কা. 529 00:44:33,650 --> 00:44:39,850 pset প্রয়োজন যে প্রতি কোন JPEG যা আপনি নিম্নলিখিত বিন্যাসে হতে, 530 00:44:39,850 --> 00:44:43,990 যেখানে আপনি নম্বর আছে. jpg. 531 00:44:43,990 --> 00:44:50,750 নম্বর, এমনকি যদি 0, আমরা এটি 000.jpg. 532 00:44:50,750 --> 00:44:55,730 যখনই আপনি আপনার প্রোগ্রামে কোন JPEG খুঁজে, 533 00:44:55,730 --> 00:44:58,040 আপনি যাতে এটি পাওয়া গেছে এর মধ্যে এটি নাম দিতে চান চলুন. 534 00:44:58,040 --> 00:44:59,700 এর মানে কি? 535 00:44:59,700 --> 00:45:03,530 আমরা কিভাবে আমরা পেয়েছি অনেক ট্র্যাক রাখতে ধরনের প্রয়োজন 536 00:45:03,530 --> 00:45:08,680 এবং কি কোন JPEG প্রতিটি সংখ্যা হওয়া উচিত. 537 00:45:08,680 --> 00:45:13,800 এখানে আমরা sprintf ফাংশন সুবিধা গ্রহণ করতে যাচ্ছেন. 538 00:45:13,800 --> 00:45:17,480 অনুরূপ printf, যা কপি করে প্রিন্ট শুধু ধরনের একটি টার্মিনাল মধ্যে মান আউট, 539 00:45:17,480 --> 00:45:23,910 sprintf ছাপে ফোল্ডারের মধ্যে ফাইল. 540 00:45:23,910 --> 00:45:30,870 এবং তাই এই যদি আমি sprintf, শিরোনাম ছিল, না এবং তারপর সেখানে স্ট্রিং হবে, 541 00:45:30,870 --> 00:45:36,660 এটি 2.jpg আউট প্রিন্ট করা হবে. 542 00:45:36,660 --> 00:45:41,020 Assuming যে আমি আমার ফাইলগুলি সঠিকভাবে বন্ধ করেছি, 543 00:45:41,020 --> 00:45:47,210 যে ফাইলটি আমি আউট লেখা হয়েছে থাকতে হবে. 544 00:45:47,210 --> 00:45:50,320 কিন্তু একটি ব্যাপার হল কোড যে আমি এখানে আছে 545 00:45:50,320 --> 00:45:53,360 না কি pset প্রয়োজন পুরোপুরি সন্তুষ্ট না. 546 00:45:53,360 --> 00:46:02,410 pset প্রয়োজন যে দ্বিতীয় JPEG ফাইল নামে পরিবর্তে মাত্র 2 002 করা উচিত. 547 00:46:02,410 --> 00:46:09,160 সুতরাং যখন আপনি মুদ্রণ নামের আউট করে, সম্ভবত আপনার সামান্য প্লেসহোল্ডার পরিবর্তন করতে চাইতে পারেন. 548 00:46:09,160 --> 00:46:18,140 >> কেউ কি মনে রাখবেন কিভাবে আমরা অতিরিক্ত ফাঁকা স্থানের জন্য অনুমতি দেয় যখন আমরা কিছু প্রিন্ট? 549 00:46:18,140 --> 00:46:22,530 হাঁ. >> [ছাত্রদের] আপনি সাইন শতাংশ এবং 2 মধ্যে একটি 3 করান. >> হ্যাঁ, নিখুঁত. 550 00:46:22,530 --> 00:46:25,610 আপনি এই ক্ষেত্রে একটি 3 রাখা কারণ আমরা 3 জন্য স্থান চাইবেন. 551 00:46:25,610 --> 00:46:32,590 % 3d সম্ভবত দিতে 002.jpg পরিবর্তে 2 আপনি চান. 552 00:46:32,590 --> 00:46:40,120 sprintf ফাংশন মধ্যে প্রথম যুক্তি আসলে একটি গৃহস্থালি অ্যারে, 553 00:46:40,120 --> 00:46:42,520 যা আমরা পূর্বে স্ট্রিং হিসাবে জানত. 554 00:46:42,520 --> 00:46:50,700 যারা হবে, একটি অস্থায়ী সংগ্রহস্থলের মত আরো ধরনের মাত্র, পরিসমাপ্তি স্ট্রিং সঞ্চয়. 555 00:46:50,700 --> 00:46:54,950 আপনি কি সত্যিই এই সঙ্গে আচরণ করা যাবে না, কিন্তু আপনি তা অন্তর্ভুক্ত করা প্রয়োজন. 556 00:46:54,950 --> 00:47:00,710 >> বুদ্ধিমান যে সমস্ত ফাইল নামের সংখ্যা, যা লাগে তিনটি অক্ষর আপ আছে, 557 00:47:00,710 --> 00:47:06,770 এবং তারপর jpg., কতদিন এই অ্যারে হওয়া উচিত? 558 00:47:09,070 --> 00:47:14,310 একটি নম্বর নিক্ষেপ আউট. কত শিরোনামে অক্ষর নামে,? 559 00:47:18,090 --> 00:47:26,320 তাই 3 হ্যাশট্যাগ, সময়সীমার জন্য jpg আছে. >> [ছাত্রদের] 7. >> 7. বেশ নেই. 560 00:47:26,320 --> 00:47:32,000 আমরা 8 চান যাচ্ছে না কারণ আমরা নাল টারমিনেটর জন্য পাশাপাশি মঞ্জুরি দিতে চান করছি. 561 00:47:45,340 --> 00:47:49,730 >> অবশেষে, শুধুমাত্র প্রক্রিয়া যে আপনার জন্য কাজ করা উদ্ধার করব আঁকতে আউট, 562 00:47:49,730 --> 00:47:55,420 আপনি শুরুতে কিছু তথ্য আছে. 563 00:47:55,420 --> 00:48:02,460 আপনি অবিরত যতক্ষন না আপনি কোন JPEG ফাইল খুঁজে পেতে শুরু, 564 00:48:02,460 --> 00:48:07,900 এবং যে দুটি শুরু অনুক্রমের হয় এক হতে পারে. 565 00:48:07,900 --> 00:48:12,510 আপনি পড়া রাখা. এখানে প্রতিটি স্ল্যাশ 512 বাইট প্রতিনিধিত্ব করে. 566 00:48:12,510 --> 00:48:22,630 পড়ার জন্য আপনি, রাখা পড়া পর্যন্ত আপনি অন্য শুরু ক্রম সম্মুখীন রাখা. 567 00:48:22,630 --> 00:48:29,790 আপনি একবার আছে যে, আপনি বর্তমান কোন JPEG শেষ - এই ক্ষেত্রে, এটা এক লাল, 568 00:48:29,790 --> 00:48:31,030 তাই আপনার আর যে শেষ করতে চান. 569 00:48:31,030 --> 00:48:35,540 আপনি sprintf যে আপনার pset4 ফোল্ডার মধ্যে নাম করতে চান, 570 00:48:35,540 --> 00:48:41,580 তাহলে একটি নতুন কোন JPEG এবং তারপর খুলুন পড়া উপর রাখতে চান 571 00:48:41,580 --> 00:48:46,370 যতক্ষন না আপনি পরের সম্মুখীন. 572 00:48:46,370 --> 00:48:49,040 পড়ার রাখুন, পড়া বন্ধ না করা, 573 00:48:49,040 --> 00:48:56,290 এবং পরিশেষে, তাহলে অবশেষে, আপনি ফাইলের শেষে পৌঁছানোর চলুন, 574 00:48:56,290 --> 00:49:00,360 এবং তাই আপনার শেষ কোন JPEG বন্ধ করুন যে আপনার সাথে কাজ ছিল চাইবেন, 575 00:49:00,360 --> 00:49:08,380 sprintf যে আপনার pset4 ফোল্ডার, এবং তারপর আপনি যে সব ছবি অর্জিত করেছি তাকান. 576 00:49:08,380 --> 00:49:12,050 যারা ছবি আসলে CS50 কর্মীদের ছবি, 577 00:49:12,050 --> 00:49:16,430 এবং তাই এই হল যেখানে pset মধ্যে বোনাস মজা অংশ আসে 578 00:49:16,430 --> 00:49:26,310 হয় আপনি যে ছবি মধ্যে টিএফএস আপনার বিভাগে প্রতিদ্বন্দ্বী হয় 579 00:49:26,310 --> 00:49:34,610 এবং তাদের সাথে ছবি নিতে যে আপনি pset সম্পন্ন করেছি প্রমাণ 580 00:49:34,610 --> 00:49:37,030 এবং তাই আপনি যা কর্মী সদস্যদের ছবি আছে দেখতে পারেন. 581 00:49:37,030 --> 00:49:41,510 আমি তখন আপনি কর্মীদের সঙ্গে ছবি নিতে. কখনও কখনও আপনি সেগুলি মনে করে পেছনে তাড়া করতে হবে. 582 00:49:41,510 --> 00:49:44,680 সম্ভবত তাদের কিছু আপনার কাছ থেকে দূরে চালানোর চেষ্টা করা হবে. 583 00:49:44,680 --> 00:49:47,320 তাদের সঙ্গে ছবি নিতে. 584 00:49:47,320 --> 00:49:51,190 এটি একটি চলমান বিষয়. এটা যখন pset কারণে কারণে হইনি. 585 00:49:51,190 --> 00:49:53,340 নির্দিষ্ট সময়সীমা বৈশিষ্ট ঘোষণা করা হবে. 586 00:49:53,340 --> 00:49:58,060 আপনার অধ্যায় সঙ্গে একসঙ্গে তারপর, যেটা বিভাগে ছবি লাগে 587 00:49:58,060 --> 00:50:04,430 অধিকাংশ কর্মী সদস্যদের সাথে একটি বেশ ভালো পুরস্কার জিততে হবে. 588 00:50:04,430 --> 00:50:08,890 যে উদ্দীপনা পেতে ধরনের আপনার pset4 সমাপ্ত যত দ্রুত সম্ভব 589 00:50:08,890 --> 00:50:10,820 কারণ তখন আপনি ব্যবসা পেতে বাড়তেও পারে 590 00:50:10,820 --> 00:50:14,570 সব বিভিন্ন CS50 কর্মী সদস্যদের নিচে হান্টিং. 591 00:50:14,570 --> 00:50:17,500 এটা বাধ্যতামূলক নয় যদিও, তাই একবার আপনি ছবি পাবেন, 592 00:50:17,500 --> 00:50:20,310 তারপর আপনি pset4 দিয়ে সমাপ্ত হয়. 593 00:50:20,310 --> 00:50:23,970 >> এবং আমি 4 Walkthrough সঙ্গে, সমাপ্ত তাই আপনাকে ধন্যবাদ সব আসছে জন্য করছি. 594 00:50:23,970 --> 00:50:29,330 ফরেনসিক সাথে সৌভাগ্য কামনা করছি. [সাধুবাদ] 595 00:50:29,330 --> 00:50:31,000 [CS50.TV]