1 00:00:00,000 --> 00:00:10,210 >> [عزف الموسيقى] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA تشان: ضربة دعونا الامور مع تغيير الحجم. 3 00:00:13,320 --> 00:00:17,710 في تغيير الحجم، وسيكون المستخدم تمرير في، عبر سطر الأوامر، صورة النقطية التي 4 00:00:17,710 --> 00:00:21,860 انهم يريدون لك لتوسيع نطاق من قبل عدد أنهم أيضا تمرير في، 5 00:00:21,860 --> 00:00:23,770 في سطر الأوامر. 6 00:00:23,770 --> 00:00:24,690 كيف نفعل ذلك؟ 7 00:00:24,690 --> 00:00:28,270 >> حسنا، أول الأشياء أولا، دعونا كسر هذه أسفل إلى خطوات. 8 00:00:28,270 --> 00:00:31,510 كنت تريد الذهاب الى فتح INFILE أنها تعطيك، وكذلك 9 00:00:31,510 --> 00:00:35,560 إنشاء وفتح OUTFILE أن وأنت تسير لوضع 10 00:00:35,560 --> 00:00:38,020 تغيير حجم الصورة فيه. 11 00:00:38,020 --> 00:00:42,050 ثم، لأنك تغيير الحجم، و لأنها صورة نقطية، فإنه رأس، لذلك 12 00:00:42,050 --> 00:00:46,080 وأنت تسير أيضا إلى تحديث رأس معلومات عن OUTFILE، 13 00:00:46,080 --> 00:00:47,950 والكتابة التي فيها 14 00:00:47,950 --> 00:00:51,850 ثم، وأنت تسير لقراءة في وscanline للمن INFILE، 15 00:00:51,850 --> 00:00:56,890 بكسل حسب بكسل، أو تغيير حجمها أفقيا وكتابة تلك بكسل في 16 00:00:56,890 --> 00:01:00,910 OUTFILE، على النحو المحدد بواسطة مقياس للمستخدم. 17 00:01:00,910 --> 00:01:03,940 >> وأنت تسير أن نتذكر أن إضافة الحشو عند الضرورة. 18 00:01:03,940 --> 00:01:05,400 المزيد عن ذلك لاحقا. 19 00:01:05,400 --> 00:01:07,790 وبعد ذلك، أيضا تغيير حجم عموديا. 20 00:01:07,790 --> 00:01:08,890 موافق. 21 00:01:08,890 --> 00:01:13,280 ولذلك فإن هذا سيكون أكثر قليلا تعقيدا من الذي فعلت ذلك، ولكن 22 00:01:13,280 --> 00:01:18,310 ما هو مماثل سوف أن copy.c، مرة أخرى، أن تكون مفيدة جدا. 23 00:01:18,310 --> 00:01:23,160 تذكر أن copy.c يفتح الملف، بتحديث معلومات رأس ل 24 00:01:23,160 --> 00:01:28,250 OUTFILE، ثم يقرأ في scanline لل، بكسل حسب بكسل، وكتابة كل بكسل 25 00:01:28,250 --> 00:01:30,510 في scanline للملف الإخراج ل. 26 00:01:30,510 --> 00:01:37,040 >> ذلك مرة أخرى، ربما الخطوة الأولى ربما يكون لحزب المحافظين، copy.c، resize.c 27 00:01:37,040 --> 00:01:40,560 في الدليل PSET5 الخاص بك. 28 00:01:40,560 --> 00:01:43,920 تذكر رغم ذلك، قبل نسخ منه، للتأكد من أن تفهم 29 00:01:43,920 --> 00:01:46,600 copy.c جيدا جدا. 30 00:01:46,600 --> 00:01:47,620 موافق. 31 00:01:47,620 --> 00:01:49,880 >> لذلك دعونا فتح ملف. 32 00:01:49,880 --> 00:01:50,870 كنت تعرف كيف تفعل ذلك. 33 00:01:50,870 --> 00:01:52,600 أنا ذاهب إلى ترك ذلك لك. 34 00:01:52,600 --> 00:01:56,050 المقبل، وتحديث معلومات رأس لOUTFILE. 35 00:01:56,050 --> 00:01:59,240 لأن لدينا صورة نقطية جديدة، لدينا معلومات رأس جديد. 36 00:01:59,240 --> 00:02:00,970 ما يتغير هنا؟ 37 00:02:00,970 --> 00:02:06,000 حسنا، حجم الملف هو الذهاب الى تغيير لأننا ذاهبون الى الحصول على مزيد من 38 00:02:06,000 --> 00:02:07,900 بكسل من ذي قبل. 39 00:02:07,900 --> 00:02:11,060 حجم الصورة، وبالتالي، كما سيتغير، كما هو 40 00:02:11,060 --> 00:02:13,050 العرض والارتفاع. 41 00:02:13,050 --> 00:02:17,180 >> لذلك المتغيرات التي تعتبر تلك، بالضبط؟ 42 00:02:17,180 --> 00:02:20,960 حسنا، إذا نظرت في رأس المعلومات، كما ترى هناك 43 00:02:20,960 --> 00:02:25,640 biSizeImage، والذي يمثل مجموع حجم الصورة في بايت، 44 00:02:25,640 --> 00:02:28,340 بما في ذلك بكسل والحشو. 45 00:02:28,340 --> 00:02:32,520 biWidth هو عرض الصورة في بكسل، ناقص الحشو. 46 00:02:32,520 --> 00:02:35,580 biHeight هو ارتفاع الصورة بالبكسل. 47 00:02:35,580 --> 00:02:39,200 وهكذا ترد تلك الموجودة في البنيات BITMAPFILEHEADER و 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 يمكن أن أقول لكم من هو الذي كتبها الذهاب الى bmp.h وتبحث في 50 00:02:45,300 --> 00:02:49,670 البنية BITMAPINFOHEADER ورؤية وهي مدرجة المتغيرات هناك. 51 00:02:49,670 --> 00:02:54,700 >> لذلك لتحديث رأس outfiles المعلومات، وأنت تريد الذهاب الى ل 52 00:02:54,700 --> 00:02:57,025 تغيير تلك القيم من الطول والعرض. 53 00:02:57,025 --> 00:03:00,570 ولكن هناك احتمالات، قد تحتاج بعض المعلومات رأس INFILE ل 54 00:03:00,570 --> 00:03:03,670 في وقت لاحق، لذلك الأفضل أن تتبع كلا. 55 00:03:03,670 --> 00:03:07,770 ولكن أن تكون واضحة جدا مع المتغير الخاص أسماء حتى يتسنى لك لا بطريق الخطأ 56 00:03:07,770 --> 00:03:12,490 كتابة القيم غير صحيحة في رأس لOUTFILE. 57 00:03:12,490 --> 00:03:16,160 >> حتى الآن دعونا نصل الى قراءة في وscanline للبكسل تلو بكسل. 58 00:03:16,160 --> 00:03:20,210 مرة أخرى، ونحن في طريقنا لتحويل لدينا مضمونة ملف I مكتبة / O، وإلقاء نظرة على 59 00:03:20,210 --> 00:03:22,100 وظيفة fread. 60 00:03:22,100 --> 00:03:26,150 fread يأخذ في مؤشر إلى البنية التي سوف تحتوي على وحدات البايت التي 61 00:03:26,150 --> 00:03:30,130 كنت تقرأ في، حجم كل العنصر الذي كنت تقرأ - 62 00:03:30,130 --> 00:03:34,410 مرة أخرى، sizeof ستكون مفيدة تعمل هنا، وعدد من 63 00:03:34,410 --> 00:03:38,820 عناصر حجمها، وحجمها، والتي كنت قراءة في، ثم في النهاية، و 64 00:03:38,820 --> 00:03:41,310 inpointer، الملف الذي كنت تقرأ من. 65 00:03:41,310 --> 00:03:46,770 لذلك كنت أخذ عناصر العدد من حجمها من inpointer، و 66 00:03:46,770 --> 00:03:49,040 وضعها موضع البيانات. 67 00:03:49,040 --> 00:03:51,695 >> الآن حان الوقت لتغيير حجم أفقيا. 68 00:03:51,695 --> 00:03:56,880 إذا كان n يساوي 2، ثم لكل بكسل في وINFILE، ونحن في طريقنا لأنه يكتب 69 00:03:56,880 --> 00:04:00,870 مرتين في OUTFILE. 70 00:04:00,870 --> 00:04:02,210 كيف نكتب الملفات؟ 71 00:04:02,210 --> 00:04:06,400 كذلك، لدينا وظيفة fwrite، لذلك لقد اتخذنا المؤشر إلى البنية 72 00:04:06,400 --> 00:04:10,170 الذي يحتوي على وحدات البايت التي كنت الكتابة من ثم نمر في 73 00:04:10,170 --> 00:04:14,430 الحجم والعدد، والإخراج، حيث كنت على وشك أن أكتب ذلك. 74 00:04:14,430 --> 00:04:19,200 ثم لتكرار العملية، سيكون قادرة على تكرارية بسيطة للحلقة. 75 00:04:19,200 --> 00:04:21,740 >> ولكن علينا أن نتذكر لإضافة الحشو فيها. 76 00:04:21,740 --> 00:04:26,040 مفهوم الحشو هو أنه، أيضا، كل بكسل هو ثلاث لدغات، ولكن 77 00:04:26,040 --> 00:04:28,940 حجم كل بد scanline لل تكون متعددة من 4 بايت. 78 00:04:28,940 --> 00:04:33,660 لذلك إذا كان عدد البكسل ليس متعددة من 4، ونحن بحاجة إلى إضافة بعض 79 00:04:33,660 --> 00:04:36,630 الحشو، والذي هو مجرد أصفار. 80 00:04:36,630 --> 00:04:42,130 الآن، على عكس الذي فعلت ذلك، وخلافا ل نسخة، ثم صورة INFILE و 81 00:04:42,130 --> 00:04:44,370 ملف OUTFILE لقد المختلفة لها الحشو مختلفة لأنهم 82 00:04:44,370 --> 00:04:46,360 العروض المختلفة. 83 00:04:46,360 --> 00:04:46,690 >> موافق. 84 00:04:46,690 --> 00:04:51,050 لذلك ربما سيكون صيغة تأتي في متناول اليدين هنا. 85 00:04:51,050 --> 00:04:55,120 سأترك ذلك لكم للعثور عليه، ولكن اقول لكم ان لإرسال الحشو، 86 00:04:55,120 --> 00:04:59,360 حسنا، انها مجرد وظيفة fputc بسيطة، يمر في شخصية 87 00:04:59,360 --> 00:05:02,200 أن كنت تريد أن تكتب، ثم مؤشر الملف الذي 88 00:05:02,200 --> 00:05:04,280 أريد أن أكتب ل. 89 00:05:04,280 --> 00:05:08,670 وحتى الآن بعد أن قمنا حجمها أفقيا، وتستخدم ثم الحشو، 90 00:05:08,670 --> 00:05:12,030 تذكر أنك تحتاج إلى نقل الملف الخاص بك مؤشر الموقف، لأنك 91 00:05:12,030 --> 00:05:14,480 لا يمكن fread في الحشو. 92 00:05:14,480 --> 00:05:18,230 لذلك كنت ترغب في التأكد من أن الملف الخاص بك مؤشر الموقف في INFILE 93 00:05:18,230 --> 00:05:19,980 عند نقطة الصحيح. 94 00:05:19,980 --> 00:05:23,970 لأننا نريد أن أيضا تغيير حجم عموديا. 95 00:05:23,970 --> 00:05:27,090 نحن لا يمكن أن تمتد أفقيا، لأن كل احتياجات الصف 96 00:05:27,090 --> 00:05:30,370 ليتم نسخها مرات ن. 97 00:05:30,370 --> 00:05:33,050 >> الآن، هناك عدة مختلفة طرق للقيام بذلك. 98 00:05:33,050 --> 00:05:39,010 حتى واحد، يمكننا استخدام طريقة إعادة كتابة، في أن نتذكر كل بكسل 99 00:05:39,010 --> 00:05:42,840 من صف محدد في صفيف، و ثم نكتب هذا الصفيف كما 100 00:05:42,840 --> 00:05:44,730 عدة مرات حسب الحاجة. 101 00:05:44,730 --> 00:05:49,530 أو هناك طريقة إعادة نسخ حيث، بعد القراءة في صف واحد في INFILE 102 00:05:49,530 --> 00:05:53,530 ثم أن الكتابة في OUTFILE، إضافة الحشو، ونحن fseek 103 00:05:53,530 --> 00:05:57,250 عودة إلى بداية الصف الأصلي، وكرر ثم الأفقي 104 00:05:57,250 --> 00:05:58,710 تغيير حجم من هناك. 105 00:05:58,710 --> 00:06:02,280 بغض النظر عن الأسلوب، رغم ذلك، عليك تريد كل بكسل أن يتكرر 106 00:06:02,280 --> 00:06:06,370 n مرة، وفي كل صف ليكون وكرر مرات ن كذلك. 107 00:06:06,370 --> 00:06:09,160 >> مع ذلك، سيكون لديك نقطية أكبر من الحياة. 108 00:06:09,160 --> 00:06:11,760 اسمي Zamyla، وهذا هو CS50. 109 00:06:11,760 --> 00:06:19,542