1 00:00:00,000 --> 00:00:12,240 >> [عزف الموسيقى] 2 00:00:12,240 --> 00:00:15,870 >> ROB BOWDEN: مرحبا، أنا روب، دعونا هذه محاولة على لحجم. 3 00:00:15,870 --> 00:00:21,100 لذلك، ونحن مرة أخرى سوف تبدأ مع في الأساس نسخة من copy.c، و 4 00:00:21,100 --> 00:00:22,860 إجراء بعض التغييرات. 5 00:00:22,860 --> 00:00:26,280 نلاحظ على الفور نرى التغيير، حيث بدلا من التحقق لمعرفة ما إذا كان 6 00:00:26,280 --> 00:00:30,440 ARGC لا يساوي 3، ونحن نريد للتحقق إذا ARGC لا يساوي 4، منذ 7 00:00:30,440 --> 00:00:34,350 ونحن الآن لسنا مجرد أخذ في INFILE وOUTFILE، ولكن نحن أيضا مع الأخذ في 8 00:00:34,350 --> 00:00:38,980 ن، وهو المبلغ الذي نحن تغيير حجم الصورة الأصلي. 9 00:00:38,980 --> 00:00:44,340 مرة واحدة ونحن على يقين من ذلك، نستطيع فقط تحويل ن إلى عدد صحيح باستخدام atoi. 10 00:00:44,340 --> 00:00:48,760 >> لذلك، ونحن الآن في طريقنا لخلق بعض الأسماء المستعارة، مجرد دعوة ARGV 2 INFILE، و 11 00:00:48,760 --> 00:00:54,240 ARGV 3 OUTFILE، لأن ARGV 2 و ARGV 3 أسماء ليست مفيدة للغاية. 12 00:00:54,240 --> 00:00:58,510 الآن نريد أن تحقق للتأكد من أن n ضمن حدود نتوقع، وبالتالي فإن 13 00:00:58,510 --> 00:01:02,910 تحدد المواصفات التي لو كان أقل من أو تساوي صفر، أو أكبر من 100، 14 00:01:02,910 --> 00:01:08,580 ثم ان عامل تغيير الحجم غير صالحة، ويجب أن نحذر من أن المستخدم. 15 00:01:08,580 --> 00:01:13,090 >> مرة واحدة نحن وراء كل ذلك، ما في وسعنا أخيرا فتح INFILE لدينا، ونحن بحاجة 16 00:01:13,090 --> 00:01:16,270 للخطأ تحقق للتأكد من أن لم يكن افتتاح تفشل لسبب ما. 17 00:01:16,270 --> 00:01:19,860 ونحن بحاجة أيضا لفتح OUTFILE لدينا، و مرة أخرى خطأ تحقق للتأكد من أن 18 00:01:19,860 --> 00:01:21,250 لم تفشل لسبب ما. 19 00:01:21,250 --> 00:01:26,270 ولكن تأكد إذا كان افتتاح فشل OUTFILE أننا بحاجة لإغلاق 20 00:01:26,270 --> 00:01:29,040 وINFILE، الذي افتتح بالفعل. 21 00:01:29,040 --> 00:01:33,690 >> لذلك، على افتراض أن لم تفشل، ثم we're - كما هو الحال في copy.c - 22 00:01:33,690 --> 00:01:36,140 سوف تقرأ في رأس من INFILE. 23 00:01:36,140 --> 00:01:40,130 ونحن في طريقنا للتأكد من انها صالحة نقطية، ولكن الآن ونحن في طريقنا للقيام ببعض 24 00:01:40,130 --> 00:01:41,620 الأشياء بطريقة مختلفة قليلا. 25 00:01:41,620 --> 00:01:44,870 لذلك أولا، ونحن ذاهبون الى تريد تذكر العرض والارتفاع الأصلي 26 00:01:44,870 --> 00:01:48,290 من INFILE، لأننا ذاهبون الى سيتم تغييره لOUTFILE. 27 00:01:48,290 --> 00:01:53,890 حتى الآن أن نتذكر أن لأسباب غريبة bi.biheight، هو سلبي، و 28 00:01:53,890 --> 00:01:58,670 وبالتالي فإن ارتفاع الفعلية، في الإيجابية، و تريد أن تأخذ قيمة مطلقة. 29 00:01:58,670 --> 00:02:02,580 >> الآن، الحشو ستكون نفس حساب كما كان في copy.c، 30 00:02:02,580 --> 00:02:06,060 باستخدام عرض قديمة، والآن نحن في طريقها فعلا لتغيير 31 00:02:06,060 --> 00:02:07,320 ما في رأس لدينا. 32 00:02:07,320 --> 00:02:11,200 لذلك نحن ذاهبون الى مضاعفة العرض لدينا من قبل ن، منذ نحن توسيع نطاق العرض من قبل 33 00:02:11,200 --> 00:02:15,100 ن، اضرب ارتفاع كتبها n، منذ نحن التحجيم التي كتبها n، والآن لدينا 34 00:02:15,100 --> 00:02:19,250 حساب لالحشو جديدة بناء على العرض الجديد. 35 00:02:19,250 --> 00:02:21,840 >> حتى الآن نحن بحاجة لتغيير بعض حقول أخرى في رأس لدينا. 36 00:02:21,840 --> 00:02:26,890 ومن المفترض أن تكون Bi.biSizeImage حجم كل بايت في بكسل 37 00:02:26,890 --> 00:02:28,520 والحشو من الصورة. 38 00:02:28,520 --> 00:02:34,190 وبالتالي فإن حجم صف واحد لدينا الصورة حجم RGB الثلاثي، وحجم 39 00:02:34,190 --> 00:02:39,430 من بكسل واحد، أضعاف عدد بكسل في صف واحد، بالإضافة إلى الحشو في 40 00:02:39,430 --> 00:02:40,910 نهاية الصف. 41 00:02:40,910 --> 00:02:45,200 ثم ونحن في طريقنا إلى أنه من خلال مضاعفة القيمة المطلقة لدينا للحصول على ارتفاع 42 00:02:45,200 --> 00:02:48,350 العدد الإجمالي للبايت في بيانات الصورة. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize هو فقط العدد الكلي من بايت في بيانات الصورة لدينا، حتى 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage، بالإضافة إلى حجم رؤوس دينا. 45 00:02:56,530 --> 00:02:59,850 لذلك، مضيفا على حجم ملف الصورة النقطية رأس، وحجم المعلومات النقطية 46 00:02:59,850 --> 00:03:00,800 رأس، OK. 47 00:03:00,800 --> 00:03:03,170 ذلك أن كل ما نحتاج إليه ل تغيير في رؤوس دينا. 48 00:03:03,170 --> 00:03:07,020 الآن سنقوم إرسال رأس ملف صورة نقطية لدينا OUTFILE، ومعلومات نقطية لدينا 49 00:03:07,020 --> 00:03:09,880 رأس لOUTFILE لدينا، والآن نحن على استعداد لبدء تسير 50 00:03:09,880 --> 00:03:11,990 على مدى بكسل الفعلي. 51 00:03:11,990 --> 00:03:15,720 >> لذلك نحن نريد لتكرار عبر خطوط المسح وINFILE ل. 52 00:03:15,720 --> 00:03:17,730 لذلك نحن نريد لتكرار عبر oldheight. 53 00:03:17,730 --> 00:03:20,830 هذا هو السبب في أننا بحاجة إلى تذكر الارتفاع الأصلي، قبل أن تغييره 54 00:03:20,830 --> 00:03:23,040 وتحجيمها من قبل ن. 55 00:03:23,040 --> 00:03:27,810 الآن ونحن في طريقنا لقراءة واحدة صف من INFILE إلى 56 00:03:27,810 --> 00:03:30,630 العازلة من حجم oldwidth. 57 00:03:30,630 --> 00:03:36,190 حتى هنا، ونحن freading حجم RGB الثلاثي، بكسل واحد، والعرض القديمة 58 00:03:36,190 --> 00:03:39,760 منهم من INFILE في المخزن لدينا. 59 00:03:39,760 --> 00:03:43,480 وهذا ما سوف يكون كامل الصف في هذه المجموعة. 60 00:03:43,480 --> 00:03:50,390 وحتى الآن، ونحن نريد تكرار مرات ن ل طباعة هذا الصف لدينا OUTFILE n مرة. 61 00:03:50,390 --> 00:03:52,510 وهذا ما تقوم به هذه الحلقة. 62 00:03:52,510 --> 00:03:57,910 هذه الحلقة الداخلية يتم بالتكرار عبر الصف نفسه، على مجموعة والطباعة 63 00:03:57,910 --> 00:04:00,710 كل بكسل في مجموعة n مرة. 64 00:04:00,710 --> 00:04:04,510 بحيث يتم طباعة العنصر الصفري n مرة، العنصر الأول هو أن تكون 65 00:04:04,510 --> 00:04:05,660 طبع مرات ن. 66 00:04:05,660 --> 00:04:10,820 وهذا نوع من كيف ونحن في طريقنا ل توسيع نطاق أفقيا في OUTFILE، و 67 00:04:10,820 --> 00:04:13,390 هذه الحلقة، حيث أننا حلقات ن مرات، هو كيف ونحن في طريقنا ل 68 00:04:13,390 --> 00:04:15,580 على نطاق وعموديا. 69 00:04:15,580 --> 00:04:19,850 >> إلى هنا، ونحن نرى أننا بحاجة إلى إضافة الحشو في نهاية كل صف. 70 00:04:19,850 --> 00:04:25,050 هذا هو السبب في هذا هو داخل لحلقة وهذا ما طبع ن الصفوف فقط 71 00:04:25,050 --> 00:04:28,400 هذا صف واحد من INFILE. 72 00:04:28,400 --> 00:04:32,150 ثم إلى هنا، وانا ذاهب الى تجاوز الحشو في INFILE، مرة واحدة منذ 73 00:04:32,150 --> 00:04:34,560 ننتهي مع صف واحد من INFILE، ونحن لا نهتم 74 00:04:34,560 --> 00:04:35,290 ما كان الحشو. 75 00:04:35,290 --> 00:04:37,110 نحن نريد فقط للوصول الى الصف الثاني. 76 00:04:37,110 --> 00:04:40,870 ثم سنقوم حلقة الظهر وتفعل كل هذا مرة أخرى للصف الثاني. 77 00:04:40,870 --> 00:04:44,406 >> أخيرا، وبمجرد أن الانتهاء من ذلك مع كل ذلك، يمكننا إغلاق INFILE، على مقربة 78 00:04:44,406 --> 00:04:47,430 وOUTFILE، وعودة 0 لأننا الانتهاء من ذلك. 79 00:04:47,430 --> 00:04:50,330 >> اسمي روب، وكان هذا تغيير الحجم. 80 00:04:50,330 --> 00:04:54,934 >> [عزف الموسيقى]