作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有关联强度(作为 0 和 1 之间的 float )的像素数组,我想将其转换为 RGB 图像。
最简单的方法是将每个值乘以 255 并将其分配给 R+G+B 以获得灰度图像,但我认为最好使用整个颜色范围来显示更细微的差异。
据我所知,这称为伪/假彩色图像,但我很难找到它的算法。现在我正在使用这段代码,但我想知道是否有更聪明/更快的方法来做到这一点:
if(intensity <= 0.25) {
p->r = 0;
p->g = 0;
p->b = (intensity) * 4 * 255;
return;
}
if(intensity <= 0.5) {
p->r = 0;
p->g = (intensity - 0.25) * 4 * 255;
p->b = 255;
return;
}
if(intensity <= 0.75) {
p->r = 0;
p->g = 255;
p->b = (0.75 - intensity) * 4 * 255;
return;
}
if(intensity <= 1.0) {
p->r = (intensity - 0.75) * 4 * 255;
p->g = (1.0 - intensity) * 4 * 255;
p->b = 0;
return;
}
此外,我应该为此使用任何标准调色板吗?
最佳答案
您可以改用HSV 或HSL。
尝试使用 0 到 1 的值来设置色调,并使用饱和度和值的常量。您会发现大量用于将 HSV 值转换为 RGB 值的示例代码。
http://en.wikipedia.org/wiki/HSL_and_HSV
当您看到“人造颜色”图像时,通常使用的就是这种颜色。好处是图像的所有区域都是明亮的,图像的“暗”部分只是呈现出不同的颜色。
如果您使用 HSL,您还可以将大部分 0-1 范围的亮度设置为 50%,但允许它在接近尾声时上升(例如从 0.9 到 1),这将有助于带来非常强烈的效果图像的某些部分变为白色。
另一种选择是使用伪调色板。在这里,您只需创建一个 8 位图像,并为其创建一个适合您需要的调色板。这些有一些很好的例子 here...
关于c++ - 如何在 C++ 中创建伪彩色图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863985/
我是一名优秀的程序员,十分优秀!