2

I am trying to diffuse a color in java Draw (which doesn't have the capability to diffuse normally) but I ran into an error and I can't seem to spot it. The way I went about diffusing was by writing a small script that would draw my shape hundreds of times, each time smaller and slightly varying in color. This is my snippet:

import javax.swing.*;
import java.awt.*;
public class DiffuseDraw extends JFrame
{
  //set size of window here
  final int length = 350;
  final int height = 370;

  public DiffuseDraw()
  { 
    super("Graphics Project Window");
    Container container = getContentPane(); 
    setBackground(new Color(0,0,0));
    setSize(length, height);
    setVisible(true);
  }


// my problem comes here:

  public void paint(Graphics g)
  {

    Draw.fillRectangle(g,0,0,length,height,new Color(19,24,32));

    int rad = 325; // size of the biggest circle

    float floatGreen = 0; // Color components for black
    float floatBlue = 0;
    float floatRed = 0;

    int counter = 0; // the counter
    while (counter < 290) {
       rad = rad - 1; // Here we shrink the by a small incriment

       floatRed = floatRed + 87/290;  //red component slowly goes brighter
       floatBlue = floatBlue + 178/290; // blue component slowly goes brighter
       floatGreen = floatGreen + 211/290; // green component slowly goes brighter
       int intRed = (int)Math.round(floatRed);
       int intBlue = (int)Math.round(floatBlue);
       int intGreen = (int)Math.round(floatGreen);

       Draw.fillCircle(g,173,307,rad,new Color(intRed,intBlue,intGreen));
       counter = counter + 1;
    }

  }

  public static void main(String args[]) {
    DiffuseDraw prog = new DiffuseDraw();
    prog.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }  
}

When I compile and run, I only get a black screen. I am guessing that the problem is coming from the colors not changing. The number I am adding the float red blue and green by came from me wanting to diffuse a type of blue, so I took the the brightest color of blue that would appear and divided it by 290, the number of times the loop would run.

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
  • You might try working in the HSB color space, seen in the examples cited [here](http://stackoverflow.com/a/13709785/230513). – trashgod Dec 12 '12 at 03:21

1 Answers1

1

Instead of

87/290, 178/290, and 211/290,

try using

(float)87/290, (float)178/290, and (float)211/290.

That will, at least, add some color to the window- the problem is that by default, a number like 87/290 will be evaluated to 0; casting it to a float will give the desired result of 0.3 instead.

username tbd
  • 9,152
  • 1
  • 20
  • 35