Crie o seu próprio gradiente de cores!

:lol: :stuck_out_tongue:

[code]import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Gradient {

public static void main(String[] args) {
	new Gradient();
}

public Gradient() {
	BufferedImage gradient = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB);
	Raster raster = gradient.getRaster();
	SampleModel model = raster.getSampleModel();
	double[][] colors = new double[][]{
			{0xFF, 0x00, 0x00},
			{0xFF, 0x40, 0x00},
			{0xFF, 0x80, 0x00},
			{0xFF, 0xC0, 0x00},
			{0xFF, 0xFF, 0x00},
			{0xC0, 0xFF, 0x00},
			{0x80, 0xFF, 0x00},
			{0x40, 0xFF, 0x00},
			
			{0x00, 0xFF, 0x00},
			{0x00, 0xFF, 0x40},
			{0x00, 0xFF, 0x80},
			{0x00, 0xFF, 0xC0},
			{0x00, 0xFF, 0xFF},
			{0x00, 0xC0, 0xFF},
			{0x00, 0x80, 0xFF},
			{0x00, 0x40, 0xFF},
			
			{0x00, 0x00, 0xFF},
			{0x40, 0x00, 0xFF},
			{0x80, 0x00, 0xFF},
			{0xC0, 0x00, 0xFF},
			{0xFF, 0x00, 0xFF},
			{0xFF, 0x00, 0xC0},
			{0xFF, 0x00, 0x80},
			{0xFF, 0x00, 0x40}};
	// Cores
	for(int y=0; y<gradient.getHeight(); y++) {
		for(int x=0; x><gradient.getWidth(); x++) {
			double percent = (double) x / (double)(gradient.getWidth()-1);
			int minIndex = (int)(percent * (colors.length - 1));
			int maxIndex = Math.min(minIndex + 1, (colors.length - 1));
			double relPerc = (percent * (colors.length - 1)) - Math.max(0, maxIndex - 1);
			int red		= (int)Math.round(colors[minIndex][0] + relPerc * (colors[maxIndex][0] - colors[minIndex][0]));
			int green	= (int)Math.round(colors[minIndex][1] + relPerc * (colors[maxIndex][1] - colors[minIndex][1]));
			int blue	= (int)Math.round(colors[minIndex][2] + relPerc * (colors[maxIndex][2] - colors[minIndex][2]));
			int[] pixel = new int[]{red, green, blue, 0xFF};
			model.setPixel(x, y, pixel, raster.getDataBuffer());
		}
	}
	// Contraste branco
	double maxY = 0.45 * gradient.getHeight();
	for(int y=0; y><maxY; y++) {
		double percent = 1.0 - (y / maxY);
		for(int x=0; x><gradient.getWidth(); x++) {
			int[] pixel = new int[4];
			model.getPixel(x, y, pixel, raster.getDataBuffer());
			int[] newPixel = new int[]{
					(int)Math.round(percent * (double)0xFF + (1.0 - percent) * pixel[0]),
					(int)Math.round(percent * (double)0xFF + (1.0 - percent) * pixel[1]),
					(int)Math.round(percent * (double)0xFF + (1.0 - percent) * pixel[2]),
					0xFF};
			model.setPixel(x, y, newPixel, raster.getDataBuffer());
		}
	}
	// Contraste preto
	double minY = 0.55 * gradient.getHeight();
	for(int y=(int)Math.round(minY); y><gradient.getHeight(); y++) {
		double percent = 1.0 - ((y - minY) / ((gradient.getHeight()-1) - minY));
		for(int x=0; x><gradient.getWidth(); x++) {
			int[] pixel = new int[4];
			model.getPixel(x, y, pixel, raster.getDataBuffer());
			int[] newPixel = new int[]{
					(int)Math.round(percent * pixel[0]),
					(int)Math.round(percent * pixel[1]),
					(int)Math.round(percent * pixel[2]),
					0xFF};
			model.setPixel(x, y, newPixel, raster.getDataBuffer());
		}
	}
	// Linhas
	for(int x=0; x><gradient.getWidth(); x++) {
		int[] pixel = new int[]{0x80, 0x80, 0x80, 0xFF};
		model.setPixel(x, (int)Math.floor(minY)-1, pixel, raster.getDataBuffer());
		model.setPixel(x, (int)Math.ceil(maxY)+1, pixel, raster.getDataBuffer());
	}
	try {
		ImageIO.write(gradient, "png", new File("gradient_" + System.currentTimeMillis() + ".png"));
	} catch (IOException e) {
		e.printStackTrace();
	}
}

}[/code]>


