Как получить цвет пикселя java

Обновлено: 07.07.2024

У меня есть шахматная доска, которая окрашивает конкретные квадраты в синий цвет ( Color.BLUE ), и я хочу, чтобы программа знала, когда пользователь нажимает на синие квадраты. Я знаю координаты X и Y клика, но как это сделать? Другие создают изображение, а затем используют .getRGB() , но есть ли другой способ?

спросил(а) 2013-12-29T07:52:00+04:00 7 лет, 10 месяцев назад

Вы не должны пытаться "получить цвет пикселя". Логика, которая обрабатывает шахматную доску, знает, что такое макет платы и какие пиксели она окрашивает, поэтому она должна сохранять эту информацию настолько, чтобы она могла определить, на какой квадрат нажимается. Способ OOP для этого: определить класс Chessboard , целью которого является представление шахматной доски, нарисованной в окне (или компонентом Swing, или что-то еще). Должен быть метод рисования шахматной доски; этот метод будет отслеживать диапазон пикселей, используемых для рисования каждого квадрата. (Поскольку каждый квадрат, вероятно, будет иметь одинаковую высоту и ширину, на самом деле вам не нужно сохранять массив координат пикселей, достаточно будет сохранить координату верхнего левого угла шахматной доски, и вы добавите что-то вроде width * columnNumber или height * rowNumber чтобы получить координату каждого квадрата.) Данные о том, где рисуются квадраты, будут в полях-членах в Chessboard . Затем вы можете добавить метод, который задает Chessboard "какой квадрат содержит пиксель в координатах X и Y?". Я забыл много деталей, но я считаю, что лучший общий подход к этой проблеме.

ответил(а) 2013-12-29T08:02:00+04:00 7 лет, 10 месяцев назад

Я бы сохранил массив Rectangle и выяснил, какой из них содержит точку при нажатии.

Chessboard Image

ответил(а) 2013-12-29T09:16:00+04:00 7 лет, 10 месяцев назад

Да, есть еще и лучший способ! Поскольку у вас уже есть координаты щелчка x и y , теперь вы можете проверить, где эти координаты попадают в сетку шахматной доски, и вы можете точно знать, в какую ячейку щелкнули.

Поскольку квадраты шахматных досок отображаются в определенных координатах вами, я предполагаю, что вы можете выполнить алгоритм сравнения координат x и y с квадратами, и у вас будет позиция.

Если это не поможет, дайте мне знать более подробно, я могу помочь вам тогда.

ответил(а) 2013-12-29T08:01:00+04:00 7 лет, 10 месяцев назад

Попытка использовать цвет пикселя для этого порочна. Я в ужасе. Нет, сделайте следующее:

Используйте мыши x и y, чтобы определить, какой квадрат был нажат.

Используя то же правило, вы использовали для определения "конкретных" квадратов цвета синего: определите характер щелкнутого квадрата и предпримите соответствующие действия.

Так, как основным языком в этом курсе стал язык Java. Покажу пример того как работать с файлами изображений в Java, чтобы вам не пришлось долго искать как это делать. Для других языков руководства можно найти в Интернете.

Того, что здесь будет показано вполне достаточно чтобы выполнить все лабы.

Итак, поехали.

BufferedImage - класс который представляет изображение, которое хранится в памяти. С помощью этого класса мы будем обрабатывать изображения.

Класс импортируется с пакета java.awt.image:

Для открытия изображения будем использовать два класса: File, ImageIO:

В параметра конструктора класса File, мы должны указать путь до файла. Путь может быть абсолютным, либо относитьтельно корня проекта. Можно открывать картинки с расширением jpg, png, bmp.

После этого в объекта image у нас будет храниться вся картинка, которую мы открыли. Мы можем получить у этой картинки значение любого пикселя в виде цвета в RGB. Чтобы получить цвет какого либо пикселя нам нужен класс Color:

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

Тут также показано как получить значение каждого канала(красный, зеленый, синий) этого цвета. Значения каналов находятся в диапазоне [0, 255].

Значения этих каналов мы будем использовать для обработки изображений. После обработки мы обычно получаем новые значения для каждого канала. Чтобы объединить три канала в один цвет, создаем новый объект класса Color:

Затем, мы можем установить этот цвет как цвет какого-либо пикселя в изображение:

После того, как мы обработали изображение, его нужно сохранить обратно в файл:

Вместо "jpg" можно использовать также "png" или "bmp".

Давайте для примера я напишу приложение, которое будет превращать исходное изображение в черно-белое, используя то, что написано в статье.

Обычно для результирующего изображения создается новый объект типа BufferedImage такого же размера и типа, как исходное изображение:

