>> [השמעת מוסיקה]
>> ROB אודן: היי, אני רוב, בוא תנסה את זה על גודל.
לכן, אנחנו שוב הולכים להתחיל עם בעצם העתק של copy.c, ו
לעשות כמה שינויים.
שים לב באופן מיידי שאנו רואים שינוי, שבו במקום לבדוק כדי לראות אם
argc לא שווה 3, אנחנו רוצים לבדוק אם argc אינו שווה ל -4, שכן
עכשיו אנחנו לא רק לוקחים בinfile וoutfile, אבל אנחנו גם לוקחים ב
n, שהוא הסכום שאנחנו קנה מידה של התמונה המקורית על ידי.
ברגע שאנחנו בטוחים בכך, אנחנו יכולים רק להמיר n למספר שלם באמצעות atoi.
>> אז, עכשיו אנחנו הולכים ליצור כמה כינויים, פשוט להתקשר argv 2 infile, ו
argv 3 outfile, כי argv 2 ו argv 3 אינם שמות מאוד מועילים.
עכשיו אנחנו רוצים לבדוק כדי להפוך n בטוח הוא בגבולות שאנו מצפים, ולכן
המפרט מציין שאם זה פחות מ או שווה לאפס, או גדול מ 100,
אז זה גורם לשינוי גודל לא חוקי, ואנחנו צריכים להזהיר את המשתמש על כך.
>> ברגע שאנחנו מעבר לכל זה, אנחנו יכולים סוף סוף לפתוח infile שלנו, ואנחנו צריכים
לטעויות לבדוק כדי לוודא כי פתיחה לא נכשלה מסיבה כלשהי.
אנחנו גם צריכים לפתוח outfile שלנו, ו שוב שגיאת בדיקה על מנת לוודא כי
לא נכשל מסיבה כלשהי.
אבל כדי להיות בטוח אם הפתיחה outfile נכשל, כי אנחנו צריכים לסגור
infile, שכבר נפתח.
>> אז, בהנחה שלא נכשלו, אז אנחנו גוף - בדיוק כמו בcopy.c--
הולך לקרוא בכותרת מinfile.
אנחנו הולכים לוודא שזה חוקי מפת סיביות, אבל עכשיו אנחנו הולכים לעשות קצת
את הדברים קצת אחר.
אז קודם כל, אנחנו הולכים רוצים זוכר את הרוחב וגובה המקוריים
של infile, כי אנחנו הולכים ניתן לשנות אותו לoutfile.
אז עכשיו תזכור שמסיבות מוזרות bi.biheight, הוא שלילי, ו
כך הגובה בפועל, בחיובי, אנו רוצה לקחת את הערך המוחלט.
>> עכשיו, הריפוד הולך להיות אותו הדבר חישוב כפי שהיה בcopy.c,
שימוש ברוחב הישן, ועכשיו אנחנו באמת הולך לשנות
מה של בכותרת שלנו.
אז אנחנו הולכים להכפיל את הרוחב שלנו על ידי n, שכן אנחנו קנה מידה של הרוחב על ידי
n, הכפל את הגובה על ידי n, מאז אנחנו קנה מידה על ידי n, ועכשיו יש לנו
החישוב לריפוד חדש המבוסס על הרוחב החדש.
>> אז עכשיו אנחנו צריכים לשנות כמה תחומים אחרים בכותרת העליונה שלנו.
Bi.biSizeImage אמור להיות גודלו של כל הבתים בפיקסלים
וריפוד של התמונה.
וכן בגודל של שורה אחת שלנו תמונה היא בגודל של RGB המשולש, הגודל
של פיקסל אחד, פעמים מספר פיקסלים ברציפות, בתוספת הריפוד ב
סוף השורה.
ואז אנחנו הולכים להכפיל את זה על ידי ערך מוחלט של הגובה שלנו כדי לקבל
מספרם הכולל של בתים בנתוני התמונה.
bf.bfSize הוא רק המספר הכולל בתים בנתוני התמונה שלנו, אז
bi.biSizeImage, בתוספת גודל של הכותרות העליונות שלנו.
לכן, הוספה על גודל קובץ מפת סיביות כותרת, וגודל של מידע מפת סיביות
כותרת, על אישור.
אז זה כל מה שאנחנו צריכים לשנות בכותרות שלנו.
עכשיו אצטרך לכתוב את כותרת קובץ מפת הסיביות לoutfile שלנו, ומידע מפת הסיביות שלנו
כותרת לoutfile שלנו, ועכשיו אנחנו מוכנים להתחיל ללכת
מעל פיקסלים בפועל.
>> אז אנחנו רוצים לחזר על קווי הסריקה של infile.
אז אנחנו רוצים לחזר על oldheight.
זו הסיבה שאנחנו צריכים לזכור גובו המקורי, לפני שנשנה אותו
וטפס אותו על ידי n.
עכשיו אנחנו הולכים לקריאה אחת שורה של infile לתוך
חיץ של גודל oldwidth.
גודל אז הנה, אנחנו freading של RGB פיקסל משולש, אחד, ורוחב של ישן
שלהם מinfile למאגר שלנו.
וזה הולך להיות כולו שורה במערך זה.
אז עכשיו, אנחנו רוצים לחזר פעמים n ל להדפיס שורה זו לoutfile n הפעמים שלנו.
ואז זה מה שהלולאה הזו עושה.
לולאה פנימית זה iterating מעל שורה עצמו, על המערך, ההדפסה
כל פיקסל במערך n פעמים.
אז אלמנט האפס הוא להיות מודפס n פעמים, הרכיב הראשון הוא להיות
הודפס פעמים n.
וזה סוג של איך אנחנו הולכים אופקית בקנה מידה בoutfile, ו
לולאה זו, שכן אנחנו לולאת n פעמים, היא איך אנחנו הולכים
קנה מידה בצורה אנכית.
>> כאן, אנחנו רואים שאנחנו צריכים להוסיף הריפוד בסוף כל שורה.
זו הסיבה שזה נמצא בישוב ללולאה שמדפיס את שורות n רק
שורה זו אחת מinfile.
כאן למטה ואז, אני הולך לדלג על הריפוד בinfile, שכן פעם אחת
שנסיים עם שורה אחת של infile, לא אכפת לנו
מה היה הריפוד.
אנחנו רק רוצים להגיע לשורה השנייה.
ואז לולאה אחורה ולעשות את כל זה שוב לשורה השנייה.
>> לבסוף, ברגע שנסיים עם כל זה, אנחנו יכולים לסגור את infile, קרוב
outfile, והתשואה 0 בגלל שאנחנו סיימנו.
>> השם שלי הוא רוב, וזה היה שינוי גודל.
>> [השמעת מוסיקה]