1 00:00:00,000 --> 00:00:12,240 >> [เล่นดนตรี] 2 00:00:12,240 --> 00:00:15,870 >> ROB สลิง: สวัสดีครับผมร็อบให้ ลองนี้ในขนาด 3 00:00:15,870 --> 00:00:21,100 ดังนั้นเราจึงเป็นอีกครั้งที่จะเริ่มต้นด้วย พื้นสำเนาของ copy.c และ 4 00:00:21,100 --> 00:00:22,860 ทำให้การเปลี่ยนแปลงไม่กี่ 5 00:00:22,860 --> 00:00:26,280 หมายเหตุทันทีที่เราเห็นการเปลี่ยนแปลงที่ แทนการตรวจสอบเพื่อดูว่า 6 00:00:26,280 --> 00:00:30,440 argc ไม่เท่ากับ 3 เราต้องการที่จะตรวจสอบ ถ้า argc ไม่เท่ากับ 4 เนื่องจาก 7 00:00:30,440 --> 00:00:34,350 ตอนนี้เราไม่ได้เพียงการใน INFILE และ OUTFILE แต่เรายังมีการใน 8 00:00:34,350 --> 00:00:38,980 n ซึ่งคือจำนวนเงินที่เรา ปรับภาพต้นฉบับโดย 9 00:00:38,980 --> 00:00:44,340 เมื่อเรากำลังตรวจสอบว่าการที่เราสามารถเพียง แปลง n เป็นจำนวนเต็มโดยใช้ atoi 10 00:00:44,340 --> 00:00:48,760 >> ดังนั้นตอนนี้เรากำลังจะสร้างบาง แทนเพียงโทร argv 2 INFILE และ 11 00:00:48,760 --> 00:00:54,240 argv 3 OUTFILE เพราะ argv 2 argv 3 ไม่ได้ชื่อที่เป็นประโยชน์มาก 12 00:00:54,240 --> 00:00:58,510 ตอนนี้เราต้องการที่จะตรวจสอบเพื่อให้แน่ใจว่า n คือ ภายในขอบเขตที่เราคาดหวังดังนั้น 13 00:00:58,510 --> 00:01:02,910 spec ระบุว่าถ้าหากมันเป็นน้อยกว่าหรือ เท่ากับศูนย์หรือมากกว่า 100 14 00:01:02,910 --> 00:01:08,580 แล้วว่าเป็นปัจจัยการปรับขนาดที่ไม่ถูกต้อง และเราควรจะเตือนผู้ใช้ว่า 15 00:01:08,580 --> 00:01:13,090 >> เมื่อเรากำลังเกินกว่าสิ่งที่เราสามารถทำได้ ในที่สุดก็เปิด INFILE ของเราและเราต้องการ 16 00:01:13,090 --> 00:01:16,270 ข้อผิดพลาดการตรวจสอบเพื่อให้แน่ใจว่า เปิดไม่ได้ล้มเหลวด้วยเหตุผลบางอย่าง 17 00:01:16,270 --> 00:01:19,860 นอกจากนี้เรายังต้องเปิด OUTFILE ของเราและ อีกครั้งข้อผิดพลาดการตรวจสอบเพื่อให้แน่ใจว่า 18 00:01:19,860 --> 00:01:21,250 ไม่ได้ล้มเหลวด้วยเหตุผลบางอย่าง 19 00:01:21,250 --> 00:01:26,270 แต่ต้องแน่ใจว่าการเปิดตัวของ OUTFILE ล้มเหลวที่เราต้องปิด 20 00:01:26,270 --> 00:01:29,040 INFILE ซึ่งเปิดอยู่แล้ว 21 00:01:29,040 --> 00:01:33,690 >> ดังนั้นสมมติว่าไม่ได้ล้มเหลวแล้ว we're - เช่นเดียวกับใน copy.c - 22 00:01:33,690 --> 00:01:36,140 ไปอ่านในส่วนหัวของ จาก INFILE 23 00:01:36,140 --> 00:01:40,130 เราจะทำให้แน่ใจว่ามันถูกต้อง บิตแมป แต่ตอนนี้เรากำลังจะทำบางอย่าง 24 00:01:40,130 --> 00:01:41,620 สิ่งเล็กน้อยที่แตกต่างกัน 25 00:01:41,620 --> 00:01:44,870 ดังนั้นก่อนที่เราจะต้องการ จำไว้ความกว้างและความสูงเดิม 26 00:01:44,870 --> 00:01:48,290 ของ INFILE เพราะเรากำลังจะ จะเปลี่ยนมันให้ OUTFILE 27 00:01:48,290 --> 00:01:53,890 ดังนั้นตอนนี้จำไว้ว่าสำหรับเหตุผลที่แปลก bi.biheight เป็นลบและ 28 00:01:53,890 --> 00:01:58,670 ดังนั้นความสูงที่เกิดขึ้นจริงในเชิงบวกเรา ต้องการที่จะใช้ค่าสัมบูรณ์ 29 00:01:58,670 --> 00:02:02,580 >> ตอนนี้ช่องว่างภายในเป็นไปได้เหมือนกัน การคำนวณมันเป็นใน copy.c, 30 00:02:02,580 --> 00:02:06,060 โดยใช้ความกว้างเก่าและตอนนี้เรากำลัง จริงจะมีการเปลี่ยนแปลง 31 00:02:06,060 --> 00:02:07,320 สิ่งที่อยู่ในหัวของเรา 32 00:02:07,320 --> 00:02:11,200 ดังนั้นเราจะคูณความกว้างของเราโดย n เนื่องจากเรากำลังปรับความกว้างโดย 33 00:02:11,200 --> 00:02:15,100 n คูณความสูงด้วย n เนื่องจากเรากำลัง ปรับด้วย n และตอนนี้เรามี 34 00:02:15,100 --> 00:02:19,250 การคำนวณการขยายใหม่ ขึ้นอยู่กับความกว้างใหม่ 35 00:02:19,250 --> 00:02:21,840 >> ดังนั้นตอนนี้เราจำเป็นต้องเปลี่ยนแปลงบางอย่าง สาขาอื่น ๆ ที่อยู่ในส่วนหัวของเรา 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage ควรจะเป็น ขนาดของไบต์ทั้งหมดที่อยู่ในพิกเซล 37 00:02:26,890 --> 00:02:28,520 และช่องว่างภายในของภาพ 38 00:02:28,520 --> 00:02:34,190 ดังนั้นขนาดของแถวเดียวของเรา ภาพคือขนาดของ RGB สามขนาด 39 00:02:34,190 --> 00:02:39,430 ของพิกเซลเดี่ยวครั้งจำนวนของ พิกเซลในแถวรวมทั้งช่องว่างภายในที่ 40 00:02:39,430 --> 00:02:40,910 ท้ายแถว 41 00:02:40,910 --> 00:02:45,200 และจากนั้นเราจะคูณด้วย ค่าสัมบูรณ์ของความสูงของเราที่จะได้รับ 42 00:02:45,200 --> 00:02:48,350 จำนวนไบต์ ในข้อมูลภาพ 43 00:02:48,350 --> 00:02:53,050 bf.bfSize เป็นเพียงจำนวน ของไบต์ในข้อมูลภาพของเราดังนั้น 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage บวก ขนาดของส่วนหัวของเรา 45 00:02:56,530 --> 00:02:59,850 ดังนั้นการเพิ่มขนาดของไฟล์บิตแมป ส่วนหัวและขนาดของข้อมูลบิตแมป 46 00:02:59,850 --> 00:03:00,800 ส่วนหัวตกลง 47 00:03:00,800 --> 00:03:03,170 ดังนั้นนั่นคือทั้งหมดที่เราจำเป็นต้อง การเปลี่ยนแปลงในส่วนหัวของเรา 48 00:03:03,170 --> 00:03:07,020 ตอนนี้เราจะเขียนส่วนหัวของแฟ้มบิตแมป จะ OUTFILE ของเราและข้อมูลบิตแมปของเรา 49 00:03:07,020 --> 00:03:09,880 ส่วนหัวจะ OUTFILE เราและตอนนี้ เราก็พร้อมที่จะเริ่มต้นไป 50 00:03:09,880 --> 00:03:11,990 กว่าพิกเซลที่เกิดขึ้นจริง 51 00:03:11,990 --> 00:03:15,720 >> ดังนั้นเราจึงต้องการที่จะย้ำกว่า เส้นสแกน INFILE ของ 52 00:03:15,720 --> 00:03:17,730 ดังนั้นเราจึงต้องการที่จะย้ำกว่า oldheight 53 00:03:17,730 --> 00:03:20,830 นี่คือเหตุผลที่เราต้องจำไว้ ความสูงเดิมก่อนที่เราจะเปลี่ยนมัน 54 00:03:20,830 --> 00:03:23,040 และปรับขนาดได้โดย n 55 00:03:23,040 --> 00:03:27,810 ตอนนี้เรากำลังจะอ่านเพียงครั้งเดียว แถว INFILE ลง 56 00:03:27,810 --> 00:03:30,630 บัฟเฟอร์ขนาด oldwidth 57 00:03:30,630 --> 00:03:36,190 ขนาดดังนั้นที่นี่เรากำลัง freading ของ RGB สามหนึ่งพิกเซลและความกว้างที่เก่าแก่ของ 58 00:03:36,190 --> 00:03:39,760 พวกเขาจาก INFILE ลงในบัฟเฟอร์ของเรา 59 00:03:39,760 --> 00:03:43,480 และที่เป็นไปได้ทั้งหมด แถวในอาร์เรย์นี้ 60 00:03:43,480 --> 00:03:50,390 ดังนั้นตอนนี้เราต้องการที่จะย้ำ n ครั้งเพื่อ พิมพ์แถวนี้เพื่อ OUTFILE n ครั้งของเรา 61 00:03:50,390 --> 00:03:52,510 และอื่น ๆ ที่เป็นสิ่งที่วงนี้จะทำ 62 00:03:52,510 --> 00:03:57,910 วงนี้ภายในจะถูก iterating กว่า แถวตัวเองมากกว่าอาร์เรย์และการพิมพ์ 63 00:03:57,910 --> 00:04:00,710 พิกเซลในอาร์เรย์ n ครั้งในแต่ละ 64 00:04:00,710 --> 00:04:04,510 ดังนั้นองค์ประกอบ 0 จะถูกพิมพ์ n ครั้งองค์ประกอบแรกจะถูก 65 00:04:04,510 --> 00:04:05,660 n พิมพ์ครั้งที่ 66 00:04:05,660 --> 00:04:10,820 และที่การเรียงลำดับของวิธีการที่เรากำลังจะ แนวนอนขนาดใน OUTFILE และ 67 00:04:10,820 --> 00:04:13,390 วงนี้เนื่องจากเรากำลังวนลูป n ครั้งคือวิธีที่เรากำลังจะ 68 00:04:13,390 --> 00:04:15,580 ขนาดในแนวตั้ง 69 00:04:15,580 --> 00:04:19,850 >> ลงที่นี่เราจะเห็นว่าเราต้องเพิ่ม padding ตอนท้ายของแต่ละแถว 70 00:04:19,850 --> 00:04:25,050 นั่นเป็นเหตุผลที่นี้อยู่ภายในห่วงสำหรับ ที่พิมพ์ออก n แถวเพียง 71 00:04:25,050 --> 00:04:28,400 นี้หนึ่งแถวจาก INFILE 72 00:04:28,400 --> 00:04:32,150 แล้วลงที่นี่ฉันจะข้าม padding ใน INFILE ตั้งแต่เมื่อ 73 00:04:32,150 --> 00:04:34,560 เรากำลังทำกับหนึ่งแถวของ INFILE เราไม่สนใจเกี่ยวกับ 74 00:04:34,560 --> 00:04:35,290 สิ่งที่เป็นช่องว่างภายใน 75 00:04:35,290 --> 00:04:37,110 เราเพียงแค่ต้องการที่จะได้รับไปยังแถวที่สอง 76 00:04:37,110 --> 00:04:40,870 และจากนั้นเราจะห่วงกลับและทำทุก นี้อีกครั้งสำหรับแถวที่สอง 77 00:04:40,870 --> 00:04:44,406 >> สุดท้ายเมื่อเรากำลังทำกับสิ่งที่ เราสามารถปิด INFILE ใกล้ 78 00:04:44,406 --> 00:04:47,430 OUTFILE และผลตอบแทน 0 เพราะเรากำลังทำ 79 00:04:47,430 --> 00:04:50,330 >> ชื่อของฉันคือร็อบและนี่คือการปรับขนาด 80 00:04:50,330 --> 00:04:54,934 >> [เล่นดนตรี]