Java 如何线性缩放像素颜色?

Java 如何线性缩放像素颜色?,java,colors,Java,Colors,所以我有一个我正在处理的类的项目,在这个项目中,你必须创建一个充满圆圈的GUI框,除了屏幕中间的50%不能充满圆圈。此外,每个圆的红色值从屏幕的顶部到底部呈线性缩放,顶部为0,底部为255。下面是它的外观: 这是我的。我试着用255/500(500是高度)来得到一个比例因子,然后用这个比例因子乘以我所有的y坐标,得到指定的红色值,结果成功了。255/500的答案是0.51,当我用0.51代替y*(255/getHeight())时;成功了。我需要它与任何尺寸的框架,但是,所以0.51不工作。由

所以我有一个我正在处理的类的项目,在这个项目中,你必须创建一个充满圆圈的GUI框,除了屏幕中间的50%不能充满圆圈。此外,每个圆的红色值从屏幕的顶部到底部呈线性缩放,顶部为0,底部为255。下面是它的外观:

这是我的。我试着用255/500(500是高度)来得到一个比例因子,然后用这个比例因子乘以我所有的y坐标,得到指定的红色值,结果成功了。255/500的答案是0.51,当我用0.51代替y*(255/getHeight())时;成功了。我需要它与任何尺寸的框架,但是,所以0.51不工作。由于某些原因,y*(255/getHeight())不起作用,它似乎返回0,因为圆圈是各种深浅的蓝色和绿色。我能做些什么来解决这个问题

我的守则如下:

public class NewJComponent1 extends JComponent {
    public void paintComponent(Graphics g) {
        int count = 0;
        int diameter = 0;
        Random rand = new Random();

        while (count < 5000) {
            int x = rand.nextInt(getWidth() + 1);
            int y = rand.nextInt(getHeight() + 1);
            int greenValue = rand.nextInt(256);
            int blueValue = rand.nextInt(256);
            diameter = rand.nextInt(21) + 10;

            int redValue = y * (255 / getHeight());
            Color random = new Color (redValue, greenValue, blueValue);

            if ((x < (getWidth() / 4) && y <= (getHeight() - diameter))
                || ((x > (getWidth() * .75) && (x < getWidth() - diameter)) && y <= (getHeight() - diameter))
                || (x <= (getWidth() - diameter) && y < (getHeight() / 4))
                || (x <= (getWidth() - diameter) && ((y > (getHeight() * .75)) && (y <= getHeight() - diameter)))){

                g.setColor(random);
                g.fillOval(x, y, diameter, diameter);
                count++;
            }
        }
        System.out.println(getHeight());
        System.out.println(getWidth());
    }
}
公共类NewJComponent1扩展JComponent{
公共组件(图形g){
整数计数=0;
内径=0;
Random rand=新的Random();
而(计数<5000){
intx=rand.nextInt(getWidth()+1);
int y=rand.nextInt(getHeight()+1);
int greenValue=rand.nextInt(256);
int blueValue=rand.nextInt(256);
直径=兰特(21)+10;
int redValue=y*(255/getHeight());
颜色随机=新颜色(红值、绿值、蓝值);
如果((x
int redValue = y * (255 / getHeight());


仅仅将
redValue
更改为
double
不会改变
255/getHeight()
是整数除法的事实。

int redValue=(int)(y*(255.0/getHeight())
关键是除法的一个操作数必须是浮点类型,因此偶数
double redValue=255/getHeight();
会给你一个
redValue
0.0
在另一个注意事项上,注意你的屏幕可以分成4x4个矩形,你不能只画其中的4个。你可以建立一个例程,在这个例程中,中心部分永远不会被画进去。(一个小得多的优化是,您可以先测试中心,然后再选择颜色。)
int redValue = (int) Math.round(y * (255.0 / (double) getHeight()));