1 00:00:00,000 --> 00:00:09,500 >> [MUSIC CHƠI] 2 00:00:09,500 --> 00:00:12,350 >> ZAMYLA CHAN: Đó là Hoa hậu Scarlett với nến. 3 00:00:12,350 --> 00:00:13,560 Whodunit? 4 00:00:13,560 --> 00:00:15,030 Vâng, chúng ta sẽ tìm hiểu. 5 00:00:15,030 --> 00:00:20,870 Trong các trò chơi hội đồng quản trị Clue, bạn có thể được cung cấp một hình ảnh màu đỏ vật lý. 6 00:00:20,870 --> 00:00:24,120 Và hình ảnh đó là rất đỏ và chắp vá, và việc của bạn là 7 00:00:24,120 --> 00:00:25,490 tiết lộ thông điệp ẩn. 8 00:00:25,490 --> 00:00:29,740 Và thường là bạn đang cung cấp với một màu đỏ kính lúp, hoặc một màn hình màu đỏ để 9 00:00:29,740 --> 00:00:31,410 tiết lộ rằng thông điệp ẩn. 10 00:00:31,410 --> 00:00:33,340 Vâng, chúng ta sẽ bắt chước đó. 11 00:00:33,340 --> 00:00:37,960 >> Trong whodunit, bạn sẽ được một hình ảnh bitmap trông rất chắp vá và đỏ, 12 00:00:37,960 --> 00:00:43,430 và sau đó chạy chương trình whodunit để lộ ra một thông điệp ẩn. 13 00:00:43,430 --> 00:00:45,650 >> Vì vậy, chúng ta hãy phá vỡ này thành các bước. 14 00:00:45,650 --> 00:00:50,390 Trước tiên, bạn muốn mở tập tin - đầu mối mà bạn đã được đưa ra. 15 00:00:50,390 --> 00:00:53,880 Và sau đó cũng tạo ra một tập tin bitmap phán quyết. 16 00:00:53,880 --> 00:00:58,240 Sau đó, bạn muốn cập nhật các bitmap tiêu đề thông tin cho các outfile phán quyết. 17 00:00:58,240 --> 00:00:59,920 Thêm về điều này sau. 18 00:00:59,920 --> 00:01:04,319 Và sau đó bạn sẽ đọc vào đầu mối, scanline, từng pixel, 19 00:01:04,319 --> 00:01:07,320 thay đổi màu sắc điểm ảnh như cần thiết, và viết 20 00:01:07,320 --> 00:01:08,960 những thành phán quyết - 21 00:01:08,960 --> 00:01:12,000 pixel vào phán quyết scanline. 22 00:01:12,000 --> 00:01:13,780 >> Làm thế nào để chúng tôi bắt đầu đi về điều này? 23 00:01:13,780 --> 00:01:16,940 Vâng, may mắn, chúng tôi có copy.c trong mã phân phối. 24 00:01:16,940 --> 00:01:21,240 Và điều này sẽ chứng minh khá hữu ích cho chúng tôi. 25 00:01:21,240 --> 00:01:29,700 Copy.c mở một tập tin, đọc trong đó tiêu đề infile, và sau đó cập nhật 26 00:01:29,700 --> 00:01:31,070 tiêu đề của outfile. 27 00:01:31,070 --> 00:01:37,010 Và sau đó nó đọc từng điểm ảnh trong scanline, từng pixel, và sau đó 28 00:01:37,010 --> 00:01:42,390 viết pixel vào outfile. 29 00:01:42,390 --> 00:01:45,020 >> Vì vậy, bước đầu tiên của bạn có thể để chạy sau 30 00:01:45,020 --> 00:01:46,420 lệnh trong thiết bị đầu cuối - 31 00:01:46,420 --> 00:01:50,270 cp copy.c whodunit.c. 32 00:01:50,270 --> 00:01:55,320 Điều này sẽ tạo ra một bản sao của copy.c tên whodunit.c. 33 00:01:55,320 --> 00:01:58,320 Vì vậy, bước đầu tiên của chúng tôi để mở tập tin, tốt, có một chính xác 34 00:01:58,320 --> 00:02:00,070 bản sao về điều đó trong copy.c. 35 00:02:00,070 --> 00:02:03,360 Vì vậy tôi sẽ để lại cho bạn để nhìn vào đó. 36 00:02:03,360 --> 00:02:07,860 >> Những gì chúng tôi đang làm việc với trong PSET này tập tin I / O, về cơ bản dùng các tập tin, 37 00:02:07,860 --> 00:02:10,229 đọc, viết, chỉnh sửa chúng. 38 00:02:10,229 --> 00:02:12,650 Làm thế nào để lần đầu tiên bạn mở một tập tin? 39 00:02:12,650 --> 00:02:16,800 Vâng, bạn sẽ khai báo một tập tin con trỏ, và sau đó bạn gọi 40 00:02:16,800 --> 00:02:18,670 chức năng fopen. 41 00:02:18,670 --> 00:02:23,150 Vượt qua trong đường dẫn, hoặc tên của tập tin, và sau đó là chế độ mà bạn muốn 42 00:02:23,150 --> 00:02:24,700 để mở tập tin đó in 43 00:02:24,700 --> 00:02:28,620 Đi qua trong một r sẽ mở foo.bmp để đọc. 44 00:02:28,620 --> 00:02:35,670 Trong khi fopen với đi qua trong một w sẽ mở bar.bmp, để viết các tập tin và 45 00:02:35,670 --> 00:02:37,020 thực sự chỉnh sửa nó. 46 00:02:37,020 --> 00:02:41,970 >> Vì vậy, bây giờ mà chúng tôi đã mở các tập tin, chúng tôi Bước tiếp theo là để cập nhật các thông tin tiêu đề 47 00:02:41,970 --> 00:02:43,230 cho outfile. 48 00:02:43,230 --> 00:02:44,610 Một thông tin tiêu đề là gì? 49 00:02:44,610 --> 00:02:48,160 Vâng, đầu tiên chúng ta cần biết những gì một bitmap là. 50 00:02:48,160 --> 00:02:51,000 Một ảnh bitmap chỉ là một đơn giản sắp xếp các byte. 51 00:02:51,000 --> 00:02:55,480 Và chúng được khai báo trong tập tin này ở đây, bmp.h, với một loạt các 52 00:02:55,480 --> 00:02:58,610 thông tin về những gì một bitmap thực sự làm ra. 53 00:02:58,610 --> 00:03:05,730 Nhưng những gì chúng ta thực sự quan tâm là phần đầu tập tin bitmap, ngay tại đây, và 54 00:03:05,730 --> 00:03:08,460 các thông tin tiêu đề bitmap, trên đây. 55 00:03:08,460 --> 00:03:13,170 Tiêu đề bao gồm một vài biến mà sẽ chứng minh rất hữu ích. 56 00:03:13,170 --> 00:03:18,400 Có biSizeImage, đó là tổng kích thước của hình ảnh trong byte. 57 00:03:18,400 --> 00:03:20,890 Và điều này bao gồm các điểm ảnh và padding. 58 00:03:20,890 --> 00:03:24,210 Đệm là rất quan trọng, nhưng chúng tôi sẽ nhận được điều này sau. 59 00:03:24,210 --> 00:03:30,000 >> BiWidth đại diện cho chiều rộng của hình ảnh theo pixel trừ đi padding. 60 00:03:30,000 --> 00:03:34,220 BiHeight là sau đó cũng là chiều cao của hình ảnh theo pixel. 61 00:03:34,220 --> 00:03:38,240 Và sau đó là BITMAPFILEHEADER và BITMAPINFOHEADER, như tôi đã đề cập 62 00:03:38,240 --> 00:03:40,900 trước đó, những người được đại diện như cấu trúc. 63 00:03:40,900 --> 00:03:45,410 Vì vậy, bạn không thể truy cập các tập tin tiêu đề chính nó, nhưng bạn sẽ muốn có được để 64 00:03:45,410 --> 00:03:47,370 các biến bên trong. 65 00:03:47,370 --> 00:03:48,170 >> OK. 66 00:03:48,170 --> 00:03:50,600 Vì vậy, làm thế nào để chúng tôi cập nhật các thông tin tiêu đề? 67 00:03:50,600 --> 00:03:54,020 Vâng, đầu tiên chúng ta phải xem liệu chúng tôi cần phải thay đổi bất kỳ thông tin từ 68 00:03:54,020 --> 00:03:58,480 các infile, các đầu mối, đến outfile, phán quyết. 69 00:03:58,480 --> 00:04:00,250 Được bất cứ điều gì thay đổi trong trường hợp này? 70 00:04:00,250 --> 00:04:04,320 Vâng, không thực sự, bởi vì chúng ta sẽ được chỉ cần thay đổi màu sắc. 71 00:04:04,320 --> 00:04:07,550 Chúng tôi sẽ không được thay đổi các tập tin kích thước, kích thước hình ảnh, chiều rộng, 72 00:04:07,550 --> 00:04:08,310 hoặc chiều cao. 73 00:04:08,310 --> 00:04:14,010 Vì vậy, bạn không sao bây giờ bằng chỉ cần sao chép mỗi điểm ảnh. 74 00:04:14,010 --> 00:04:14,840 >> OK. 75 00:04:14,840 --> 00:04:20,720 Vì vậy, bây giờ chúng ta hãy xem làm thế nào chúng ta thực sự có thể đọc tất cả các điểm ảnh từ tập tin. 76 00:04:20,720 --> 00:04:23,640 Một tập tin tôi O chức năng / sẽ đi vào chơi - 77 00:04:23,640 --> 00:04:24,700 fread. 78 00:04:24,700 --> 00:04:28,440 Nó có trong một con trỏ đến cấu trúc sẽ chứa các byte 79 00:04:28,440 --> 00:04:30,110 bạn đang đọc. 80 00:04:30,110 --> 00:04:31,890 Vì vậy, bạn đang đọc vào đó. 81 00:04:31,890 --> 00:04:36,090 Và sau đó bạn vượt qua trong một kích thước, đó là kích thước của từng yếu tố mà bạn 82 00:04:36,090 --> 00:04:37,360 muốn đọc. 83 00:04:37,360 --> 00:04:40,640 Ở đây, hàm sizeof sẽ có ích. 84 00:04:40,640 --> 00:04:45,570 Sau đó, bạn vượt qua về số lượng, mà đại diện cho số phần tử của 85 00:04:45,570 --> 00:04:47,480 kích thước để đọc. 86 00:04:47,480 --> 00:04:51,180 Và cuối cùng, inptr, đó là con trỏ tập tin mà bạn 87 00:04:51,180 --> 00:04:52,530 sẽ đọc từ. 88 00:04:52,530 --> 00:04:58,650 Vì vậy, tất cả những yếu tố này là bên trong inptr và họ sẽ dữ liệu. 89 00:04:58,650 --> 00:05:01,660 >> Hãy xem xét một ví dụ nhỏ. 90 00:05:01,660 --> 00:05:07,590 Nếu tôi muốn đọc dữ liệu vào hai con chó, tốt, tôi có thể làm điều đó một trong hai cách. 91 00:05:07,590 --> 00:05:15,250 Tôi hoặc là có thể đọc trong hai đối tượng có kích thước con chó từ inptr của tôi, hoặc tôi có thể đọc 92 00:05:15,250 --> 00:05:19,280 trong một đối tượng kích thước của hai con chó. 93 00:05:19,280 --> 00:05:23,580 Vì vậy, bạn thấy rằng tùy thuộc vào cách mà bạn sắp xếp kích thước và số, bạn 94 00:05:23,580 --> 00:05:25,840 có thể đọc trong cùng số byte. 95 00:05:25,840 --> 00:05:28,720 96 00:05:28,720 --> 00:05:33,020 >> Vì vậy, bây giờ, chúng ta hãy thay đổi màu của điểm ảnh như chúng ta cần. 97 00:05:33,020 --> 00:05:37,320 Nếu bạn nhìn vào bmp.h một lần nữa, sau đó bạn sẽ thấy rằng ở phía dưới 98 00:05:37,320 --> 00:05:42,920 RGBTRIPLEs là cấu trúc khác, nơi họ bao gồm ba byte. 99 00:05:42,920 --> 00:05:49,220 Một, rgbtBlue, rgbtGreen, và rgbtRed. 100 00:05:49,220 --> 00:05:52,480 Vì vậy, mỗi đại diện cho số tiền màu xanh, số lượng màu xanh lá cây, và 101 00:05:52,480 --> 00:05:57,250 số lượng điểm ảnh màu đỏ bên trong này, nơi mỗi số được đại diện bởi một 102 00:05:57,250 --> 00:05:58,670 số thập lục phân. 103 00:05:58,670 --> 00:06:04,370 >> Vì vậy, ff0000 sẽ là một màu xanh, vì nó đi từ màu xanh, 104 00:06:04,370 --> 00:06:05,850 màu xanh lá cây, màu đỏ. 105 00:06:05,850 --> 00:06:09,300 Và sau đó tất cả các e sẽ có màu trắng. 106 00:06:09,300 --> 00:06:13,440 Chúng ta hãy nhìn vào smiley.bmp, mà bạn có trong mã phân phối của bạn. 107 00:06:13,440 --> 00:06:15,690 Nếu bạn mở nó chỉ trong một hình ảnh người xem, sau đó bạn sẽ 108 00:06:15,690 --> 00:06:17,080 chỉ nhìn thấy một mặt cười màu đỏ. 109 00:06:17,080 --> 00:06:20,380 Nhưng việc lặn sâu hơn trong, chúng tôi sẽ thấy rằng cấu trúc 110 00:06:20,380 --> 00:06:22,340 của nó chỉ là pixel. 111 00:06:22,340 --> 00:06:25,880 Chúng tôi có điểm ảnh màu trắng, và sau đó các điểm ảnh màu đỏ. 112 00:06:25,880 --> 00:06:31,000 Màu trắng, ffffff, và sau đó tất cả các pixel màu đỏ tôi đã có màu cho bạn 113 00:06:31,000 --> 00:06:35,440 ở đây, bạn sẽ thấy rằng họ đang 0000FF. 114 00:06:35,440 --> 00:06:39,760 Không xanh, không xanh, và đầy đủ màu đỏ. 115 00:06:39,760 --> 00:06:45,350 Và kể từ khi cười là tám điểm ảnh, chúng tôi không có bất kỳ padding. 116 00:06:45,350 --> 00:06:47,360 Được rồi. 117 00:06:47,360 --> 00:06:53,310 >> Vì vậy, nếu tôi được là để gán các giá trị khác nhau một RGBTRIPLE và tôi muốn 118 00:06:53,310 --> 00:06:58,350 làm cho nó màu xanh lá cây, sau đó những gì tôi sẽ làm là Tôi sẽ khai báo một RGBTRIPLE, được đặt tên 119 00:06:58,350 --> 00:07:02,660 ba, và sau đó truy cập vào tất cả các byte trong đó cấu trúc tôi 120 00:07:02,660 --> 00:07:04,030 sẽ sử dụng các dấu chấm. 121 00:07:04,030 --> 00:07:08,430 Vì vậy, triple.rgbtBlue, tôi có thể gán là 0. 122 00:07:08,430 --> 00:07:13,460 Màu xanh lá cây tôi có thể gán nó cho đầy đủ - bất kỳ số lượng, thực sự, giữa 0 và ff. 123 00:07:13,460 --> 00:07:15,470 Và sau đó màu đỏ, tôi cũng sẽ nói 0. 124 00:07:15,470 --> 00:07:19,160 Vì vậy, sau đó cung cấp cho tôi một điểm ảnh màu xanh lá cây. 125 00:07:19,160 --> 00:07:23,030 >> Tiếp theo, những gì nếu tôi muốn kiểm tra giá trị của một cái gì đó? 126 00:07:23,030 --> 00:07:27,250 Tôi có thể có một cái gì đó để kiểm tra dù rgbtBlue giá trị của ba là 127 00:07:27,250 --> 00:07:31,080 ff và sau đó in, "Tôi cảm thấy màu xanh! ", như một kết quả. 128 00:07:31,080 --> 00:07:35,640 Bây giờ, điều đó không nhất thiết có nghĩa rằng các điểm ảnh màu xanh, phải không? 129 00:07:35,640 --> 00:07:40,060 Bởi vì giá trị màu xanh lá cây và màu đỏ của điểm ảnh cũng có thể có giá trị không 0. 130 00:07:40,060 --> 00:07:43,470 Tất cả những điều này có nghĩa, và tất cả những gì điều này được kiểm tra là 131 00:07:43,470 --> 00:07:45,610 cho một màu xanh đầy đủ. 132 00:07:45,610 --> 00:07:50,050 Nhưng tất cả các điểm ảnh cũng có thể có một phần giá trị màu, như thế này 133 00:07:50,050 --> 00:07:52,180 Ví dụ tiếp theo đây. 134 00:07:52,180 --> 00:07:55,400 >> Đó là một chút khó khăn hơn để xem những gì hình ảnh này bây giờ. 135 00:07:55,400 --> 00:08:00,320 Điều này có vẻ hơn một chút như clue.bmp rằng bạn sẽ được đưa ra. 136 00:08:00,320 --> 00:08:03,600 Bây giờ, về thể chất, bạn có thể giải quyết điều này, bởi vì có rất nhiều màu đỏ, bởi 137 00:08:03,600 --> 00:08:07,040 nắm giữ lên một màn hình màu đỏ to hình ảnh rằng các màu sắc khác có thể xuất hiện. 138 00:08:07,040 --> 00:08:10,968 Vì vậy, làm thế nào để chúng ta bắt chước này với c? 139 00:08:10,968 --> 00:08:15,640 Vâng, chúng ta có thể loại bỏ tất cả màu đỏ từ hình ảnh hoàn toàn. 140 00:08:15,640 --> 00:08:21,870 Và do đó, để làm được điều đó, chúng tôi muốn thiết lập mỗi giá trị điểm ảnh màu đỏ là 0. 141 00:08:21,870 --> 00:08:25,020 Và do đó hình ảnh sẽ xem xét một chút bit như thế này, nơi mà chúng tôi không có màu đỏ 142 00:08:25,020 --> 00:08:26,300 nào. 143 00:08:26,300 --> 00:08:29,390 >> Chúng ta có thể nhìn thấy thông báo ẩn một chút rõ ràng hơn bây giờ. 144 00:08:29,390 --> 00:08:31,730 Đó là một khuôn mặt cười. 145 00:08:31,730 --> 00:08:33,870 Hoặc có lẽ chúng ta có thể sử dụng phương pháp khác. 146 00:08:33,870 --> 00:08:36,480 Có lẽ, chúng ta có thể xác định tất cả các điểm ảnh màu đỏ - 147 00:08:36,480 --> 00:08:41,100 có nghĩa là, tất cả các điểm ảnh với 0 màu xanh, màu xanh lá cây 0, 0 và đỏ - 148 00:08:41,100 --> 00:08:43,169 và thay đổi những thành màu trắng. 149 00:08:43,169 --> 00:08:45,470 Và hình ảnh của chúng tôi có thể trông một cái gì đó như thế này. 150 00:08:45,470 --> 00:08:48,250 Một chút dễ dàng hơn để xem. 151 00:08:48,250 --> 00:08:51,170 >> Có rất nhiều cách khác để khám phá các thông điệp bí mật là tốt, 152 00:08:51,170 --> 00:08:53,730 đối phó với các thao tác màu sắc. 153 00:08:53,730 --> 00:08:57,050 Có lẽ bạn có thể sử dụng một trong những phương pháp mà tôi đã đề cập ở trên. 154 00:08:57,050 --> 00:08:59,600 Và ngoài ra, bạn có thể muốn để nâng cao một số màu sắc 155 00:08:59,600 --> 00:09:02,620 và mang lại cho những người ra. 156 00:09:02,620 --> 00:09:06,190 >> Vì vậy, bây giờ mà chúng tôi đã thay đổi các điểm ảnh màu sắc, tiếp theo chúng ta chỉ cần viết chúng 157 00:09:06,190 --> 00:09:08,500 vào các scanline, từng pixel. 158 00:09:08,500 --> 00:09:11,860 Và một lần nữa, bạn sẽ muốn nhìn lại để copy.c, nếu bạn không sao chép 159 00:09:11,860 --> 00:09:18,170 nó đã có, và nhìn vào fwrite chức năng, trong đó có dữ liệu, một con trỏ 160 00:09:18,170 --> 00:09:23,230 để các cấu trúc có chứa các byte mà bạn đang đọc từ, kích thước của 161 00:09:23,230 --> 00:09:26,610 các mặt hàng, số lượng mặt hàng, và sau đó là outptr - 162 00:09:26,610 --> 00:09:29,450 điểm đến của các tập tin. 163 00:09:29,450 --> 00:09:34,010 >> Sau khi bạn viết trong các điểm ảnh, bạn sẽ cũng phải viết trong đệm. 164 00:09:34,010 --> 00:09:34,970 Đệm là gì? 165 00:09:34,970 --> 00:09:38,670 Vâng, mỗi điểm ảnh rgbt dài ba byte. 166 00:09:38,670 --> 00:09:43,670 Tuy nhiên, scanline cho một hình ảnh bitmap có phải là một bội số của bốn byte. 167 00:09:43,670 --> 00:09:47,650 Và nếu số lượng điểm ảnh không phải là một bội số của bốn, sau đó chúng ta cần thêm 168 00:09:47,650 --> 00:09:48,880 bổ sung này. 169 00:09:48,880 --> 00:09:51,420 Đệm chỉ được đại diện bởi số 0. 170 00:09:51,420 --> 00:09:54,380 Vì vậy, làm thế nào để chúng tôi viết, hoặc đọc này? 171 00:09:54,380 --> 00:09:59,280 Vâng, nó chỉ ra rằng bạn có thể không đệm thực sự fread, nhưng bạn có thể 172 00:09:59,280 --> 00:10:00,970 tính toán nó. 173 00:10:00,970 --> 00:10:04,400 >> Trong trường hợp này, các đầu mối và bản án có cùng một chiều rộng, do đó, 174 00:10:04,400 --> 00:10:05,910 đệm là như nhau. 175 00:10:05,910 --> 00:10:09,370 Và đệm, như bạn sẽ thấy trong copy.c, được tính 176 00:10:09,370 --> 00:10:11,790 với công thức dưới đây - 177 00:10:11,790 --> 00:10:16,690 bi.biWidth lần sizeof (RGBTRIPLE) sẽ cho chúng ta bao nhiêu byte bmp 178 00:10:16,690 --> 00:10:18,280 có trong mỗi hàng. 179 00:10:18,280 --> 00:10:21,890 Từ đó, modulos và bớt với 4 có thể tính toán như thế nào 180 00:10:21,890 --> 00:10:25,610 nhiều byte phải được bổ sung để bội số của byte trên 181 00:10:25,610 --> 00:10:27,250 mỗi hàng là bốn. 182 00:10:27,250 --> 00:10:30,490 >> Bây giờ chúng ta có công thức bao nhiêu đệm chúng ta cần, bây giờ 183 00:10:30,490 --> 00:10:31,610 chúng ta có thể viết nó. 184 00:10:31,610 --> 00:10:34,080 Bây giờ, tôi đã đề cập trước đây, đệm chỉ là số 0. 185 00:10:34,080 --> 00:10:39,730 Vì vậy, trong trường hợp đó, chúng ta chỉ cần đặt một char, trong trường hợp này là 0, chúng tôi 186 00:10:39,730 --> 00:10:41,710 outptr - outfile của chúng tôi. 187 00:10:41,710 --> 00:10:47,530 Vì vậy, đó chỉ có thể được fputc 0, dấu phẩy outptr. 188 00:10:47,530 --> 00:10:52,400 >> Vì vậy, trong khi chúng tôi đã được đọc vào chúng tôi tập tin, tập tin I / O đã lưu giữ theo dõi của chúng tôi 189 00:10:52,400 --> 00:10:57,440 vị trí trong các tập tin với một cái gì đó được gọi là chỉ báo vị trí tập tin. 190 00:10:57,440 --> 00:10:59,350 Nghĩ về nó như một con trỏ. 191 00:10:59,350 --> 00:11:03,550 Về cơ bản, nó tiến bộ mỗi khi mà chúng ta fread, nhưng chúng tôi có 192 00:11:03,550 --> 00:11:05,671 kiểm soát nó, quá. 193 00:11:05,671 --> 00:11:11,030 >> Để di chuyển các tập tin chỉ báo vị trí, bạn có thể sử dụng chức năng fseek. 194 00:11:11,030 --> 00:11:15,600 Nơi inptr đại diện cho các tập tin con trỏ mà bạn đang tìm kiếm trong, các 195 00:11:15,600 --> 00:11:20,370 số tiền là số byte mà bạn muốn di chuyển con trỏ, và sau đó từ 196 00:11:20,370 --> 00:11:23,470 liên quan đến các điểm tham chiếu từ nơi con trỏ chuột của bạn. 197 00:11:23,470 --> 00:11:26,770 Nếu bạn vượt qua trong SEEK_CUR, mà đại diện cho hiện tại 198 00:11:26,770 --> 00:11:28,100 vị trí trong tập tin. 199 00:11:28,100 --> 00:11:31,020 Hoặc bạn có thể sử dụng một số thông số khác. 200 00:11:31,020 --> 00:11:35,400 Vì vậy, chúng ta có thể muốn sử dụng fseek để bỏ qua trên miếng đệm của các tập tin trong. 201 00:11:35,400 --> 00:11:39,410 Và một lần nữa, nếu bạn đang bị mắc kẹt, có một ví dụ về điều đó trong copy.c. 202 00:11:39,410 --> 00:11:43,260 >> Vì vậy, bây giờ chúng tôi đã mở các tập tin, đầu mối, và phán quyết. 203 00:11:43,260 --> 00:11:46,450 Chúng tôi đã cập nhật các thông tin tiêu đề cho bản án của chúng tôi, bởi vì mỗi 204 00:11:46,450 --> 00:11:48,730 bitmap cần một tiêu đề. 205 00:11:48,730 --> 00:11:52,280 Sau đó chúng tôi đã đọc vào đầu mối của scanline, từng pixel, thay đổi 206 00:11:52,280 --> 00:11:55,210 mỗi màu khi cần thiết, và viết những vào 207 00:11:55,210 --> 00:11:57,340 bản án, từng pixel. 208 00:11:57,340 --> 00:12:01,550 Một khi bạn mở bản án, bạn có thể xem ai thủ phạm, hoặc những gì bí mật 209 00:12:01,550 --> 00:12:02,850 thông điệp. 210 00:12:02,850 --> 00:12:05,550 Tên tôi là Zamyla, và này là whodunit. 211 00:12:05,550 --> 00:12:12,864