Thử thách này là về việc chuyển dần màu sắc trong một hình ảnh để tạo ra những bức ảnh đẹp như thế này:
( bản gốc )
Thử thách
Viết chương trình hoặc hàm có hai số nguyên không âm và hình ảnh ở bất kỳ định dạng tệp hình ảnh phổ biến nào bạn chọn (bạn có thể đi theo đường dẫn đến hình ảnh hoặc dữ liệu hình ảnh thô).
Chúng ta sẽ gọi số nguyên đầu tiên là chu kỳ và số nguyên thứ hai là phần bù .
Chúng tôi cũng sẽ xác định bước dấu phẩy động là chu kỳ 360 lần chia cho diện tích hình ảnh, hoặc step = 360 * cycles / (image width * image height)
.
Đối với mỗi pixel P trong hình ảnh, di chuyển một hàng tại một thời điểm, từ trái sang phải, từ trên xuống dưới (nghĩa là theo thứ tự đọc nếu các pixel là chữ cái), hãy làm như sau:
Tăng màu sắc của P bằng độ bù (lặp lại từ 360 đến 0 nếu cần thiết).
Sau đó tăng bù theo từng bước .
Lưu, hiển thị hoặc xuất hình ảnh thô ở bất kỳ định dạng tệp hình ảnh phổ biến nào.
Thủ tục này từng bước làm tăng màu sắc của tất cả các điểm ảnh trong hình ảnh, làm cho chu kỳ vòng đầy đủ xung quanh cầu vồng màu sắc , bắt đầu bằng việc ban đầu bù sắc bởi bù đắp .
Khi chu kỳ là 1 và độ lệch là 0, như trong hình ảnh Starry Night ở trên, các hàng pixel trên cùng và dưới cùng thực tế không có sự thay đổi màu sắc nhưng ở giữa có một chu kỳ màu đầy đủ.
Chi tiết
Chu kỳ có thể là bất kỳ số nguyên không âm nào nhưng bạn có thể giả sử rằng giá trị bù là từ 0 đến 359.
Khi chu kỳ bằng 0, mọi pixel trong ảnh sẽ bị thay đổi màu sắc bằng cách bù chính xác do bước cũng phải bằng 0. (Trong trường hợp này nếu độ lệch bằng 0 thì hình ảnh hoàn toàn không thay đổi.)
Bạn có thể giả sử chu kỳ và bù là đầu vào dưới dạng float nếu muốn (nghĩa là
1.0
thay vì1
). (Tôi nhận ra rằng họ không cần phải là số nguyên, nó chỉ làm cho thử thách trở nên đơn giản hơn.)"Hue" dùng để chỉ phiên bản không gian màu RGB, phổ biến trong các mô hình màu HSL / HSV .
Ví dụ
Nguyên:
Chu kỳ = 1, bù = 0:
Chu kỳ = 1, bù = 180:
Nguyên:
Chu kỳ = 2, bù = 60:
Nguyên:
(Cảm ơn ArtOfCode .)
Chu kỳ = 1, bù = 120:
Nguyên:
(Cảm ơn Doorknob .)
Chu kỳ = 1, bù = 0:
Chu kỳ = 4, bù = 0:
Chu kỳ = 200, bù = 0:
Chu kỳ = 30000, bù = 0:
(Những hình ảnh này có thể không phải là pixel hoàn hảo do imgur nén chúng.)
Chấm điểm
Mã ngắn nhất tính bằng byte thắng. Tiebreaker là câu trả lời bình chọn cao hơn.
Câu trả lời rằng đăng hình ảnh thử nghiệm mát mẻ của riêng họ sẽ nhận được nhiều điểm brownie từ tôi.