1 00:00:00,000 --> 00:00:09,500 >> [เล่นดนตรี] 2 00:00:09,500 --> 00:00:12,350 >> ZAMYLA จัน: มันเป็นนางสาวคาร์เลตต์ ด้วยเชิงเทียน 3 00:00:12,350 --> 00:00:13,560 สืบสวนสอบสวน? 4 00:00:13,560 --> 00:00:15,030 ดีที่เรากำลังจะไปหา 5 00:00:15,030 --> 00:00:20,870 ในแย้มเกมกระดานคุณอาจ ได้รับภาพสีแดงทางกายภาพ 6 00:00:20,870 --> 00:00:24,120 และภาพที่มีสีแดงมากและ เป็นจุด ๆ และงานของคุณคือการ 7 00:00:24,120 --> 00:00:25,490 เผยให้เห็นข้อความที่ซ่อนอยู่ 8 00:00:25,490 --> 00:00:29,740 และมักจะคุณจะให้มาพร้อมกับสีแดง แว่นขยายหรือหน้าจอสีแดง 9 00:00:29,740 --> 00:00:31,410 เผยให้เห็นข้อความที่ซ่อนอยู่ที่ 10 00:00:31,410 --> 00:00:33,340 ดีที่เรากำลังจะเลียนแบบที่ 11 00:00:33,340 --> 00:00:37,960 >> ในสืบสวนสอบสวน, คุณได้รับภาพบิตแมป ที่มีลักษณะเป็นจุด ๆ มากและสีแดง 12 00:00:37,960 --> 00:00:43,430 และเรียกใช้โปรแกรมสืบสวนสอบสวน เพื่อเผยให้เห็นข้อความที่ซ่อนอยู่ 13 00:00:43,430 --> 00:00:45,650 >> จึงขอแบ่งนี้เป็นขั้นตอน 14 00:00:45,650 --> 00:00:50,390 ขั้นแรกคุณต้องการเปิดแฟ้ม - เบาะแสที่คุณได้รับ 15 00:00:50,390 --> 00:00:53,880 แล้วยังสร้าง แฟ้มคำตัดสินบิตแมป 16 00:00:53,880 --> 00:00:58,240 แล้วคุณต้องการที่จะปรับปรุงบิตแมป ส่วนหัวข้อมูลการ OUTFILE คำตัดสิน 17 00:00:58,240 --> 00:00:59,920 เพิ่มเติมว่าภายหลัง 18 00:00:59,920 --> 00:01:04,319 แล้วคุณจะได้อ่านใน เงื่อนงำ scanline พิกเซลโดยพิกเซล 19 00:01:04,319 --> 00:01:07,320 เปลี่ยนสีพิกเซลเป็น ที่จำเป็นและการเขียน 20 00:01:07,320 --> 00:01:08,960 ที่เป็นคำตัดสินของศาล - 21 00:01:08,960 --> 00:01:12,000 พิกเซลพิกเซลเป็น คำตัดสิน scanline 22 00:01:12,000 --> 00:01:13,780 >> เราจะเริ่มต้นที่จะไปเกี่ยวกับเรื่องนี้ได้อย่างไร 23 00:01:13,780 --> 00:01:16,940 ดีโชคดีที่เรามี copy.c ในรหัสการกระจาย 24 00:01:16,940 --> 00:01:21,240 และนี้จะพิสูจน์ ค่อนข้างมีประโยชน์กับเรา 25 00:01:21,240 --> 00:01:29,700 Copy.c เปิดแฟ้ม, อ่านในที่ INFILE ของส่วนหัวแล้วปรับปรุง 26 00:01:29,700 --> 00:01:31,070 ส่วนหัวของ OUTFILE 27 00:01:31,070 --> 00:01:37,010 แล้วก็อ่านในแต่ละพิกเซล scanline พิกเซลพิกเซลแล้ว 28 00:01:37,010 --> 00:01:42,390 เขียนพิกเซลที่เป็น OUTFILE 29 00:01:42,390 --> 00:01:45,020 >> ดังนั้นขั้นตอนแรกของคุณอาจ จะทำงานต่อไป 30 00:01:45,020 --> 00:01:46,420 คำสั่งใน terminal - 31 00:01:46,420 --> 00:01:50,270 cp copy.c whodunit.c 32 00:01:50,270 --> 00:01:55,320 นี้จะสร้างสำเนาของ copy.c ชื่อ whodunit.c 33 00:01:55,320 --> 00:01:58,320 ดังนั้นขั้นตอนแรกของเราที่จะเปิด ไฟล์ดีมีแน่นอน 34 00:01:58,320 --> 00:02:00,070 แบบจำลองที่อยู่ใน copy.c. 35 00:02:00,070 --> 00:02:03,360 ดังนั้นฉันจะปล่อยให้คุณมองไปที่ว่า 36 00:02:03,360 --> 00:02:07,860 >> สิ่งที่เรากำลังติดต่อกับใน pset นี้ ไฟล์ I / O โดยทั่วไปการไฟล์ 37 00:02:07,860 --> 00:02:10,229 การอ่านการเขียนการแก้ไขพวกเขา 38 00:02:10,229 --> 00:02:12,650 วิธีการทำที่คุณเปิดแฟ้มแรก 39 00:02:12,650 --> 00:02:16,800 ดีที่คุณกำลังจะประกาศแฟ้ม ตัวชี้แล้วคุณโทร 40 00:02:16,800 --> 00:02:18,670 fopen ฟังก์ชั่น 41 00:02:18,670 --> 00:02:23,150 ผ่านในเส้นทางหรือชื่อของว่า ยื่นแล้วโหมดที่คุณต้องการ 42 00:02:23,150 --> 00:02:24,700 จะเปิดแฟ้มที่ค่ะ 43 00:02:24,700 --> 00:02:28,620 ผ่านใน r จะเปิด foo.bmp สำหรับการอ่าน 44 00:02:28,620 --> 00:02:35,670 ในขณะที่มี fopen ผ่านในน้ำหนักจะ bar.bmp เปิดสำหรับการเขียนไฟล์และ 45 00:02:35,670 --> 00:02:37,020 การแก้ไขก็จริง 46 00:02:37,020 --> 00:02:41,970 >> ดังนั้นขณะนี้ที่เราได้เปิดไฟล์ของเรา ขั้นตอนต่อไปคือการปรับปรุงข้อมูลส่วนหัว 47 00:02:41,970 --> 00:02:43,230 เพื่อ OUTFILE 48 00:02:43,230 --> 00:02:44,610 สิ่งที่ข้อมูลส่วนหัวหรือไม่ 49 00:02:44,610 --> 00:02:48,160 ดีแรกที่เราจำเป็นต้องรู้ สิ่งที่เป็นบิตแมป 50 00:02:48,160 --> 00:02:51,000 บิตแมปเป็นเพียงง่าย การจัดเรียงของไบต์ 51 00:02:51,000 --> 00:02:55,480 และพวกเขากำลังประกาศในแฟ้มนี้ ที่นี่ bmp.h, มีพวงของ 52 00:02:55,480 --> 00:02:58,610 ข้อมูลของสิ่งที่บิตแมป จะทำจริงออกจาก 53 00:02:58,610 --> 00:03:05,730 แต่สิ่งที่เราจริงๆดูแลเกี่ยวกับการเป็น ส่วนหัวของแฟ้มบิตแมปที่นี่และ 54 00:03:05,730 --> 00:03:08,460 ส่วนหัวของข้อมูลบิตแมปที่นี่ 55 00:03:08,460 --> 00:03:13,170 ส่วนหัวที่ประกอบด้วยคู่ของ ตัวแปรที่จะพิสูจน์ว่ามีประโยชน์มาก 56 00:03:13,170 --> 00:03:18,400 มี biSizeImage ซึ่งเป็นเป็น ขนาดของภาพเป็นไบต์ 57 00:03:18,400 --> 00:03:20,890 และรวมถึงพิกเซลและช่องว่างภายใน 58 00:03:20,890 --> 00:03:24,210 padding เป็นสิ่งที่สำคัญมาก แต่ เราจะให้ในภายหลังว่า 59 00:03:24,210 --> 00:03:30,000 >> BiWidth แสดงให้เห็นถึงความกว้างของ ภาพในพิกเซลลบช่องว่างภายใน 60 00:03:30,000 --> 00:03:34,220 BiHeight แล้วยังเป็นความสูง ของภาพเป็นพิกเซล 61 00:03:34,220 --> 00:03:38,240 แล้ว BITMAPFILEHEADER และ BITMAPINFOHEADER ที่ผมกล่าวถึง 62 00:03:38,240 --> 00:03:40,900 ก่อนหน้านี้ผู้ที่จะเป็นตัวแทนของ เป็น structs 63 00:03:40,900 --> 00:03:45,410 ดังนั้นคุณไม่สามารถเข้าถึงส่วนหัวของแฟ้ม ตัวเอง แต่คุณจะต้องการที่จะได้รับการ 64 00:03:45,410 --> 00:03:47,370 ตัวแปรเหล่านั้นภายใน 65 00:03:47,370 --> 00:03:48,170 >> ตกลง 66 00:03:48,170 --> 00:03:50,600 ดังนั้นทำอย่างไรเราปรับปรุงข้อมูลส่วนหัวหรือไม่ 67 00:03:50,600 --> 00:03:54,020 ดีแรกที่เราต้องดูว่าเรา จำเป็นต้องเปลี่ยนข้อมูลใด ๆ จาก 68 00:03:54,020 --> 00:03:58,480 INFILE เบาะแสเพื่อ OUTFILE, คำตัดสิน 69 00:03:58,480 --> 00:04:00,250 มีอะไรที่เปลี่ยนแปลงในกรณีนี้ 70 00:04:00,250 --> 00:04:04,320 ดีไม่จริงเพราะเรากำลังจะ ที่จะเพียงแค่เปลี่ยนสี 71 00:04:04,320 --> 00:04:07,550 เราไม่ได้จะได้รับการเปลี่ยนไฟล์ ขนาดขนาดภาพกว้าง 72 00:04:07,550 --> 00:04:08,310 หรือความสูง 73 00:04:08,310 --> 00:04:14,010 ดังนั้นคุณขวาทั้งหมดในขณะนี้โดย เพียงแค่คัดลอกแต่ละพิกเซล 74 00:04:14,010 --> 00:04:14,840 >> ตกลง 75 00:04:14,840 --> 00:04:20,720 ดังนั้นตอนนี้ให้ดูที่วิธีการที่เราจริง สามารถอ่านทุกพิกเซลจากไฟล์ 76 00:04:20,720 --> 00:04:23,640 ไฟล์อื่น I / O ฟังก์ชั่น จะเข้ามาเล่น - 77 00:04:23,640 --> 00:04:24,700 fread 78 00:04:24,700 --> 00:04:28,440 ก็จะใช้เวลาในการชี้ไปยัง struct ที่จะมีไบต์ที่ 79 00:04:28,440 --> 00:04:30,110 ที่คุณกำลังอ่าน 80 00:04:30,110 --> 00:04:31,890 ดังนั้นที่คุณกำลังอ่านในที่ 81 00:04:31,890 --> 00:04:36,090 แล้วคุณจะผ่านในขนาดซึ่งเป็น ขนาดของทุกองค์ประกอบที่คุณ 82 00:04:36,090 --> 00:04:37,360 ต้องการอ่าน 83 00:04:37,360 --> 00:04:40,640 ที่นี่ sizeof ฟังก์ชั่น จะมาในสะดวก 84 00:04:40,640 --> 00:04:45,570 แล้วคุณจะผ่านในจำนวนที่ แสดงให้เห็นถึงจำนวนขององค์ประกอบของ 85 00:04:45,570 --> 00:04:47,480 ขนาดที่จะอ่าน 86 00:04:47,480 --> 00:04:51,180 และแล้วในที่สุด inptr ซึ่งเป็น ตัวชี้แฟ้มที่คุณ 87 00:04:51,180 --> 00:04:52,530 จะอ่านจาก 88 00:04:52,530 --> 00:04:58,650 ดังนั้นทั้งหมดขององค์ประกอบที่มีอยู่ภายใน inptr และพวกเขากำลังจะข้อมูล 89 00:04:58,650 --> 00:05:01,660 >> ลองดูที่เป็นตัวอย่างเล็ก ๆ น้อย ๆ 90 00:05:01,660 --> 00:05:07,590 ถ้าผมต้องการที่จะอ่านเป็นข้อมูลสองสุนัข ดีฉันสามารถทำมันได้อย่างใดอย่างหนึ่งในสองวิธี 91 00:05:07,590 --> 00:05:15,250 ฉันสามารถอ่านได้ทั้งในสองวัตถุที่มีขนาด สุนัขจาก inptr ฉันหรือฉันสามารถอ่าน 92 00:05:15,250 --> 00:05:19,280 หนึ่งในวัตถุขนาดของสุนัขสองตัว 93 00:05:19,280 --> 00:05:23,580 ดังนั้นคุณจะเห็นว่าขึ้นอยู่กับวิธีที่ ที่คุณจัดขนาดและจำนวนคุณ 94 00:05:23,580 --> 00:05:25,840 สามารถอ่านได้ในจำนวนเดียวกันของไบต์ 95 00:05:25,840 --> 00:05:28,720 96 00:05:28,720 --> 00:05:33,020 >> ดังนั้นตอนนี้ขอเปลี่ยน สีพิกเซลในขณะที่เราต้องการ 97 00:05:33,020 --> 00:05:37,320 ถ้าคุณดูที่ bmp.h อีกครั้งแล้ว คุณจะเห็นว่าที่ด้านล่าง 98 00:05:37,320 --> 00:05:42,920 RGBTRIPLEs เป็นโครงสร้างอื่นที่ พวกเขาจะประกอบด้วยสามไบต์ 99 00:05:42,920 --> 00:05:49,220 หนึ่ง rgbtBlue, rgbtGreen และ rgbtRed 100 00:05:49,220 --> 00:05:52,480 ดังนั้นแต่ละเหล่านี้แสดงให้เห็นถึงจำนวนเงินที่ สีฟ้าปริมาณของสีเขียวและ 101 00:05:52,480 --> 00:05:57,250 ปริมาณของสีแดงในภาพนี้ที่ แต่ละจำนวนเงินที่เป็นตัวแทนจาก 102 00:05:57,250 --> 00:05:58,670 เลขฐานสิบหก 103 00:05:58,670 --> 00:06:04,370 >> ดังนั้น ff0000 จะเป็นสีฟ้า เพราะมันจะไปจากสีฟ้า 104 00:06:04,370 --> 00:06:05,850 เป็นสีเขียวเป็นสีแดง 105 00:06:05,850 --> 00:06:09,300 และแล้วสิ่งที่เอฟจะเป็นสีขาว 106 00:06:09,300 --> 00:06:13,440 ลองมาดูที่ smiley.bmp ซึ่ง ที่คุณมีในรหัสการกระจายของคุณ 107 00:06:13,440 --> 00:06:15,690 ถ้าคุณเปิดได้ในเพียงภาพ ดูแล้วคุณจะ 108 00:06:15,690 --> 00:06:17,080 เพียงแค่เห็นยิ้มสีแดง 109 00:06:17,080 --> 00:06:20,380 แต่การดำน้ำลึกลงไปในเราจะ เห็นว่าโครงสร้าง 110 00:06:20,380 --> 00:06:22,340 มันเป็นเพียงพิกเซล 111 00:06:22,340 --> 00:06:25,880 เรามีพิกเซลสีขาว แล้วพิกเซลสีแดง 112 00:06:25,880 --> 00:06:31,000 สีขาว FFFFFF และแล้วทั้งหมดของ พิกเซลสีแดงผมสีในสำหรับคุณ 113 00:06:31,000 --> 00:06:35,440 ที่นี่และคุณจะเห็นว่าพวกเขากำลัง 0000ff 114 00:06:35,440 --> 00:06:39,760 ศูนย์สีฟ้า, สีเขียวเป็นศูนย์และเต็มไปด้วยสีแดง 115 00:06:39,760 --> 00:06:45,350 และตั้งแต่ยิ้มแปดพิกเซลกว้าง เราไม่ได้มีช่องว่างใด ๆ 116 00:06:45,350 --> 00:06:47,360 ขวาทั้งหมด 117 00:06:47,360 --> 00:06:53,310 >> ดังนั้นถ้าผมจะกำหนดค่าที่แตกต่างกัน การ RGBTRIPLE และฉันต้องการ 118 00:06:53,310 --> 00:06:58,350 ทำให้มันเป็นสีเขียวแล้วสิ่งที่ผมจะทำคือ ฉันจะประกาศ RGBTRIPLE ชื่อ 119 00:06:58,350 --> 00:07:02,660 สามแล้วในการเข้าถึงทุก ไบต์ภายใน struct ที่ฉัน 120 00:07:02,660 --> 00:07:04,030 จะใช้ประกอบจุด 121 00:07:04,030 --> 00:07:08,430 ดังนั้น triple.rgbtBlue ฉันสามารถ ที่กำหนดให้เป็น 0 122 00:07:08,430 --> 00:07:13,460 สีเขียวที่ฉันสามารถกำหนดให้เต็ม - ใด ๆ จำนวนจริงๆระหว่าง 0 และ ff 123 00:07:13,460 --> 00:07:15,470 และสีแดงแล้วผมยังจะบอกว่า 0 124 00:07:15,470 --> 00:07:19,160 ดังนั้นแล้วที่ทำให้ผมพิกเซลสีเขียว 125 00:07:19,160 --> 00:07:23,030 >> ถัดไปสิ่งที่ถ้าผมต้องการที่จะตรวจสอบ ค่าของอะไร 126 00:07:23,030 --> 00:07:27,250 ฉันอาจมีบางสิ่งบางอย่างที่จะตรวจสอบ ไม่ว่าจะเป็นสามของค่า rgbtBlue เป็น 127 00:07:27,250 --> 00:07:31,080 ff แล้วพิมพ์ "ฉันรู้สึก สีฟ้า "เป็นผลให้ 128 00:07:31,080 --> 00:07:35,640 ตอนนี้ที่ไม่ได้หมายความว่า พิกเซลที่เป็นสีฟ้าใช่ไหม 129 00:07:35,640 --> 00:07:40,060 เนื่องจากค่าส​​ีเขียวและสีแดงของพิกเซล นอกจากนี้ยังอาจมีไม่ 0 ค่า 130 00:07:40,060 --> 00:07:43,470 สิ่งที่หมายถึงนี้และทุกสิ่งที่ นี้ได้รับการตรวจสอบเป็น 131 00:07:43,470 --> 00:07:45,610 เพื่อสีฟ้าเต็ม 132 00:07:45,610 --> 00:07:50,050 แต่ทุกพิกเซลนอกจากนี้ยังอาจมีบางส่วน ค่าสีเช่นนี้ 133 00:07:50,050 --> 00:07:52,180 ตัวอย่างต่อไปที่นี่ 134 00:07:52,180 --> 00:07:55,400 >> มันเป็นเพียงเล็กน้อยยากที่จะเห็น ว่าภาพนี้เป็นตอนนี้ 135 00:07:55,400 --> 00:08:00,320 นี้ดูนิด ๆ หน่อย ๆ เช่น clue.bmp ที่คุณจะได้รับ 136 00:08:00,320 --> 00:08:03,600 ตอนนี้ร่างกายคุณอาจแก้ปัญหานี้ เพราะมีจำนวนมากของสีแดงโดยเป็น 137 00:08:03,600 --> 00:08:07,040 ถือขึ้นหน้าจอสีแดงไปที่ภาพเพื่อ ว่าสีอื่น ๆ สามารถปรากฏ 138 00:08:07,040 --> 00:08:10,968 ดังนั้นทำอย่างไรเราเลียนแบบนี้กับ c? 139 00:08:10,968 --> 00:08:15,640 ดีเราอาจจะเอาสีแดงทั้งหมด จากภาพทั้งหมด 140 00:08:15,640 --> 00:08:21,870 ดังนั้นจะทำอย่างไรที่เราจะกำหนดทุก พิกเซลค่าสีแดง 0 141 00:08:21,870 --> 00:08:25,020 และอื่น ๆ ภาพจะดูน้อย บิตเช่นนี้ที่เราไม่มีสีแดง 142 00:08:25,020 --> 00:08:26,300 ใด ๆ 143 00:08:26,300 --> 00:08:29,390 >> เราสามารถมองเห็นข้อความที่ซ่อนอยู่ นิด ๆ หน่อย ๆ อย่างเห็นได้ชัดมากขึ้นในขณะนี้ 144 00:08:29,390 --> 00:08:31,730 มันเป็นใบหน้าที่ยิ้มอีก 145 00:08:31,730 --> 00:08:33,870 หรือบางทีเราอาจจะใช้วิธีอื่น 146 00:08:33,870 --> 00:08:36,480 บางทีเราสามารถระบุ ทั้งหมดของพิกเซลสีแดง - 147 00:08:36,480 --> 00:08:41,100 นั่นคือทั้งหมดของพิกเซลที่มี 0 สีฟ้า, 0 สีเขียวและสีแดง 0 - 148 00:08:41,100 --> 00:08:43,169 และการเปลี่ยนแปลงเหล่านั้นเป็นสีขาว 149 00:08:43,169 --> 00:08:45,470 และภาพของเราอาจมีลักษณะ บางอย่างเช่นนี้ 150 00:08:45,470 --> 00:08:48,250 นิด ๆ หน่อย ๆ ง่ายต่อการดู 151 00:08:48,250 --> 00:08:51,170 >> มีหลายวิธีอื่น ๆ ที่จะค้นพบเป็น ข้อความลับเช่นกัน 152 00:08:51,170 --> 00:08:53,730 ที่เกี่ยวข้องกับการจัดการสี 153 00:08:53,730 --> 00:08:57,050 บางทีคุณอาจจะใช้วิธีใดวิธีหนึ่ง ที่ผมกล่าวข้างต้น 154 00:08:57,050 --> 00:08:59,600 และนอกจากนี้คุณอาจต้องการ เพื่อเพิ่มบางสี 155 00:08:59,600 --> 00:09:02,620 และนำผู้ที่ออก 156 00:09:02,620 --> 00:09:06,190 >> ดังนั้นขณะนี้ที่เราได้เปลี่ยนพิกเซล สีต่อไปเราก็ต้องเขียนไว้ 157 00:09:06,190 --> 00:09:08,500 ใน scanline พิกเซลพิกเซล 158 00:09:08,500 --> 00:09:11,860 และอีกครั้งที่คุณจะต้องการที่จะมองย้อนกลับไป การ copy.c ถ้าคุณยังไม่ได้คัดลอก 159 00:09:11,860 --> 00:09:18,170 มันอยู่แล้วและดูที่ fwrite ฟังก์ชั่นซึ่งจะนำข้อมูลตัวชี้ 160 00:09:18,170 --> 00:09:23,230 เพื่อ struct ที่มีไบต์ ที่คุณกำลังอ่านจากขนาดของ 161 00:09:23,230 --> 00:09:26,610 รายการจำนวนรายการ แล้ว outptr - 162 00:09:26,610 --> 00:09:29,450 ปลายทางไฟล์เหล่านั้น 163 00:09:29,450 --> 00:09:34,010 >> หลังจากที่คุณเขียนในพิกเซลคุณจะ นอกจากนี้ยังมีการเขียนในช่องว่างภายใน 164 00:09:34,010 --> 00:09:34,970 padding คืออะไร 165 00:09:34,970 --> 00:09:38,670 ดีทุกพิกเซล rgbt สามไบต์ยาว 166 00:09:38,670 --> 00:09:43,670 แต่ scanline ภาพบิตแมป จะต้องมีหลายสี่ไบต์ 167 00:09:43,670 --> 00:09:47,650 และถ้าจำนวนพิกเซลไม่ได้เป็น หลายสี่แล้วเราต้องเพิ่ม 168 00:09:47,650 --> 00:09:48,880 padding นี้ 169 00:09:48,880 --> 00:09:51,420 padding เป็นตัวแทนเพียงแค่ 0s 170 00:09:51,420 --> 00:09:54,380 ดังนั้นวิธีที่เราเขียนหรืออ่านนี้ 171 00:09:54,380 --> 00:09:59,280 ดีก็ปรากฎว่าคุณไม่สามารถ padding fread จริง แต่คุณสามารถ 172 00:09:59,280 --> 00:10:00,970 คำนวณมัน 173 00:10:00,970 --> 00:10:04,400 >> ในกรณีนี้เบาะแสและคำตัดสิน มีความกว้างเท่ากันดังนั้น 174 00:10:04,400 --> 00:10:05,910 padding จะเหมือนกัน 175 00:10:05,910 --> 00:10:09,370 และช่องว่างภายในที่คุณจะเห็น ใน copy.c, มีการคำนวณ 176 00:10:09,370 --> 00:10:11,790 ด้วยสูตรด้านล่าง - 177 00:10:11,790 --> 00:10:16,690 ครั้ง bi.biWidth sizeof (RGBTRIPLE) จะ ให้เรากี่ไบต์, bmp 178 00:10:16,690 --> 00:10:18,280 มีอยู่ในทุกแถว 179 00:10:18,280 --> 00:10:21,890 จากนั้น Modulos และ subtractions 4 สามารถคำนวณ 180 00:10:21,890 --> 00:10:25,610 ไบต์จำนวนมากต้องมีการเพิ่มเพื่อให้ หลายไบต์ใน 181 00:10:25,610 --> 00:10:27,250 ทุกแถวสี่ 182 00:10:27,250 --> 00:10:30,490 >> ตอนนี้เรามีสูตรสำหรับ วิธีการขยายมากที่เราต้องการในขณะนี้ 183 00:10:30,490 --> 00:10:31,610 เราสามารถเขียนมัน 184 00:10:31,610 --> 00:10:34,080 ตอนนี้ผมได้กล่าวมาก่อน padding เป็นเพียง 0s 185 00:10:34,080 --> 00:10:39,730 ดังนั้นในกรณีที่เราเพียงแค่ใส่ ถ่านในกรณีนี้ 0 เป็นของเรา 186 00:10:39,730 --> 00:10:41,710 outptr - OUTFILE ของเรา 187 00:10:41,710 --> 00:10:47,530 ดังนั้นก็สามารถ fputc 0 จุลภาค outptr 188 00:10:47,530 --> 00:10:52,400 >> ดังนั้นในขณะที่เราได้รับการอ่านเป็นของเรา ไฟล์ไฟล์ I / O ได้เฝ้าติดตามของเรา 189 00:10:52,400 --> 00:10:57,440 ตำแหน่งในไฟล์เหล่านั้นกับสิ่งที่ ที่เรียกว่าตัวบ่งชี้ตำแหน่งไฟล์ 190 00:10:57,440 --> 00:10:59,350 คิดว่ามันเป็นเคอร์เซอร์ 191 00:10:59,350 --> 00:11:03,550 โดยทั่วไปจะก้าวหน้าทุกครั้ง ที่เรา fread แต่เรามี 192 00:11:03,550 --> 00:11:05,671 ควบคุมมันเกินไป 193 00:11:05,671 --> 00:11:11,030 >> เมื่อต้องการย้ายตัวบ่งชี้ตำแหน่งไฟล์ คุณสามารถใช้ฟังก์ชัน fseek 194 00:11:11,030 --> 00:11:15,600 ที่ inptr แสดงไฟล์ ตัวชี้ที่คุณกำลังมองหาใน 195 00:11:15,600 --> 00:11:20,370 จำนวนเงินที่เป็นจำนวนไบต์ที่คุณ ต้องการที่จะเลื่อนเคอร์เซอร์ไปแล้วจาก 196 00:11:20,370 --> 00:11:23,470 ที่เกี่ยวข้องกับจุดอ้างอิง จากที่เคอร์เซอร์ของคุณเป็น 197 00:11:23,470 --> 00:11:26,770 ถ้าคุณผ่านใน SEEK_CUR ที่ แสดงให้เห็นถึงปัจจุบัน 198 00:11:26,770 --> 00:11:28,100 ตำแหน่งในแฟ้ม 199 00:11:28,100 --> 00:11:31,020 หรือคุณสามารถใช้บางพารามิเตอร์อื่น ๆ 200 00:11:31,020 --> 00:11:35,400 ดังนั้นเราอาจต้องการใช้ fseek ที่จะข้าม ผ่านการขยายของไฟล์ใน 201 00:11:35,400 --> 00:11:39,410 และอีกครั้งถ้าคุณกำลังติดมี ตัวอย่างที่อยู่ใน copy.c. 202 00:11:39,410 --> 00:11:43,260 >> ดังนั้นตอนนี้เราได้เปิดไฟล์ เบาะแสและคำตัดสิน 203 00:11:43,260 --> 00:11:46,450 เราได้ปรับปรุงข้อมูลส่วนหัวสำหรับ คำตัดสินของเราเพราะทุก 204 00:11:46,450 --> 00:11:48,730 บิตแมปความต้องการของส่วนหัว 205 00:11:48,730 --> 00:11:52,280 เราได้อ่านแล้วเป็นเบาะแสของ scanline พิกเซลพิกเซลเปลี่ยน 206 00:11:52,280 --> 00:11:55,210 ทุกสีเท่าที่จำเป็นและ การเขียนที่เป็น 207 00:11:55,210 --> 00:11:57,340 คำตัดสินพิกเซลพิกเซล 208 00:11:57,340 --> 00:12:01,550 เมื่อคุณเปิดคำตัดสินคุณสามารถดูว่าใคร ผู้กระทำผิดได้หรือสิ่งที่เป็นความลับ 209 00:12:01,550 --> 00:12:02,850 ข้อความเป็น 210 00:12:02,850 --> 00:12:05,550 ชื่อของฉันคือ Zamyla และ นี้คือการสืบสวนสอบสวน 211 00:12:05,550 --> 00:12:12,864