微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

垂直梯度公式

如何解决垂直梯度公式

我想编写一个生成 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 举报,一经查实,本站将立刻删除。