hsv中颜色之间的怪异插值?

A--

我想实现红色和蓝色之间的插值。像这样的东西

img

但在一行中。

我的Java代码:

private PixelData InterpolateColour(float totalLength, float curLength){
    float startColourV[] = new float[3];
    Color.RGBtoHSB(m_start.getColour().getR() & 0xFF, m_start.getColour().getG()  & 0xFF, m_start.getColour().getB()  & 0xFF, startColourV);

    float endColourV[] = new float[3];
    Color.RGBtoHSB(m_end.getColour().getR()  & 0xFF, m_end.getColour().getG()  & 0xFF, m_end.getColour().getB()  & 0xFF, endColourV);

    float endPercent = curLength / totalLength;
    float startPercent = 1 - curLength / totalLength;

    float h = endColourV[0] * endPercent + startColourV[0] * startPercent;  
    float s = endColourV[1] * endPercent + startColourV[1] * startPercent;
    float b = endColourV[2] * endPercent + startColourV[2] * startPercent;

    int colourRGB = Color.HSBtoRGB(h, s, b);

    byte[] ByteArray = ByteBuffer.allocate(4).putInt(colourRGB).array();


    return new PixelData(ByteArray[0], ByteArray[3], ByteArray[2], ByteArray[1]); 
}

而我得到的结果是

img

我不明白,所有绿色都是从哪里来的。有人能帮帮我吗 ?

光谱

为什么不使用带有简单线性插值的RGB做到这一点:

color(t)=(color0*t)+(color1*(1.0-t))

t=<0.0,1.0>参数在哪里因此,只需按照需要的步骤在整个范围内循环播放即可。

整数C ++ / VCL示例(抱歉,不是JAVA编码器):

// borland GDI clear screen
Canvas->Brush->Color=clBlack;
Canvas->FillRect(ClientRect);
// easy access to RGB channels
union _color
    {
    DWORD dd;
    BYTE db[4];
    } c0,c1,c;
//    0x00BBGGRR
c0.dd=0x000000FF; // Red
c1.dd=0x00FF0000; // Blue
int x,y,t0,t1;
for (x=0,y=ClientHeight/2;x<ClientWidth;x++)
    {
    t0=x;
    t1=ClientWidth-1-x;
    c.db[0]=((DWORD(c0.db[0])*t0)+(DWORD(c1.db[0])*t1))/(ClientWidth-1);
    c.db[1]=((DWORD(c0.db[1])*t0)+(DWORD(c1.db[1])*t1))/(ClientWidth-1);
    c.db[2]=((DWORD(c0.db[2])*t0)+(DWORD(c1.db[2])*t1))/(ClientWidth-1);
    c.db[3]=((DWORD(c0.db[3])*t0)+(DWORD(c1.db[3])*t1))/(ClientWidth-1);
    Canvas->Pixels[x][y]=c.dd;
    }

ClientWidth,ClientHeight我的应用程序表单分辨率在哪里Canvas是对表单GDI界面的Canvas->Pixels[x][y]访问是单像素访问(速度慢,但在此示例中就足够了)。唯一重要的东西是for循环。这里得到的图像:

img

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在弧度之间进行插值的最快方法?

来自分类Dev

图像中像素颜色的插值,MATLAB

来自分类Dev

opencv中HSV和HSV_FULL之间的区别?

来自分类Dev

Fragment Shader GLSL中的颜色插值?

来自分类Dev

在数组点之间插值

来自分类Dev

在Numpy数组的行或列之间插值

来自分类Dev

Python中的对数插值

来自分类Dev

R中的插值/查找

来自分类Dev

画线时在openGL中关闭颜色插值

来自分类Dev

计算HSV空间中颜色之间的距离

来自分类Dev

如何通过每种颜色的分数贡献在n种颜色之间进行插值?

来自分类Dev

Swift中String插值和String初始化器之间的区别

来自分类Dev

r中列之间的线性插值

来自分类Dev

值之间的线性插值

来自分类Dev

WebGL:在新旧价值之间进行插值

来自分类Dev

如何在r中的多个列之间线性插值?

来自分类Dev

在TensorFlow中插值权重

来自分类Dev

根据百分比值在两种颜色之间进行插值

来自分类Dev

链接中的插值

来自分类Dev

在弧度之间进行插值的最快方法?

来自分类Dev

字体真棒怪异的颜色在背景中

来自分类Dev

一个向量在两个向量之间的插值线中的交点?反向线性插值?

来自分类Dev

如何在GLSL ES 2.0中的许多颜色属性之间有效地插值

来自分类Dev

如何在Gouraud着色器脚本中插值颜色值?

来自分类Dev

如何从C ++中的十六进制颜色值获取OpenCV HSV值?

来自分类Dev

在 Python 中的列表的每个数字之间查找 1000 个线性插值

来自分类Dev

Freemarker 中的嵌套插值

来自分类Dev

通过 HSV 颜色计算圆圈中的点

来自分类Dev

angularjs 中的插值