У меня есть пользовательский класс RGB:Двумерный массив RGB для BufferedImage
class RGB {
int R, G, B;
}
я сделать двумерный массив объектов RGB, представляющие изображение:
RGB[][] image = new RGB[HEIGHT][WIDTH];
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
int pixel = bufferedImage.getRGB(i, j);
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff;
image[i][j] = new RGB(red, green, blue);
}
}
Теперь я хочу сделать некоторые изменения в этом массиве и сохранить его как BufferedImage. Основном, я могу сделать что-то вроде этого:
BufferedImage newImage = new BufferedImage(HEIGHT, WIDTH, BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
newImage.setRGB(i, j, VALUE);
}
}
Но мне нужно, чтобы преобразовать RGB полей каждого пикселя в одно целое значение, которое я не знаю, как это сделать. Или, может быть, есть более простой способ сделать это?
Почему не просто '((red & 0xff) << 16) | ((зеленый & 0xff) << 8) | (blue & 0xff) ' –
Вы использовали объект [DirectColorModel] (http://docs.oracle.com/javase/7/docs/api/java/awt/image/DirectColorModel.html) вместо того, чтобы использовать пользовательский класс RGB? Похоже, что это будет делать именно то, что вы сейчас делаете, плюс предоставить метод для получения значения int, которое вы ищете. – BlakeP
Это сделало эту работу, спасибо. –