2016-05-15 3 views
0

Я все еще изучаю Java, поэтому, пожалуйста, будьте терпеливы, если вопрос слишком прост. Я пытаюсь найти определенный цвет в if-условии, скажем, синий (RGB: (0,0,225)) путем анализа изображения попиксельно следующим за контуром:Найти конкретный цвет Java

public void findColor(){  

      for (int w=0; w< this.width; w++){ 
       for(int h=0; h< this.height; h++){ 

        if(this.Picture[w][h]=??){ 

У меня также есть еще один класс, чтобы указать цвет RGB:

public class Color { 

    private int red; 
    private int green; 
    private int blue; 

    public Color(int r, int g, int b){ 
     this.red=r; 
     this.green=g; 
     this.blue=b; 
    } 

    public Color(Color c){ 
     this.red=c.red; 
     this.green=c.green; 
     this.blue=c.blue; 
    } 

    public void setColor(int r, int g, int b){ 
     this.red= r; 
     this.green= g; 
     this.blue = b; 
    } 

    public int colorRed(){ 
     return this.red; 
    } 

    public int colorGreen(){ 
     return this.green; 
    } 


    public int colorBlue(){ 
     return this.blue; 
    } 
} 

Мой вопрос, как соединить эти два класса чтобы проверить цвет RGB пикселя?

+0

Что вы пытаетесь сделать? Обнаружение определенной толстой кишки? Определить цвет ведьмы каждый пиксель? BTW, имя класса в Java обычно начинается с заглавной буквы;) – Guillaume

+0

Как я уже сказал, я пытаюсь оценить в моем условии if, если данный пиксель синий, если это тогда, я изменю его на другой цвет, но я знаю, как обрабатывать вторую часть :) –

+1

Вы можете дать вашему классу цветов равный метод, который сравнивает значения rgb другого класса Color, а затем тест может быть 'if (x.equals (y))'. Но почему вы изобретаете колесо? Зачем создавать свой собственный класс Color, если другие уже существуют? –

ответ

0

Сначала я бы изменил способ головы findColor() на findColor (Color aColor). Поэтому вы можете повторно использовать этот метод.

Вы не дали нам никаких намеков, что такое мистик Picture. Но если вы сохраните изображение в BufferedImage, вы можете получить RGB-Color, вызвав Picture.getRGB(x,y). Дополнительная документация в BufferedImage on oracle.

В вашем примере это будет int int packedInt = img.getRGB(w, h); Затем вы должны преобразовать это значение в объект Color. Color myColor = new Color(packedInt, true);

На этом этапе вы должны подумать о том, чтобы использовать стандартный класс JAVA Color вместо вашего класса.

Теперь вы можете сравнить фактическое myColor с полем ввода вашего Метода.

EDIT: есть подобная проблема с вашим на stackowerflow: link

0

я использую это для получения цвета пикселей

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 

public class Main { 
    public static void main(String args[]) throws IOException { 
     File file = new File("your_file.jpg"); 
     BufferedImage image = ImageIO.read(file); 

     int w = image.getWidth(); 
     int h = image.getHeight(); 
     for (int i = 0; i < h; i++) { 
      for (int j = 0; j < w; j++) { 
       int pixel = image.getRGB(w, h); 
       int red = (pixel & 0x00ff0000) >> 16; 
       int green = (pixel & 0x0000ff00) >> 8; 
       int blue = pixel & 0x000000ff; 
       System.out.println("Red Color value = " + red); 
       System.out.println("Green Color value = " + green); 
       System.out.println("Blue Color value = " + blue); 
     } 
     } 
    } 
} 

она должна работать, вам нужно добавить тест и иначе для изменения цвета пикселя, если у вас есть некоторые проблемы с этим, просто спросите

Смежные вопросы