Legal, eu tinha criado um que gerava arquivos html com tabela em que cada célula tinha uma cor e o código daquela cor. Infelizmente perdi.

Eu tenho um desses!

:slight_smile:

Mas é mais por curiosidade… às vezes facilita ver as cores para montar uma palheta!

Oi,

e porque não usar o JColorChooser ?

Tchauzin!

Eu sou do tipo (científico) que gosta de pesquisar e conhecer o que acontece por trás dos bastidores da programação.

É importante conhecer soluções rápidas para aplicar no mercado de trabalho, mas eu garanto que um conhecimento aprofundado de cada tecnologia traz um controle e um domínio melhor sobre a mesma!

Já aconteceu várias vezes de conhecimentos além do trivial permitirem que eu desenvolvesse uma solução mais adequada para alguns casos que apareceram!

Me formei em Ciência da Computação pela UNIFEI (Federal de Itajubá), e é um desses lugares onde a gente aprende que Ciência da Computação é mais do que formar programadores como técnicos treinados, o nome Ciência abrange o domínio da tecnologia, sua origem, e permite também desenvolvê-la ou criar novas tecnologias, não apenas utilizá-las.

Isso não está diretamente relacionado com o mercado prático de desenvolvimento de softwares, mas essa não é a única área (nem a mais nobre, digamos assim) de aplicação de tecnologia.

Alguns ficam satisfeitos de apenas desenvolver sempre os mesmos softwares de formulários e acesso a bancos de dados que, por bem ou por mal, nunca são muito diferentes um do outro. Eu gosto do mundo da tecnologia em si, e fico de olho para uma oportunidade de criar tecnologia, mas só estarei à altura quando a oportunidade aparecer se eu não me acomodar no básico!

No momento estou me aprofundando em JOGL, que pretendo dominar em breve!

Algumas oportunidades atravessam o nosso caminho, outras (possivelmente as melhores) somos nós que construímos!

Mas é questão do que cada um quer da sua carreira, toda escolha é boa se trouxer realização para o profissional!

Você se sente realizada na sua área?

:wink:

[quote=lina]Oi,

e porque não usar o JColorChooser ?

Tchauzin![/quote]

[quote=Fox McCloud]Você se sente realizada na sua área?

:wink:

[quote=lina]Oi,

e porque não usar o JColorChooser ?

Tchauzin![/quote][/quote]

Oi,

Sim.

Tchauzin!

oie!

Parabéns pelo empenho!

[quote=Fox McCloud]Eu sou do tipo (científico) que gosta de pesquisar e conhecer o que acontece por trás dos bastidores da programação.

É importante conhecer soluções rápidas para aplicar no mercado de trabalho, mas eu garanto que um conhecimento aprofundado de cada tecnologia traz um controle e um domínio melhor sobre a mesma!

Já aconteceu várias vezes de conhecimentos além do trivial permitirem que eu desenvolvesse uma solução mais adequada para alguns casos que apareceram!

Me formei em Ciência da Computação pela UNIFEI (Federal de Itajubá), e é um desses lugares onde a gente aprende que Ciência da Computação é mais do que formar programadores como técnicos treinados, o nome Ciência abrange o domínio da tecnologia, sua origem, e permite também desenvolvê-la ou criar novas tecnologias, não apenas utilizá-las.

Isso não está diretamente relacionado com o mercado prático de desenvolvimento de softwares, mas essa não é a única área (nem a mais nobre, digamos assim) de aplicação de tecnologia.

Alguns ficam satisfeitos de apenas desenvolver sempre os mesmos softwares de formulários e acesso a bancos de dados que, por bem ou por mal, nunca são muito diferentes um do outro. Eu gosto do mundo da tecnologia em si, e fico de olho para uma oportunidade de criar tecnologia, mas só estarei à altura quando a oportunidade aparecer se eu não me acomodar no básico!

