【问题标题】:making a clickable color spectrum to store rgb values of those clicks制作可点击的色谱来存储这些点击的 rgb 值
【发布时间】:2025-12-04 23:10:01
【问题描述】:

我想制作看起来就像色谱一样的自定义 GUI 对象。 但是此色谱应该是交互式的,因此当用户单击该光谱的任何点时,代码会将色谱矩形的该点或坐标与单击的颜色的 rgb 值相关联 点。

光谱的范围应该是从零到最大可能的 rgb 值(教授说让它从零到 255^3,我认为这是不正确的,因为 3 可以是不同的颜色) 那么颜色的范围应该与矩形长边的像素数相关并缩放。 点击部分是由我之前使用过的鼠标监听器完成的,但我不知道如何让它对几次点击做出反应。

那么我怎样才能制作这个对象呢? 我也不想使用 JColorchooser 。

【问题讨论】:

  • 你可以看看this examplethis example,它们使用相同的技术来产生平滑的颜色渐变,但它可以做的是告诉你在任何给定距离的颜色是什么沿着渐变。仅仅因为这个人做了一些很棒的事情,这对你有帮助,看看this blog
  • @MadProgrammer 谢谢你的回答你能看看[链接](*.com/questions/28518343/…)这个问题吗?它与这个问题有某种关系
  • @MadProgrammer 对多击部分有什么建议吗?
  • 您忘记了两个维度,亮度(或亮度)和饱和度。您上面的图像不包含所有可能的 RBG 颜色,例如粉红色、浅蓝色、深青色、白色、黑色等。您正在寻找的东西称为“颜色选择器”,大多数 UI 框架都有一个内置的。没有必要去实现你自己的。
  • 嗯,链接的示例应该允许您在特定点获得颜色,这就是它的工作原理......

标签: java swing user-interface colors event-listener


【解决方案1】:

c - 是一个介于 0 和 1 之间的浮点数。

        if(c >= 0 && c <= (1/6.f)){
        red = 255;
        green = 1530 * c;
        blue = 0;
    } else if( c > (1/6.f) && c <= (1/3.f) ){
        red = 255 - (1530 * (c - 1/6f));
        green = 255;
        blue = 0;
    } else if( c > (1/3.f) && c <= (1/2.f)){
        red = 0;
        green = 255;
        blue = 1530 * (c - 1/3f);
    } else if(c > (1/2f) && c <= (2/3f)) {
        red = 0;
        green = 255 - ((c - 0.5f) * 1530);
        blue = 255;
    } else if( c > (2/3f) && c <= (5/6f) ){
        red = (c - (2/3f)) * 1530;
        green = 0;
        blue = 255;
    } else if(c > (5/6f) && c <= 1 ){
        red = 255;
        green = 0;
        blue = 255 - ((c - (5/6f)) * 1530);
    }

【讨论】:

  • 这个答案中常量1530的意义是什么?这意味着您最终会得到负 RGB 值,这没有多大意义
  • upload.wikimedia.org/wikipedia/commons/thumb/7/7c/… 1530 = 255 * 6 这是从 HSL 到 RGB 的颜色转换请告诉我 c 的值,结果我的算法返回负值。
  • 感谢您的解释。我以为我看到了负值的可能性,但似乎我读错了代码。