>> [عزف الموسيقى]
>> ROB BOWDEN: مرحبا، أنا روب، دعونا هذه محاولة على لحجم.
لذلك، ونحن مرة أخرى سوف تبدأ مع في الأساس نسخة من copy.c، و
إجراء بعض التغييرات.
نلاحظ على الفور نرى التغيير، حيث بدلا من التحقق لمعرفة ما إذا كان
ARGC لا يساوي 3، ونحن نريد للتحقق إذا ARGC لا يساوي 4، منذ
ونحن الآن لسنا مجرد أخذ في INFILE وOUTFILE، ولكن نحن أيضا مع الأخذ في
ن، وهو المبلغ الذي نحن تغيير حجم الصورة الأصلي.
مرة واحدة ونحن على يقين من ذلك، نستطيع فقط تحويل ن إلى عدد صحيح باستخدام atoi.
>> لذلك، ونحن الآن في طريقنا لخلق بعض الأسماء المستعارة، مجرد دعوة ARGV 2 INFILE، و
ARGV 3 OUTFILE، لأن ARGV 2 و ARGV 3 أسماء ليست مفيدة للغاية.
الآن نريد أن تحقق للتأكد من أن n ضمن حدود نتوقع، وبالتالي فإن
تحدد المواصفات التي لو كان أقل من أو تساوي صفر، أو أكبر من 100،
ثم ان عامل تغيير الحجم غير صالحة، ويجب أن نحذر من أن المستخدم.
>> مرة واحدة نحن وراء كل ذلك، ما في وسعنا أخيرا فتح INFILE لدينا، ونحن بحاجة
للخطأ تحقق للتأكد من أن لم يكن افتتاح تفشل لسبب ما.
ونحن بحاجة أيضا لفتح OUTFILE لدينا، و مرة أخرى خطأ تحقق للتأكد من أن
لم تفشل لسبب ما.
ولكن تأكد إذا كان افتتاح فشل OUTFILE أننا بحاجة لإغلاق
وINFILE، الذي افتتح بالفعل.
>> لذلك، على افتراض أن لم تفشل، ثم we're - كما هو الحال في copy.c -
سوف تقرأ في رأس من INFILE.
ونحن في طريقنا للتأكد من انها صالحة نقطية، ولكن الآن ونحن في طريقنا للقيام ببعض
الأشياء بطريقة مختلفة قليلا.
لذلك أولا، ونحن ذاهبون الى تريد تذكر العرض والارتفاع الأصلي
من INFILE، لأننا ذاهبون الى سيتم تغييره لOUTFILE.
حتى الآن أن نتذكر أن لأسباب غريبة bi.biheight، هو سلبي، و
وبالتالي فإن ارتفاع الفعلية، في الإيجابية، و تريد أن تأخذ قيمة مطلقة.
>> الآن، الحشو ستكون نفس حساب كما كان في copy.c،
باستخدام عرض قديمة، والآن نحن في طريقها فعلا لتغيير
ما في رأس لدينا.
لذلك نحن ذاهبون الى مضاعفة العرض لدينا من قبل ن، منذ نحن توسيع نطاق العرض من قبل
ن، اضرب ارتفاع كتبها n، منذ نحن التحجيم التي كتبها n، والآن لدينا
حساب لالحشو جديدة بناء على العرض الجديد.
>> حتى الآن نحن بحاجة لتغيير بعض حقول أخرى في رأس لدينا.
ومن المفترض أن تكون Bi.biSizeImage حجم كل بايت في بكسل
والحشو من الصورة.
وبالتالي فإن حجم صف واحد لدينا الصورة حجم RGB الثلاثي، وحجم
من بكسل واحد، أضعاف عدد بكسل في صف واحد، بالإضافة إلى الحشو في
نهاية الصف.
ثم ونحن في طريقنا إلى أنه من خلال مضاعفة القيمة المطلقة لدينا للحصول على ارتفاع
العدد الإجمالي للبايت في بيانات الصورة.
bf.bfSize هو فقط العدد الكلي من بايت في بيانات الصورة لدينا، حتى
bi.biSizeImage، بالإضافة إلى حجم رؤوس دينا.
لذلك، مضيفا على حجم ملف الصورة النقطية رأس، وحجم المعلومات النقطية
رأس، OK.
ذلك أن كل ما نحتاج إليه ل تغيير في رؤوس دينا.
الآن سنقوم إرسال رأس ملف صورة نقطية لدينا OUTFILE، ومعلومات نقطية لدينا
رأس لOUTFILE لدينا، والآن نحن على استعداد لبدء تسير
على مدى بكسل الفعلي.
>> لذلك نحن نريد لتكرار عبر خطوط المسح وINFILE ل.
لذلك نحن نريد لتكرار عبر oldheight.
هذا هو السبب في أننا بحاجة إلى تذكر الارتفاع الأصلي، قبل أن تغييره
وتحجيمها من قبل ن.
الآن ونحن في طريقنا لقراءة واحدة صف من INFILE إلى
العازلة من حجم oldwidth.
حتى هنا، ونحن freading حجم RGB الثلاثي، بكسل واحد، والعرض القديمة
منهم من INFILE في المخزن لدينا.
وهذا ما سوف يكون كامل الصف في هذه المجموعة.
وحتى الآن، ونحن نريد تكرار مرات ن ل طباعة هذا الصف لدينا OUTFILE n مرة.
وهذا ما تقوم به هذه الحلقة.
هذه الحلقة الداخلية يتم بالتكرار عبر الصف نفسه، على مجموعة والطباعة
كل بكسل في مجموعة n مرة.
بحيث يتم طباعة العنصر الصفري n مرة، العنصر الأول هو أن تكون
طبع مرات ن.
وهذا نوع من كيف ونحن في طريقنا ل توسيع نطاق أفقيا في OUTFILE، و
هذه الحلقة، حيث أننا حلقات ن مرات، هو كيف ونحن في طريقنا ل
على نطاق وعموديا.
>> إلى هنا، ونحن نرى أننا بحاجة إلى إضافة الحشو في نهاية كل صف.
هذا هو السبب في هذا هو داخل لحلقة وهذا ما طبع ن الصفوف فقط
هذا صف واحد من INFILE.
ثم إلى هنا، وانا ذاهب الى تجاوز الحشو في INFILE، مرة واحدة منذ
ننتهي مع صف واحد من INFILE، ونحن لا نهتم
ما كان الحشو.
نحن نريد فقط للوصول الى الصف الثاني.
ثم سنقوم حلقة الظهر وتفعل كل هذا مرة أخرى للصف الثاني.
>> أخيرا، وبمجرد أن الانتهاء من ذلك مع كل ذلك، يمكننا إغلاق INFILE، على مقربة
وOUTFILE، وعودة 0 لأننا الانتهاء من ذلك.
>> اسمي روب، وكان هذا تغيير الحجم.
>> [عزف الموسيقى]