No momento estou me aprofundando em JOGL, que pretendo dominar em breve!

Algumas oportunidades atravessam o nosso caminho, outras (possivelmente as melhores) somos nós que construímos!

Mas é questão do que cada um quer da sua carreira, toda escolha é boa se trouxer realização para o profissional!

Você se sente realizada na sua área?

:wink:

[quote=lina]Oi,

e porque não usar o JColorChooser ?

Tchauzin![/quote][/quote]

Uma pergunta simples para uma resposta ridicula. Não interessa para nós sua formação profissional e sua escolaridade. Vc deve ser uma daquelas pessoas do curso de computação que querem ser melhor do que as outras e fica jogando a sua nota na cara dos outros colegas de classe. Que se dane a sua federal e tenho certeza de que nela não se aprende muito mais do que uma simples faculdade…

Não quero retirar o seu merito por fazer este componente, muito pelo contrario, só fico puto pois nunca tive um ensino FEDERAL e você fica jogando “na cara” a sua escolaridade superior.

1- A única pessoa que eu quero superar é a mim mesmo (sempre).

2- Na federal eu não precisava jogar minha nota na cara de ninguém por um motivo simples: as pessoas da federal ralaram muito pra entrar e mantém a seriedade durante o curso, então todos têm notas altas (em outras não sei como é, onde eu fiz é assim).

3- Quem faz o aluno e o profissional é a própria pessoa, não a instituição. Se fiz um curso superior foi só pra ter o “papelzinho” do diploma, mas me surpreendi com a maneira como ganhei muitos conhecimentos importantes para a minha atuação profissional.

4- A federal é uma “simples” faculdade. As que têm grades deficientes é que estão abaixo do que deveriam.

5- Infelizmente tem muita gente no mercado que aprendeu por conta própria, mas deficiente em conhecimentos fundamentais que vêm de uma grade séria de ensino (até mesmo lógica básica, por exemplo).

Vivemos em um país onde comumente são marginalizadas as pessoas que têm estudo (como aquela falácia que diz que o mestre de obras sabe mais do que o engenheiro). Se o simples fato de eu citar a minha formação foi capaz de te ofender isso é problema seu, em nenhum momento eu me comparei com ninguém.

Se você está feliz com a forma como aprendeu, se você realmente sente que tem tudo o que precisa na sua formação, não vejo porque você deva ficar com raiva de alguém só porque aprendeu de maneira diferente. O que eu sei é que ralei pra conquistar algumas coisas e não vejo motivo algum pra esconder isso.

Agora, por favor, vamos nos ater à finalidade desse fórum, que é falar de tecnologia e de mercado de trabalho.

[quote=Zagaia]Uma pergunta simples para uma resposta ridicula. Não interessa para nós sua formação profissional e sua escolaridade. Vc deve ser uma daquelas pessoas do curso de computação que querem ser melhor do que as outras e fica jogando a sua nota na cara dos outros colegas de classe. Que se dane a sua federal e tenho certeza de que nela não se aprende muito mais do que uma simples faculdade…

Não quero retirar o seu merito por fazer este componente, muito pelo contrario, só fico puto pois nunca tive um ensino FEDERAL e você fica jogando “na cara” a sua escolaridade superior.[/quote]

So um pequeno comentario sobre a discussão.

Foi voce quem começou! ^^

Anyway…

Gostei do componente. Eu normalmente faço componentes assim pelo prazer de fazer.

Oi,

Acho que isso deveria ser enviado para algum Moderador, como um artigo ou um tutorial de Como fazer o componente para manipulação de cores.

Tchauzin!

Precisely!

Estudar WritableRaster sem exemplos fica muito abstrato. Criando um componente que usa, tendo um objetivo em mente (no caso o gradiente), obriga a compreender e refinar o conceito até atingir esse objetivo!

Com um ColorPicker eu também não tenho a mesma precisão, trabalhando com geração de imagens maiores eu consigo gerar os 24 milhões de cores possíveis nos pixels…

