Criar imagem degradê

4 respostas
java
oliverlucas

Eu preciso fazer uma imagem em degradê, pra isso eu precisaria colocar um for para que toda vez que a cor vermelha rodasse, diminuiria -1 dela.

Só que não to conseguindo implementar isso :frowning: .

A cor vermelha tá declarada como {255,0,0}.

Segue o código:

public static void main(String[] args) throws IOException {
        
	int width = 500;
	int height = 300;
	
	BufferedImage image= new BufferedImage(
		width, 
		height,
		BufferedImage.TYPE_INT_RGB
	);
	WritableRaster raster = image.getRaster();
	
	int c = 255;
	int[] green = new int[] {35,142,35};
	int[] white = new int[] {255,255,255};
	int[] red = new int[] {c,0,0};

	
	for (int h = 0; h < height; h++){
		for (int w = 0; w < width; w++){
			if (w < 500) 
			{
				raster.setPixel(w, h, red);
			}

Essa é a parte que eu estou tentando implementar:

for (c = w; w < height; c--){
				if (w < 500) 
			{
				raster.setPixel(w, h, red);
			}
				
			}
		}
	}          
	
	ImageIO.write(image, "PNG", 
		new File("Degrade.png"));	
}

4 Respostas

Dragoon

Fiz um debug e os seus for estão equivocados, mas, eu debug e não consegui entender como você quer gerar isso, existe algum explicação adicional que possa passar?

oliverlucas

Então. É tipo assim eu criei a variável “c” para colocar o “255” que é a cor equivalente ao vermelho (poderia ser qualquer outra, mas coloquei esse por ser mais fácil).
E então coloquei no “int[] red = new int[] {c,0,0};”. Para que sempre que rodar o for pra imagem ficar vermelha, puder rodar um for que diminua 1 em “c”, fazendo com que a imagem vá ficando em degradê.
Os dois primeiros for rodaram e colocaram a imagem em vermelho, só que agora eu tenho que implementar outro for para diminuir, só que não consigo…
Não sei se deu pra entender, se não der pra entender pode deixar, agradeço de toda forma. :slight_smile:

staroski
public static void main(String[] args) throws IOException {
    int width = 500;
    int height = 300;

    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    WritableRaster raster = image.getRaster();

    int r = 255;
    int g = 0;
    int b = 0;

    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            int[] pixel = new int[] { r, g, b };
            raster.setPixel(x, y, pixel);
        }
        r--; // a cada linha decrementa o nível de vermelho
        if (r < 0) {
            r = 0;
        }
    }

    ImageIO.write(image, "PNG", new File("Degrade.png"));
}
oliverlucas

Deu certo!!
Nossa, muito obrigado mesmo!!!

Criado 26 de março de 2019
Ultima resposta 26 de mar. de 2019
Respostas 4
Participantes 3