Você só quer “avermelhar” (por exemplo) a imagem toda?
Veja esse pdf, na página 54, o método drawRedderImage:
Você só quer “avermelhar” (por exemplo) a imagem toda?
Veja esse pdf, na página 54, o método drawRedderImage:
Julio: Então cara, eu nunca tentei fazer esse tipo de coisa antes Oo. Dexa eu ver se entendi, simplesmente mudando os valores de pixel[0], pixel [1] e pixel[2] vai mudar as cores vermelha, verde e azul de toda a imagem? Ou eu teria que varrer a imagem inteira como você falou pra mudar pixel por pixel? Essa parte eu não entendi muito bem como faz olhando os códigos postados aqui no topico
Vini: Então cara, eu queria que fosse mais ou menos igual quando tem uma imagem no photoshop, ae ao apertar crtl+u aparece uma opção para mudar o Hue, a mudança que ocorre ao rolar a barra, é a mesma que eu queria fazer no meu aplicativo.
Já mecheu com JavaFX? Seria tipo a função HUE de lá, eu tentei até importar essa função para o Java normal mas não consegui
Mas vo dah uma olhada no arquivo pdf que você postou ^^
[quote=Sairon]Julio: Então cara, eu nunca tentei fazer esse tipo de coisa antes Oo. Dexa eu ver se entendi, simplesmente mudando os valores de pixel[0], pixel [1] e pixel[2] vai mudar as cores vermelha, verde e azul de toda a imagem? Ou eu teria que varrer a imagem inteira como você falou pra mudar pixel por pixel? Essa parte eu não entendi muito bem como faz olhando os códigos postados aqui no topico
Vini: Então cara, eu queria que fosse mais ou menos igual quando tem uma imagem no photoshop, ae ao apertar crtl+u aparece uma opção para mudar o Hue, a mudança que ocorre ao rolar a barra, é a mesma que eu queria fazer no meu aplicativo.
Já mecheu com JavaFX? Seria tipo a função HUE de lá, eu tentei até importar essa função para o Java normal mas não consegui
Mas vo dah uma olhada no arquivo pdf que você postou ^^
[/quote]
É justamente isso… hue é o ajuste de matiz. Mudando os valores das bandas vermelha, verde e azul, você fará um ajuste de matiz.
Mas você tem que mapear toda a imagem conforme o código acima. Se quiser mudar somente pixels de uma determinada cor, é simples identificá-lo:
Para vermelho:
if(pixels[0]==127 && pixels[1] = -127 && pixels[1] = -127)
Isso se refere a um pixel vermelho.
Lembre que a imagem que voc~e está processandop possui 3 bandas de cor, ou seja 3 bytes, 24bit color. Imagens com formato de pixel diferente serão processadas de maneira diferente.
Só verifique se pixels[] é um inteiro ou um byte. Se for inteiro use um intervalo de 0 - 255, se for byte faça como acima.
faça isso.:
if (img.getRGB(x, y) == Color.red.getRGB()) {
}
Gente… agradeço muito por tentarem me ajudar ^^
mas to com um grande problema… a imagem que quero mudar a cor é um icone… como faço para converter ela e poder mudar a cor da imagem?
O setRGB é do BufferedImage … e soh consigo converter ela para Graphic
Então não sei como eu poderia usar o método de mudar o RGB da imagem sendo que não é da classe icon Oo … e não consigo converter ela para outro tipo de imagem sem ser Graphic
Alguém sabe como posso fazer isso?
Eu uso o netbeans… se alguém puder me mandar um exemplo de um aplicativo que faz isso… eu seria muito grato…
Mas acho que isso jah é pedir muito … se soh me falarem como resolver o problema do tipo de imagem acho que consigo solucionar o meu problema de mudar a cor da imagem
Como assim? Como você carregou a imagem?
Graphic não é uma imagem, Graphics representa um contexto gráfico.
[quote=Sairon]Gente… agradeço muito por tentarem me ajudar ^^
mas to com um grande problema… a imagem que quero mudar a cor é um icone… como faço para converter ela e poder mudar a cor da imagem?
O setRGB é do BufferedImage … e soh consigo converter ela para Graphic
Então não sei como eu poderia usar o método de mudar o RGB da imagem sendo que não é da classe icon Oo … e não consigo converter ela para outro tipo de imagem sem ser Graphic
Alguém sabe como posso fazer isso?
Eu uso o netbeans… se alguém puder me mandar um exemplo de um aplicativo que faz isso… eu seria muito grato…
Mas acho que isso jah é pedir muito … se soh me falarem como resolver o problema do tipo de imagem acho que consigo solucionar o meu problema de mudar a cor da imagem[/quote]
Eu não entendi direito. A imagem que você carregou é uma classe Icon? Porque não carrega para uma BufferedImage?:
BufferedImage image = ImageIO.read(...);
public String pintar(String color)
{
// obtenho uma BufferedImage de um arquivo de imagem...
BufferedImage img = null;
try {
img = ImageIO.read(new File(url.getFile()));//seu arquivo
} catch (IOException ex) {
// System.out.println("Erro 1.: "+ex);
System.out.println("Erro 1.: "+ex);
}
// capturo o Raster da imagem num objeto do tipo WritableRaster (que permite alteração do Raster)...
WritableRaster r = img.getRaster();
//erro no (Degradê)
Color color1 = new Color(253, 253, 253);
Color color2 = new Color(254, 254, 254);
Color color3 = new Color(244, 244, 244);
Color color4 = new Color(228, 228, 228);
Color color5 = new Color(208, 208, 208);
Color color6 = new Color(227, 227, 227);
Color color7 = new Color(232, 232, 232);
Color color8 = new Color(234, 234, 234);
Color color9 = new Color(214, 214, 214);
Color color10 = new Color(223, 223, 223);
Color color16 = new Color(198, 198, 198);
Color color11 = new Color(243, 243, 243);
Color color12 = new Color(209, 209, 209);
Color color13 = new Color(187, 187, 187);
Color color14 = new Color(211, 211, 211);
Color color15 = new Color(200, 200, 200);
//
Color corAlvo = Color.decode("#"+color);
// crio um vetor que conterá os pixels varridos pelo Raster...
int pixels[] = new int[img.getWidth() * img.getHeight()];
// calculo a matriz de pixels da imagem com base na largura x altura...
for (int x = 0; x < img.getWidth(); x++) {
for (int y = 0; y < img.getHeight(); y++) {
// gravo os pixels do eixo x,y no vetor...
r.getPixel(x, y, pixels);
// se a imagem for branca e com erros
if (img.getRGB(x, y) == Color.WHITE.getRGB() || img.getRGB(x, y) == color1.getRGB() ||
img.getRGB(x, y) == color2.getRGB() || img.getRGB(x, y) == color3.getRGB() ||
img.getRGB(x, y) == color4.getRGB() || img.getRGB(x, y) == color5.getRGB() ||
img.getRGB(x, y) == color6.getRGB() || img.getRGB(x, y) == color7.getRGB() ||
img.getRGB(x, y) == color8.getRGB() || img.getRGB(x, y) == color9.getRGB() ||
img.getRGB(x, y) == color10.getRGB()|| img.getRGB(x, y) == color11.getRGB() ||
img.getRGB(x, y) == color12.getRGB() ||
img.getRGB(x, y) == color13.getRGB() ||
img.getRGB(x, y) == color14.getRGB() || img.getRGB(x, y) == color15.getRGB() ||
img.getRGB(x, y) == color16.getRGB() ) {
// substituo os cores RGB da comparação por outras que eu quiser...
pixels[0] = corAlvo.getRed();
pixels[1] = corAlvo.getGreen();
pixels[2] = corAlvo.getBlue();
// escrevo no WritableRaster novamente a matriz de pixels desse eixo...
r.setPixel(x, y, pixels);
}
}
}
// e, por fim, atualizo a imagem com o Raster modificado...
img.setData(r);
String figuraModi= "nova figura";
try {
ImageIO.write(img, "png", new File(figuraModi+".png"));
} catch (IOException ex) {
System.out.println("Erro 2.:"+ex);
} catch (Exception ex) {
System.out.println("Erro 2.1.:"+ex);
}
return figuraModi;
}
veja se isso lhe serve
Vini: Então cara… eu to carrendo a imagem definindo ela como um icone de um Jlabel … e soh tem a opção de mudar essa imagem que é de tipo icone para java.awt.Image (eu falei graphic… mas falei errado foi mal) … mudar para bufferedimage eu não consigo :’(
Julio: Eu to exibindo várias imagens num painel definindo elas como icone de Jlabel … por isso elas estão no formato icone… e não consigo de jeito nenhum converter para bufferedimage
Elton: Então cara… ae entramos no problema que digo acima… a imagem que estou usando é do tipo icone não consigo converter ela para outro formato que não seja Image …
Se não tiverem entendendo o pq estou usando como icone de Jlabel as imagens… eu posso postar aqui como está o aplicativo que criei até agora para vcs verem o que estou fazendo ^^
[quote=Sairon]Vini: Então cara… eu to carrendo a imagem definindo ela como um icone de um Jlabel … e soh tem a opção de mudar essa imagem que é de tipo icone para java.awt.Image (eu falei graphic… mas falei errado foi mal) … mudar para bufferedimage eu não consigo :’(
Julio: Eu to exibindo várias imagens num painel definindo elas como icone de Jlabel … por isso elas estão no formato icone… e não consigo de jeito nenhum converter para bufferedimage
Elton: Então cara… ae entramos no problema que digo acima… a imagem que estou usando é do tipo icone não consigo converter ela para outro formato que não seja Image …
Se não tiverem entendendo o pq estou usando como icone de Jlabel as imagens… eu posso postar aqui como está o aplicativo que criei até agora para vcs verem o que estou fazendo ^^[/quote]
Mas porque você não carrega em um BufferedImage e depois cria o Icon a partir dele? Se o problema é ter a imagem como buffered image, isso resolve seu problema.
Mas como eu faria para o Bufferedimage receber uma imagem de tipo icone? E vice versa? O.o
Olá, sou iniciante em JAVA e estava precisando de um programa que troque os pixels de uma imagem jpeg de preto para branco, é o mesmo problema do Linkel, certo ?
Eu estou tentando rodar o programa dele, mas não estou conseguindo, deve ser conceitos básicos, mas não estou conseguindo, alguém poderia me ajudar ?
[code]
package trocarcorimagem;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import javax.imageio.ImageIO;
public class TrocarCor1
{
public static void main(String[] args)
{
// obtenho uma BufferedImage de um arquivo de imagem...
BufferedImage img = ImageIO.read(new File(fc.getSelectedFile().getAbsolutePath()));
// capturo o Raster da imagem num objeto do tipo WritableRaster (que permite alteração do Raster)...
WritableRaster r = img.getRaster();
// crio um vetor que conterá os pixels varridos pelo Raster...
int pixels[] = new int[img.getWidth * img.getHeight];
// calculo a matriz de pixels da imagem com base na largura x altura...
for (int x = 0; x < img.getWidth(); x++)
{
for (int y = 0; y < img.getHeight(); y++)
{
// gravo os pixels do eixo x,y no vetor...
r.getPixel(x, y, pixels);
// comparo os pixels desse eixo com as cores RGB que eu quiser substituir...
if (pixels[0] == 255 && pixels[1] == 0 && pixels[2] == 0)
{
// substituo os cores RGB da comparação por outras que eu quiser...
pixels[0] = 150; pixels[1] = 100; pixels[2] = 50;
// escrevo no WritableRaster novamente a matriz de pixels desse eixo...
r.setPixel(x, y, pixels);
}
}
}
// e, por fim, atualizo a imagem com o Raster modificado...
img.setData(r);
}
}[/code]
Na linha 14, o File e o fc ficam sublinhados de vermelho, o que eu devo fazer ? A imagem esta no caminho C:/Documents and Settings/XP/Desktop/a.jepg
Na linha 19, o getWidth e o getHeight ficam sublinhados também…
Alguém me ajude, por favor…
Abracos…
for (int y = 0; y < img.getHeight(); y++)
for (int x = 0; x < img.getWidth(); x++) {
Color pixel = new Color(img.getRGB(x, y));
if (pixel.getRed() == 0 && pixel.getGreen() == 0 && pixel.getBlue() == 0)
img.setRgb(new Color(255, 255, 255).getRGB());
}
}
Então ViniGodoy, mas eu não estou nem conseguindo rodar esse programa…
A linha 14 eu consegui arrumar, agora sõ falta 1 erro.
O erro esta em:
Na linha 22, o getWidth e o getHeight ficam sublinhados, porque ?
Desculpe se são problemas muito triviais, mas sou iniciante e não estou conseguindo.
Se me der umas dicas eu vou tentando…
[code]package trocarcorimagem;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
public class TrocarCor1
{
public static void main(String[] args)
{
try
{
// obtenho uma BufferedImage de um arquivo de imagem...
BufferedImage img = ImageIO.read(new File("C:/Documents and Settings/XP/Desktop/Teste OCR/a.jpg"));
// capturo o Raster da imagem num objeto do tipo WritableRaster (que permite alteração do Raster)...
WritableRaster r = img.getRaster();
// crio um vetor que conterá os pixels varridos pelo Raster...
int pixels[] = new int[img.getWidth * img.getHeight];
// calculo a matriz de pixels da imagem com base na largura x altura...
for (int x = 0; x < img.getWidth(); x++)
{
for (int y = 0; y < img.getHeight(); y++)
{
// gravo os pixels do eixo x,y no vetor...
r.getPixel(x, y, pixels);
// comparo os pixels desse eixo com as cores RGB que eu quiser substituir...
if (pixels[0] == 255 && pixels[1] == 0 && pixels[2] == 0)
{
// substituo os cores RGB da comparação por outras que eu quiser...
pixels[0] = 150; pixels[1] = 100; pixels[2] = 50;
// escrevo no WritableRaster novamente a matriz de pixels desse eixo...
r.setPixel(x, y, pixels);
}
}
}
// e, por fim, atualizo a imagem com o Raster modificado...
img.setData(r);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
[/code]
[code]import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
public class TrocarCor1 {
public static void main(String[] args) throws IOException {
// Abre a tela para escolher a imagem do disco
JFileChooser fc = new JFileChooser();
if (fc.showOpenDialog(null) != JFileChooser.APPROVE_OPTION)
return;
// Lê a imagem
BufferedImage img = ImageIO.read(fc.getSelectedFile());
// Altera os pixels
for (int y = 0; y < img.getHeight(); y++)
for (int x = 0; x < img.getWidth(); x++) {
Color color = new Color(img.getRGB(x, y));
if (color.equals(Color.BLACK)) {
img.setRGB(x, y, Color.WHITE.getRGB());
}
}
// Grava a saída no arquivo output.png
ImageIO.write(img, "png", new File("output.png"));
}
}[/code]
Valeu VinyGodoy, era isso que eu queria…
Muito obrigado…
Abracoss
Muito menos complexo e bem mais óbvio do que vc imaginava, não?
Sim =)…
Mas a cor não é preta, o que eu pensava ser preto é formado por várias outras cores…
Estou mapeando as cores para tentar resolver, mas agora acho que já consigo…
Valeu…
Abraco…
É só fazer o getRed() getG() e getB() menores que um determinado valor pequeno (10, por exemplo).
Outra possibilidade é transformar em escala de cinza, e então testar por aí. Preferencialmente trabalhar com HSI no lugar de RGB.