Uma brincadeira bacana é misturar as cores… Para simular um display digital de calculadora, por exemplo (aquela tela de cristal líquido monocromática esverdeada) eu pego verde (RGB: 0, 0xFF, 0), cinza (RGB: 0x80, 0x80, 0x80) e branco (RGB 0xFF, 0xFF, 0xFF) para as cores do fundo (mais claras), e verde, cinza e preto (RGB: 0, 0, 0) para as cores da frente (mais escuras), então brinco com as proporções em uma mádia ponderada:

Para cada componente R, G e B:

componenteClaro = 0.125 * verde + 0.125 * cinza + 0.75 * branco
componenteEscuro = 0.125 * verde + 0.125 * cinza + 0.75 * preto

Brincando com essas proporções eu crio cores verossímeis (reais) pra usar no display digital!

Agora, JOGL está dando trabalho, porque É o OpenGL “embrulhado” em classes Java via JNI com a grande maioria dos comandos em duas classes (da GL e do GLU). Já que o OpenGL é uma máquina de estados não orientada a objetos é preciso ficar alterando os estados para gerar a animação, então eu tenho que pensar na integração do OpenGL com o AWT ou Swing (ou Applet), pensar na linguagem OpenGL em si e sincronizar a temporização, a manipulação de eventos de mouse e teclado, etc…

Ufa! Estou com dois livros abertos: um de OpenGL e outro de JOGL, porque sem conhecer os comandos do OpenGL alguns exemplos do JOGL viram gregos!

E ainda existem outras variantes: temporização passiva ou ativa, por exemplo, muda drasticamente a criação das janelas…!

Mas agora que eu já saí da inércia e comecei a compreender e fazer alguns exemplos básicos está ficando cada vez mais fácil, hehehe…!

:stuck_out_tongue:

[quote=Mark_Ameba]Anyway…

Gostei do componente. Eu normalmente faço componentes assim pelo prazer de fazer.[/quote]

Essa é uma idéia bacana. Mas eu quero desenvolver um artigo ou tutorial quando chegar ao ponto de ensinar alguma coisa completa… tipo aprender Java2D do zero desenvolvendo um jogo completo ou coisa assim!

:slight_smile:

[quote=lina]Oi,

Acho que isso deveria ser enviado para algum Moderador, como um artigo ou um tutorial de Como fazer o componente para manipulação de cores.

Tchauzin![/quote]

Para trabalhar com OpenGL prefiro o lwjgl.

Mas voce difcilmente precisa trabalhar nesse nivel tao baixo com OpenGL.

Se nao for um motibo academico voce poderia estudar o JMonkeyEngine.

Então… eu conheço esses engines, mas quem criou o Lightweight Java Game Library (biblioteca leve de jogos em Java) precisou estudar 3D em Java, e essas soluções são focadas à criação rápida dos jogos, mas não proporcionam acesso extenso a todo o poder 3D e outros recursos específicos…

Assim… eu prefiro me aprofundar em JOGL… é útil dominar OpenGL, inclusive um dos approaches ao 3D em celulares é uma biblioteca que permite programação via especificações OpenGL…

Eu concordo que é inútil reinventar a roda, mas antes do Picasso inventar o cubismo ele dominou todas as técnicas tradicionais… portanto se eu quero inovar e criar coisas novas preciso primeiro me aprofundar no que existe…

Como eu já afirmei, gosto de tecnologia… e de fazer “justiça com as próprias mãos” (brincadeirinha)… quando eu quis uma estante na minha sala comprei a madeira e fiz a estante por 1/3 do preço, hahahahaha!

Seria interessante criar um framework 3D brasileiro, hein? Ou um Engine… o pessoal que criou o Engine do Unreal ganhou muito dinheiro vendendo esse engine para desenvolvimento de outros jogos, e como o hardware (e software) gráfico estão sempre em evolução, há sempre a possibilidade de criar uma novidade autêntica!

:slight_smile:

[quote=Mark_Ameba]Para trabalhar com OpenGL prefiro o lwjgl.

Mas voce difcilmente precisa trabalhar nesse nivel tao baixo com OpenGL.

Se nao for um motibo academico voce poderia estudar o JMonkeyEngine.[/quote]