如何线性缩放像素着色?

时间:2015-02-23 22:22:46

标签: java colors

所以我有一个正在进行的课程项目,你必须创建一个用圆圈填充的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());
    }
}

我尝试了redValue代码的各种迭代,交换顺序,对int进行双重和类型转换,以及其他各种各样的事情,但我无法使其工作。我确定这是一个小错误,搞乱了一切,但无论如何,无论如何都要感谢你的帮助。我正在使用Android Studio,不确定这是否会影响任何事情。

1 个答案:

答案 0 :(得分:4)

替换此行

int redValue = y * (255 / getHeight());

int redValue = (int) Math.round(y * (255.0 / (double) getHeight()));

只需将redValue更改为double,就不会改变255/getHeight()为整数除法的事实。