>> [MUSIC CHƠI]
>> ROB Bowden: Xin chào, tôi Rob, chúng ta hãy thử này về kích thước.
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à
thực hiện một vài thay đổi.
Lưu ý ngay lập tức chúng ta thấy một sự thay đổi, trong đó thay vì kiểm tra xem
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ừ
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
n, là số tiền mà chúng tôi nhân rộng các hình ảnh ban đầu của.
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.
>> 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à
argv 3 outfile, bởi vì argv 2 và argv 3 không phải là tên rất hữu ích.
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 đó,
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,
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 đó.
>> 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
lỗi kiểm tra để đảm bảo rằng các mở đã không thất bại vì một lý do.
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
đã không thất bại vì một lý do.
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
các infile, mà đã được mở ra.
>> Vì vậy, giả định rằng đã không thất bại, sau đó we're - cũng giống như trong copy.c--
sẽ đọc trong tiêu đề từ infile.
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ố
mọi thứ một chút khác nhau.
Vì vậy, đầu tiên, chúng ta sẽ muốn nhớ chiều rộng và chiều cao ban đầu
của infile, bởi vì chúng ta sẽ được thay đổi nó cho outfile.
Vì vậy, bây giờ nhớ rằng vì lý do kỳ lạ bi.biheight, là tiêu cực, và
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.
>> Bây giờ, các padding là có được cùng tính toán như trong copy.c,
sử dụng rộng cũ, và bây giờ chúng tôi thực sự sẽ thay đổi
những gì trong tiêu đề của chúng tôi.
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
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ó
tính toán cho một đệm mới dựa vào chiều rộng mới.
>> 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.
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
và padding của hình ảnh.
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
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
cuối hàng.
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
tổng số byte trong các dữ liệu hình ảnh.
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
bi.biSizeImage, cộng với kích thước của tiêu đề của chúng tôi.
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
tiêu đề, OK.
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.
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
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
trên các điểm ảnh thực tế.
>> Vì vậy, chúng tôi muốn lặp qua dòng quét của infile.
Vì vậy, chúng tôi muốn lặp qua oldheight.
Đâ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ó
và thu nhỏ nó bằng n.
Bây giờ chúng ta sẽ đọc một đơn hàng của infile thành một
đệm kích thước oldwidth.
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
chúng từ infile vào bộ đệm của chúng tôi.
Và đó sẽ là một toàn bộ hàng trong mảng này.
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.
Và đó là những gì vòng lặp này được làm.
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
mỗi điểm ảnh trong mảng n lần.
Vì vậy, các yếu tố thứ không được in n lần, yếu tố đầu tiên đang được
in n lần.
Và đó là loại như thế nào chúng ta sẽ theo chiều ngang quy mô trong outfile, và
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ẽ
quy mô theo chiều dọc.
>> Ở đây, chúng ta thấy rằng chúng ta cần thêm padding vào cuối mỗi hàng.
Đó 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ỉ
một hàng này từ infile.
Sau đó xuống đây, tôi sẽ bỏ qua padding trong infile, kể từ khi một lần
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
những gì các padding là.
Chúng tôi chỉ muốn nhận được đến hàng thứ hai.
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.
>> 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
các outfile, và trở lại 0 bởi vì chúng tôi đang thực hiện.
>> Tên tôi là Rob, và điều này đã được thay đổi kích cỡ.
>> [MUSIC CHƠI]