Преобразователь в черное белое

Возьмем для примера любое цветное изображение. Например:


Поместим его в корень проекта.

Запустив эту программу мы получим новую картинку в той же папке где и исходная картинка. И она должна быть такой:

У меня есть шахматная доска, которая окрашивает определенные квадраты в синий цвет ( Color.BLUE ), и я хочу, чтобы программа знала, когда пользователь нажимает на синие квадраты. Я знаю координаты X и Y щелчка, но как мне это сделать? Другие создают изображение, а затем используют .getRGB() , но есть ли другой способ?

4 ответа

Вы не должны пытаться «получить цвет пикселя». Логика, которая обрабатывает шахматную доску, знает, что такое макет доски и какие пиксели она раскрашивает, поэтому она должна сохранять достаточно этой информации, чтобы она могла определить, на какой квадрат нажимают. ООП способ сделать это: определить класс Chessboard , цель которого - представить шахматную доску, нарисованную в окне (или компонент Swing, или что-то еще). Должен быть способ нарисовать шахматную доску; этот метод будет отслеживать диапазон пикселей, используемых для рисования каждого квадрата. (Поскольку каждый квадрат, вероятно, будет иметь одинаковую высоту и ширину, вам на самом деле не нужно хранить массив координат пикселей; достаточно будет сохранить только координату левого верхнего угла шахматной доски, и вы добавите что-то вроде width * columnNumber или height * rowNumber , чтобы получить координаты каждого квадрата.) Данные о том, где нарисованы квадраты, будут в полях элементов в Chessboard . Затем вы можете добавить метод, который спрашивает Chessboard «какой квадрат содержит пиксель в координатах X и Y?». Я упустил много деталей, но я думаю, что это лучший общий подход к этой проблеме.

Попытка использовать для этого цвет пикселя - извращение . Я в ужасе. Нет, сделай так:

Используйте мышь x и y, чтобы определить, какой квадрат был нажат.

Используя то же правило, которое вы использовали для определения «конкретных» квадратов, окрашенных в синий цвет: определите характер квадрата, на который щелкнули мышью, и выполните соответствующие действия.

Я бы сохранил массив Rectangle и выяснил, какой из них содержит точку при нажатии.

Chessboard Image

Да, есть другой способ получше! Поскольку у вас уже есть координаты x и y для щелчка , теперь вы можете проверить, где эти координаты попадают в сетку шахматной доски, и вы можете точно знать, в каком поле был нажат.

Поскольку квадраты на шахматной доске визуализируются вами в определенных координатах, я полагаю, что вы можете выполнить алгоритм для сравнения координат x и y с координатами квадрата , и у вас будет положение .

Если это не поможет, дайте мне более подробную информацию, возможно, я смогу вам помочь.

Робот является частью пакета java.awt. Робот-класс в основном используется для генерации собственных событий ввода системы в целях самостоятельных демонстраций, автоматизации тестирования и других приложений, в которых используется управление мышью и клавиатурой.
Класс Robot генерирует события, которые можно использовать для управления мышью, клавиатурой и для создания снимка экрана.
В этой статье мы обсудим, как получить цвет пикселя точки на экране, упомянутый пользователем.

Используемый метод:

В следующей программе мы распечатаем метку, которая будет содержать значения RGB введенного пикселя, а текст метки будет иметь цвет пикселя.

// Java-программа для получения цвета пикселя
// заданные координаты экрана

public class colour extends JFrame

// текстовое поле для получения координат x, y

static JTextField x, y;

static JButton b;

static JFrame f;

static JLabel l;

public static void main()

f = new JFrame( "pixel Color" );

// метка для отображения значения RGB

l = new JLabel( "no value" );

// создаем текстовое поле

x = new JTextField( 16 );

y = new JTextField( 16 );

b = new JButton( "find" );

// создаем объект класса

colour co = new colour();

JPanel p = new JPanel();

// добавляем текстовое поле и utton на панель

// установить размер кадра

f.setSize( 500 , 500 );

// если кнопка нажата

public void actionPerformed(ActionEvent e)

String s = e.getActionCommand();

if (s.equals( "find" ))

// получить пользовательский ввод позиции x и y

// пытаемся поймать блок для обработки исключений

// создаем объект класса робота

Robot r = new Robot();

// получить цвет пикселя

c = r.getPixelColor(xp, yp);

catch (Exception evt)

// установить значение RGB для метки

// и на передний план

l.setText( "Red plain">+ c.getRed() + ",

Green = " + c.getGreen() + " , Blue undefined spaces"> >


Выход :

Примечание: следующая программа может не работать в онлайн-компиляторе, используйте автономную среду разработки.

Читайте также: