1 00:00:00,000 --> 00:00:12,240 >> [MUSIC CHƠI] 2 00:00:12,240 --> 00:00:15,870 >> ROB Bowden: Xin chào, tôi Rob, chúng ta hãy thử này về kích thước. 3 00:00:15,870 --> 00:00:21,100 Vì vậy, chúng tôi lại một lần nữa sẽ bắt đầu với cơ bản là một bản sao của copy.c, và 4 00:00:21,100 --> 00:00:22,860 thực hiện một vài thay đổi. 5 00:00:22,860 --> 00:00:26,280 Lưu ý ngay lập tức chúng ta thấy một sự thay đổi, trong đó thay vì kiểm tra xem 6 00:00:26,280 --> 00:00:30,440 argc không bằng 3, chúng tôi muốn kiểm tra nếu argc không bằng 4, kể từ 7 00:00:30,440 --> 00:00:34,350 bây giờ chúng ta không chỉ dùng trong một infile và outfile, nhưng chúng tôi cũng tham gia trong 8 00:00:34,350 --> 00:00:38,980 n, là số tiền mà chúng tôi nhân rộng các hình ảnh ban đầu của. 9 00:00:38,980 --> 00:00:44,340 Một khi chúng tôi chắc chắn về điều đó, chúng ta có thể chỉ chuyển đổi một số nguyên n để sử dụng atoi. 10 00:00:44,340 --> 00:00:48,760 >> Vì vậy, bây giờ chúng ta sẽ tạo ra một số bí danh, chỉ cần gọi argv 2 infile, và 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, bởi vì argv 2 và argv 3 không phải là tên rất hữu ích. 12 00:00:54,240 --> 00:00:58,510 Bây giờ chúng tôi muốn kiểm tra để chắc chắn rằng n là trong phạm vi chúng ta mong đợi, do đó, 13 00:00:58,510 --> 00:01:02,910 suy nghi xác định rằng nếu nó nhỏ hơn hoặc bằng không, hoặc lớn hơn 100, 14 00:01:02,910 --> 00:01:08,580 thì đó là một yếu tố thay đổi kích cỡ không hợp lệ, và chúng ta nên cảnh báo người dùng về điều đó. 15 00:01:08,580 --> 00:01:13,090 >> Một khi chúng ta vượt qua tất cả điều đó, chúng ta có thể cuối cùng mở infile của chúng tôi, và chúng tôi cần 16 00:01:13,090 --> 00:01:16,270 lỗi kiểm tra để đảm bảo rằng các mở đã không thất bại vì một lý do. 17 00:01:16,270 --> 00:01:19,860 Chúng ta cũng cần mở outfile của chúng tôi, và một lần nữa lỗi kiểm tra để đảm bảo rằng 18 00:01:19,860 --> 00:01:21,250 đã không thất bại vì một lý do. 19 00:01:21,250 --> 00:01:26,270 Nhưng chắc chắn nếu khai mạc outfile thất bại mà chúng ta cần phải đóng 20 00:01:26,270 --> 00:01:29,040 các infile, mà đã được mở ra. 21 00:01:29,040 --> 00:01:33,690 >> Vì vậy, giả định rằng đã không thất bại, sau đó we're - cũng giống như trong copy.c-- 22 00:01:33,690 --> 00:01:36,140 sẽ đọc trong tiêu đề từ infile. 23 00:01:36,140 --> 00:01:40,130 Chúng tôi sẽ đảm bảo rằng nó là một hợp lệ bitmap, nhưng bây giờ chúng ta sẽ làm một số 24 00:01:40,130 --> 00:01:41,620 mọi thứ một chút khác nhau. 25 00:01:41,620 --> 00:01:44,870 Vì vậy, đầu tiên, chúng ta sẽ muốn nhớ chiều rộng và chiều cao ban đầu 26 00:01:44,870 --> 00:01:48,290 của infile, bởi vì chúng ta sẽ được thay đổi nó cho outfile. 27 00:01:48,290 --> 00:01:53,890 Vì vậy, bây giờ nhớ rằng vì lý do kỳ lạ bi.biheight, là tiêu cực, và 28 00:01:53,890 --> 00:01:58,670 vì vậy chiều cao thực tế, tích cực, chúng tôi muốn lấy giá trị tuyệt đối. 29 00:01:58,670 --> 00:02:02,580 >> Bây giờ, các padding là có được cùng tính toán như trong copy.c, 30 00:02:02,580 --> 00:02:06,060 sử dụng rộng cũ, và bây giờ chúng tôi thực sự sẽ thay đổi 31 00:02:06,060 --> 00:02:07,320 những gì trong tiêu đề của chúng tôi. 32 00:02:07,320 --> 00:02:11,200 Vì vậy, chúng ta sẽ nhân rộng của chúng tôi bằng n, vì chúng tôi mở rộng quy mô chiều rộng bằng 33 00:02:11,200 --> 00:02:15,100 n, nhân chiều cao của n, vì chúng tôi mở rộng quy mô của n, và bây giờ chúng tôi có 34 00:02:15,100 --> 00:02:19,250 tính toán cho một đệm mới dựa vào chiều rộng mới. 35 00:02:19,250 --> 00:02:21,840 >> Vì vậy, bây giờ chúng tôi cần phải thay đổi một số các lĩnh vực khác trong tiêu đề của chúng tôi. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage được coi là các kích thước của tất cả các byte trong các điểm ảnh 37 00:02:26,890 --> 00:02:28,520 và padding của hình ảnh. 38 00:02:28,520 --> 00:02:34,190 Và vì vậy kích thước của một hàng duy nhất của chúng tôi hình ảnh là kích thước của RGB ba, kích thước 39 00:02:34,190 --> 00:02:39,430 của một điểm ảnh đơn lẻ, lần số lượng pixel liên tiếp, cộng với đệm tại 40 00:02:39,430 --> 00:02:40,910 cuối hàng. 41 00:02:40,910 --> 00:02:45,200 Và sau đó chúng ta sẽ nhân rằng bằng giá trị tuyệt đối của chiều cao của chúng tôi để có được 42 00:02:45,200 --> 00:02:48,350 tổng số byte trong các dữ liệu hình ảnh. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize chỉ là tổng số của byte dữ liệu hình ảnh của chúng tôi, vì vậy 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, cộng với kích thước của tiêu đề của chúng tôi. 45 00:02:56,530 --> 00:02:59,850 Vì vậy, thêm vào kích thước của tập tin bitmap tiêu đề, và kích thước của thông tin bitmap 46 00:02:59,850 --> 00:03:00,800 tiêu đề, OK. 47 00:03:00,800 --> 00:03:03,170 Vì vậy, đó là tất cả chúng ta cần phải thay đổi trong tiêu đề của chúng tôi. 48 00:03:03,170 --> 00:03:07,020 Bây giờ chúng ta sẽ viết phần đầu tập tin bitmap để outfile của chúng tôi, và thông tin bitmap của chúng tôi 49 00:03:07,020 --> 00:03:09,880 tiêu đề để outfile của chúng tôi, và bây giờ chúng tôi đã sẵn sàng để bắt đầu đi 50 00:03:09,880 --> 00:03:11,990 trên các điểm ảnh thực tế. 51 00:03:11,990 --> 00:03:15,720 >> Vì vậy, chúng tôi muốn lặp qua dòng quét của infile. 52 00:03:15,720 --> 00:03:17,730 Vì vậy, chúng tôi muốn lặp qua oldheight. 53 00:03:17,730 --> 00:03:20,830 Đây là lý do tại sao chúng tôi cần phải nhớ chiều cao ban đầu, trước khi chúng ta thay đổi nó 54 00:03:20,830 --> 00:03:23,040 và thu nhỏ nó bằng n. 55 00:03:23,040 --> 00:03:27,810 Bây giờ chúng ta sẽ đọc một đơn hàng của infile thành một 56 00:03:27,810 --> 00:03:30,630 đệm kích thước oldwidth. 57 00:03:30,630 --> 00:03:36,190 Vì vậy, ở đây, chúng ta đang freading kích thước của RGB ba, một điểm ảnh, và chiều rộng cũ của 58 00:03:36,190 --> 00:03:39,760 chúng từ infile vào bộ đệm của chúng tôi. 59 00:03:39,760 --> 00:03:43,480 Và đó sẽ là một toàn bộ hàng trong mảng này. 60 00:03:43,480 --> 00:03:50,390 Vì vậy, bây giờ, chúng tôi muốn lặp n lần in hàng này để outfile n thời đại chúng ta. 61 00:03:50,390 --> 00:03:52,510 Và đó là những gì vòng lặp này được làm. 62 00:03:52,510 --> 00:03:57,910 Vòng lặp bên trong này được duyệt qua hàng riêng của mình, trong mảng, in ấn 63 00:03:57,910 --> 00:04:00,710 mỗi điểm ảnh trong mảng n lần. 64 00:04:00,710 --> 00:04:04,510 Vì vậy, các yếu tố thứ không được in n lần, yếu tố đầu tiên đang được 65 00:04:04,510 --> 00:04:05,660 in n lần. 66 00:04:05,660 --> 00:04:10,820 Và đó là loại như thế nào chúng ta sẽ theo chiều ngang quy mô trong outfile, và 67 00:04:10,820 --> 00:04:13,390 vòng lặp này, vì chúng ta đang lặp n lần, là làm thế nào chúng ta sẽ 68 00:04:13,390 --> 00:04:15,580 quy mô theo chiều dọc. 69 00:04:15,580 --> 00:04:19,850 >> Ở đây, chúng ta thấy rằng chúng ta cần thêm padding vào cuối mỗi hàng. 70 00:04:19,850 --> 00:04:25,050 Đó là lý do tại sao đây là bên trong vòng lặp cho đó là in ra các hàng n chỉ 71 00:04:25,050 --> 00:04:28,400 một hàng này từ infile. 72 00:04:28,400 --> 00:04:32,150 Sau đó xuống đây, tôi sẽ bỏ qua padding trong infile, kể từ khi một lần 73 00:04:32,150 --> 00:04:34,560 chúng tôi đang thực hiện với một hàng của infile, chúng tôi không quan tâm 74 00:04:34,560 --> 00:04:35,290 những gì các padding là. 75 00:04:35,290 --> 00:04:37,110 Chúng tôi chỉ muốn nhận được đến hàng thứ hai. 76 00:04:37,110 --> 00:04:40,870 Và sau đó chúng tôi sẽ lặp lại và làm tất cả này một lần nữa cho hàng thứ hai. 77 00:04:40,870 --> 00:04:44,406 >> Cuối cùng, khi chúng tôi đang thực hiện với tất cả những gì, chúng ta có thể đóng infile, gần 78 00:04:44,406 --> 00:04:47,430 các outfile, và trở lại 0 bởi vì chúng tôi đang thực hiện. 79 00:04:47,430 --> 00:04:50,330 >> Tên tôi là Rob, và điều này đã được thay đổi kích cỡ. 80 00:04:50,330 --> 00:04:54,934 >> [MUSIC CHƠI]