Как получить цвет пикселя java
У меня есть шахматная доска, которая окрашивает конкретные квадраты в синий цвет ( 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 и выяснил, какой из них содержит точку при нажатии.
Да, есть еще и лучший способ! Поскольку у вас уже есть координаты щелчка 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 и выяснил, какой из них содержит точку при нажатии.
Да, есть другой способ получше! Поскольку у вас уже есть координаты 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"> >
Выход :
Примечание: следующая программа может не работать в онлайн-компиляторе, используйте автономную среду разработки.
Читайте также: