如何解决垂直梯度公式
我想编写一个生成 1000x1000
.ppm
文件的 C 程序,显示从黑色(左)到白色(右)的垂直渐变。现在,如果图片是 256x256
,那就很容易了:
P3
256 256
255
0 0 0 1 1 1 2 2 2 .... 255 255 255
0 0 0 1 1 1 2 2 2 .... 255 255 255
.
.
.
0 0 0 1 1 1 2 2 2 .... 255 255 255
事情是,因为它必须是 1000x1000(超过 255),我不确定我应该遵循什么公式来获得完美的渐变。有什么想法吗?
解决方法
您可以按所需的总宽度缩放像素的颜色索引,以生成 0 到 1 之间的小数,表示其在线条中的标准化位置。然后乘以 256 以将其缩放到颜色范围。这给出:
int color = (float)offset / width * 256;
可运行的概念证明:
const makeGradient = (gradEl,width=500,height=500) => {
let html = "";
for (let offset = 0; offset < width; offset++) {
const color = offset / width * 256; // JS does float division
html += `
<div style="
background-color: rgb(${color},${color},${color});
width: 1px; height: ${height}px;
"></div>
`;
}
gradEl.innerHTML = html;
};
const gradEl = document.querySelector("#gradient");
makeGradient(gradEl);
document.querySelector("input")
.addEventListener("keyup",e => {
makeGradient(gradEl,+e.target.value || null);
});
body {
background: blue;
}
#gradient {
display: flex;
}
<input value="500" type="number" min="0" max="2000">
<div id="gradient"></div>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。