>> [เล่นดนตรี]
>> 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 เพราะเรากำลังทำ
>> ชื่อของฉันคือร็อบและนี่คือการปรับขนาด
>> [เล่นดนตรี]