[เล่นดนตรี] ROB สลิง: สวัสดีครับผมร็อบให้ ลองนี้ในขนาด ดังนั้นเราจึงเป็นอีกครั้งที่จะเริ่มต้นด้วย พื้นสำเนาของ copy.c และ ทำให้การเปลี่ยนแปลงไม่กี่ หมายเหตุทันทีที่เราเห็นการเปลี่ยนแปลงที่ แทนการตรวจสอบเพื่อดูว่า argc ไม่เท่ากับ 3 เราต้องการที่จะตรวจสอบ ถ้า argc ไม่เท่ากับ 4 เนื่องจาก ตอนนี้เราไม่ได้เพียงการใน INFILE และ OUTFILE แต่เรายังมีการใน n ซึ่งคือจำนวนเงินที่เรา ปรับภาพต้นฉบับโดย เมื่อเรากำลังตรวจสอบว่าการที่เราสามารถเพียง แปลง n เป็นจำนวนเต็มโดยใช้ atoi ดังนั้นตอนนี้เรากำลังจะสร้างบาง แทนเพียงโทร argv 2 INFILE และ argv 3 OUTFILE เพราะ argv 2 argv 3 ไม่ได้ชื่อที่เป็นประโยชน์มาก ตอนนี้เราต้องการที่จะตรวจสอบเพื่อให้แน่ใจว่า n คือ ภายในขอบเขตที่เราคาดหวังดังนั้น spec ระบุว่าถ้าหากมันเป็นน้อยกว่าหรือ เท่ากับศูนย์หรือมากกว่า 100 แล้วว่าเป็นปัจจัยการปรับขนาดที่ไม่ถูกต้อง และเราควรจะเตือนผู้ใช้ว่า เมื่อเรากำลังเกินกว่าสิ่งที่เราสามารถทำได้ ในที่สุดก็เปิด INFILE ของเราและเราต้องการ ข้อผิดพลาดการตรวจสอบเพื่อให้แน่ใจว่า เปิดไม่ได้ล้มเหลวด้วยเหตุผลบางอย่าง นอกจากนี้เรายังต้องเปิด OUTFILE ของเราและ อีกครั้งข้อผิดพลาดการตรวจสอบเพื่อให้แน่ใจว่า ไม่ได้ล้มเหลวด้วยเหตุผลบางอย่าง แต่ต้องแน่ใจว่าการเปิดตัวของ OUTFILE ล้มเหลวที่เราต้องปิด INFILE ซึ่งเปิดอยู่แล้ว ดังนั้นสมมติว่าไม่ได้ล้มเหลวแล้ว we're - เช่นเดียวกับใน 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 ครั้งในแต่ละ ดังนั้นองค์ประกอบ 0 จะถูกพิมพ์ n ครั้งองค์ประกอบแรกจะถูก n พิมพ์ครั้งที่ และที่การเรียงลำดับของวิธีการที่เรากำลังจะ แนวนอนขนาดใน OUTFILE และ วงนี้เนื่องจากเรากำลังวนลูป n ครั้งคือวิธีที่เรากำลังจะ ขนาดในแนวตั้ง ลงที่นี่เราจะเห็นว่าเราต้องเพิ่ม padding ตอนท้ายของแต่ละแถว นั่นเป็นเหตุผลที่นี้อยู่ภายในห่วงสำหรับ ที่พิมพ์ออก n แถวเพียง นี้หนึ่งแถวจาก INFILE แล้วลงที่นี่ฉันจะข้าม padding ใน INFILE ตั้งแต่เมื่อ เรากำลังทำกับหนึ่งแถวของ INFILE เราไม่สนใจเกี่ยวกับ สิ่งที่เป็นช่องว่างภายใน เราเพียงแค่ต้องการที่จะได้รับไปยังแถวที่สอง และจากนั้นเราจะห่วงกลับและทำทุก นี้อีกครั้งสำหรับแถวที่สอง สุดท้ายเมื่อเรากำลังทำกับสิ่งที่ เราสามารถปิด INFILE ใกล้ OUTFILE และผลตอบแทน 0 เพราะเรากำลังทำ ชื่อของฉันคือร็อบและนี่คือการปรับขนาด [เล่นดนตรี]