1 00:00:00,000 --> 00:00:02,700 [Powered by Google Translate] [تجول - مجموعة مشكلة 4] 2 00:00:02,700 --> 00:00:05,000 [Zamyla تشان - جامعة هارفارد] 3 00:00:05,000 --> 00:00:07,340 [هذا CS50. - CS50.TV] 4 00:00:08,210 --> 00:00:11,670 حسنا. مرحبا، الجميع، ومرحبا بكم في الإرشادات التفصيلية 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، أساسا كان الأمر كذلك، نحن في منتصف الطريق. 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، مرة أخرى، بدلا من تشغيل سودو يم ص التحديث، 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 ونحن في طريقنا إلى أن التعامل مع ملف المدخلات والمخرجات، وملف I / 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 >> وحتى ذلك الحين كما ذكرت من قبل، ونحن نتعامل مع الصور النقطية وكذلك ملفات JPEG. 36 00:02:09,030 --> 00:02:13,170 لذلك فهم حقا هيكل كيف يتم تنظيم هذه الملفات، 37 00:02:13,170 --> 00:02:16,170 كيف يمكننا ترجمة حقا و 0s 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 سوف تعامل مع تلك الملفات I / O وتحصل اعتادوا على ذلك. 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 ولكن ونحن في طريقنا للبحث أكثر في بعض الملفات I / O وظائف مثل 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 لذلك لدينا مؤشر FILE *. 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 ولذلك لا يوجد "ص" في هذه الحالة لقراءة، "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 ثم كنت على الارجح الى تريد استخدام "ص" كما وضع الخاص بك. 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 واستخدام "ث" واسطة للكتابة. 76 00:05:02,410 --> 00:05:07,540 >> حتى بعد ذلك عندما كنت تقرأ الواقع في ملفات، وهيكل هو كما يلي. 77 00:05:07,540 --> 00:05:14,930 الأولى التي تشمل المؤشر إلى البنية التي سوف تحتوي على وحدات البايت التي كنت تقرأ. 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 I مرمزة لهذه 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 ويقول لدي البنية DOG وحتى ذلك الحين أريد أن قراءة اثنين من الكلاب في كل مرة. 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، أساسا مجرد وضع حرف واحد في كل مرة، مركز حقوق الإنسان، 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 لدينا هذه مثلثات RGB. 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 وتغلف ذلك في البنية. 169 00:12:06,020 --> 00:12:08,880 وهكذا لدينا اثنين من البنيات التي بالنسبة لنا، و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 ثم وما يليها هي القيمة القصوى. 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 هذا هو نوع من عكس عادة عندما نقول RGB. انه سيكون في الواقع 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 أنا في التكبير، ويمكننا أن نرى انها منقطة ذلك. يبدو كتل من الألوان. 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 انا فقط للإشارة إلى أن هناك مع س. 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 وهكذا أشرت سابقا، باعتبارها حشوة X أو خط متعرج، 213 00:16:47,310 --> 00:16:53,880 ولكن في الصور النقطية الفعلية يشار إلى الحشو من قبل A 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 ما عليك القيام به هو أكثر من هنا I تشير، مثل ليالي-54 221 00:17:33,810 --> 00:17:36,530 يقول أنا ذاهب لبدء في البايت 54 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 ذلك عن طريق إضافة في هذا العلم، و-S 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 وحتى ذلك الحين هذه هي الطريقة التي ترى هذه 0S هنا. 235 00:18:49,460 --> 00:18:54,510 سيكون هذا في الواقع نتيجة لتغيير حجم pset الخاص بك، 236 00:18:54,510 --> 00:19:01,350 أخذ أساسا نقطية صغيرة ثم توسيع ذلك بنسبة 4. 237 00:19:01,350 --> 00:19:09,380 وذلك ما نراه في الواقع هو أن هذه الصورة هي 12 بكسل، ولكن 12 هو من مضاعفات الرقم 4، 238 00:19:09,380 --> 00:19:12,940 ولذا فإننا في الواقع لا أرى أي 0S في نهاية لأننا لسنا في حاجة لإضافة أي 239 00:19:12,940 --> 00:19:19,070 لأنه مبطن بالكامل. أنه ليس لديه أي غرفة أكثر من ذلك. 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 يتوافق مع عنصر معين، ونحن في الواقع قد خلقت البنية لتمثيل ذلك. 245 00:19:47,050 --> 00:19:50,930 ذلك ما لدينا هو بنية RGBTRIPLE. 246 00:19:50,930 --> 00:19:54,590 كلما كان لديك مثيل الثلاثي RGB، 247 00:19:54,590 --> 00:20:00,970 لأن هذا هو نوع تعريف البنية، ثم يمكنك الوصول إلى متغير 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، مجموعة الأخضر لوما يليها، 251 00:20:16,800 --> 00:20:22,060 التي هي القيمة الحد الأقصى الذي يمكن أن يكون، ثم المتغير الأحمر تعيين إلى 0، 252 00:20:22,060 --> 00:20:27,870 ثم ماذا لون RGB هذا الثلاثي يمثل خاصة؟ >> [طالب] الأخضر. 253 00:20:27,870 --> 00:20:29,150 الأخضر. بالضبط. 254 00:20:29,150 --> 00:20:34,480 انها سوف يكون من المفيد معرفة أنه كلما كان لديك مثيل الثلاثي RGB، 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 هذه هي البنيات جعل لكم. 258 00:20:57,870 --> 00:21:01,820 هنا لدينا البنية BITMAPFILEHEADER. 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. 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، 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 فما لدينا هنا يقول ان BF BITMAPFILEHEADER - 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 المقبل هو بالتكرار على كل من خطوط المسح. 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 حتى هنا ثم إننا نقرأ واحد فقط RGB الثلاثي في ​​وقت 320 00:26:33,120 --> 00:26:39,860 ووضع بعد ذلك أن نفس الثلاثي في ​​OUTFILE. 321 00:26:41,120 --> 00:26:48,340 الجزء صعبة هو أن الحشو ليست الثلاثي RGB، 322 00:26:48,340 --> 00:26:55,200 وهكذا لا يمكننا أن مجرد قراءة هذا المبلغ يتضاعف ثلاث مرات من الحشو RGB. 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 وهذا يعني أننا في حاجة عدد من الحشو 0S. 328 00:27:18,220 --> 00:27:24,510 هذا ما يفعله هو أن يضع لحلقة الحشو من عدد 0S في OUTFILE لدينا. 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 حزب المحافظين 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 >> هذه هي جهدنا ل-DOS للقيام المجرم ل، ولكن هل ما 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 ذلك ما نريد القيام به هو أننا نريد لتصفية كل من مثلثات التي تأتي فيها. 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 ثم إذا كان لي ن 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 إذا كان لديك ن = 2، ترى أن هناك بكسل 1 الأزرق المتكررة مرتين 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 تذكر، إذا كان لديك البنية، وكيف يمكنك الوصول إلى متغيرات داخل تلك. 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 مرة أخرى، ويقول حزب المحافظين 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 طالما لا يوجد لدينا أكبر من 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 يقول ن بك هو 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 ويقوم بإنشاء مثيل جديد من الثلاثي RGB، متغير جديد يسمى الثلاثي. 408 00:33:42,830 --> 00:33:50,500 وعندما يقرأ هنا إلى ذلك، فإنه يقرأ من RGBTRIPLE 1 INFILE 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 في حلقة For 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 فقط تكرار عملية الكتابة أساسا ن عدد المرات لتوسيع نطاق أفقيا. 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 >> كبيرة. هذا النوع من يعتني تمتد صورة نقطية كله أفقيا. 436 00:36:37,240 --> 00:36:41,290 ولكن ما نريد القيام به هو فعلا تمتد عموديا أيضا. 437 00:36:41,290 --> 00:36:48,760 هذه ستكون اصعب قليلا لأننا عندما تنتهي من نسخ على التوالي 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 أو مجرد نوع من أخذ هذا الصف ومن ثم إعادة كتابة من جديد. 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 >> حتى إذا لدينا عدد التحجيم هو ن، ثم كم مرة علينا أن نعود 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 بدلا من الصور النقطية، وهذه المرة نتعامل مع ملفات JPEG. 458 00:38:39,580 --> 00:38:43,370 كنت في الواقع نحن لم تعط ملف صور JPEG فقط من، 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 بالتأكيد يمكن أن يكون اصعب قليلا لو لم يكن في هذا الشكل بالذات. 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 شيء آخر هو المفيد أن نعرف أن يتم تخزين ملفات JPEG متاخم. 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 آخر شيء عن ملفات JPEG هو أن نتمكن من قراءتها في متواليات من 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 لديك القيم التي ليست ذات صلة حقا إلى ملفات JPEG الفعلية نفسها. 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 >> A الوجبات السريعة القليلة الرئيسي هنا: 499 00:42:03,170 --> 00:42:06,670 بطاقة الملف لا يبدأ مع JPEG، 500 00:42:06,670 --> 00:42:13,350 ولكن مرة واحدة في JPEG يبدأ، يتم تخزين كافة ملفات JPEG جنبا إلى جنب مع بعضها البعض. 501 00:42:17,520 --> 00:42:20,420 >> بعض شبة الكود لاسترداد. 502 00:42:20,420 --> 00:42:22,570 أولا، نحن في طريقنا لفتح ملف لدينا بطاقة، 503 00:42:22,570 --> 00:42:27,500 والتي ستكون لدينا باستخدام ملف I / O وظائف. 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، 515 00:43:25,620 --> 00:43:29,780 حيث سيتعين علينا أن ملف مخزن لأننا إذا لم تحدد بعد أن قمنا انتهت بأن JPEG الملف، 516 00:43:29,780 --> 00:43:37,290 فلن تكون لدينا أساسا مبلغ غير محدد. فإن ملفات JPEG تنتهي أبدا. 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 على افتراض أن كنت أغلقت ملفاتي بشكل صحيح، 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 بدلا من 2 فقط. 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 نعم. >> [طالب] يمكنك وضع لمدة 3 بين علامة النسبة المئوية و 2 في. نعم >>، والكمال. 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 hashtags، الفترة، 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 هو أنك تنافس في أقسام للعثور على TFS في الصور 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، لذلك أشكركم جميعا على حضوركم. 594 00:50:23,970 --> 00:50:29,330 حظا سعيدا مع الطب الشرعي. [تصفيق] 595 00:50:29,330 --> 00:50:31,000 [CS50.TV]