StdPicture
Скачать StdPicture.java
Скачать Picture.java
StdPicture - библиотека для работы с пикселями изображения в моделях RGB и ARGB.
Класс StdPicture предоставляет статические методы для изменения отдельных пикселей изображения в цветовой модели RGB. Можно либо создать пустое изображение заданного размера, либо прочитать изображение из поддерживаемого формата файла (обычно JPEG, PNG, GIF, TIFF, BMP). Также есть методы для показа изображения в окне и сохранения в файл.
Использование в курсе.
Класс StdPicture предназначен для раннего этапа курса, до изучения объектов. Класс Picture — объектно-ориентированная версия, которая позволяет работать с несколькими изображениями одновременно.
Начало работы.
Чтобы использовать этот класс, у вас должны быть StdPicture.java и Picture.java: StdPicture зависит от Picture.
Скачайте StdPicture.java и Picture.java, затем поместите их в рабочую директорию проекта.
Теперь скопируйте в редактор следующую короткую программу:
public class TestStdPicture {
public static void main(String[] args) {
StdPicture.read("https://book.learncs.ru/books/programming/java-projects/images/mandrill.jpg");
StdPicture.show();
}
}
Если скомпилировать и запустить программу, должно появиться изображение мандрила в отдельном окне.

Устройство изображения.
Изображение — это сетка пикселей (pixel) размера width x height; пиксель (0, 0) расположен в левом верхнем углу. pixel (col, row) — пиксель с координатами столбца col и строки row. Цвет пикселя задается моделью RGB: уровни красного (R), зеленого (G) и синего (B) — целые числа от 0 до 255.

Инициализация изображения.
Для инициализации используются методы:
read(String filename)init(int width, int height)
Первый метод читает изображение из файла поддерживаемого формата (обычно JPEG, PNG, GIF, TIFF, BMP) и инициализирует текущее изображение этими данными. Второй метод создает изображение размера width x height, где каждый пиксель изначально черный.
Получение и изменение цветов отдельных пикселей.
Методы для чтения RGB-компонент пикселя:
getRed(int col, int row)getGreen(int col, int row)getBlue(int col, int row)setRGB(int col, int row, int r, int g, int b)
Первые три метода возвращают красную, зеленую и синюю компоненты пикселя (col, row). Каждая компонента — целое число от 0 до 255, где 0 означает отсутствие компоненты, а 255 — максимальную интенсивность. Последний метод устанавливает компоненты r, g, b для пикселя (col, row).
Обход всех пикселей.
Типичная операция обработки изображений — пройти по всем пикселям. Ниже пример перевода цветного изображения в оттенки серого по формуле NTSC:
Если r, g, b равны, цвет является оттенком серого.
StdPicture.read("https://book.learncs.ru/books/programming/java-projects/images/mandrill.jpg");
for (int col = 0; col < StdPicture.width(); col++) {
for (int row = 0; row < StdPicture.height(); row++) {
int r = StdPicture.getRed(col, row);
int g = StdPicture.getGreen(col, row);
int b = StdPicture.getBlue(col, row);
int y = (int) (Math.round(0.299*r + 0.587*g + 0.114*b));
StdPicture.setRGB(col, row, y, y, y);
}
}
StdPicture.show();

На рисунке показан результат работы кода: цветное изображение переведено в оттенки серого, и каждый пиксель имеет одинаковые значения R, G и B (равные y).
Прозрачность.
Класс StdPicture поддерживает прозрачные изображения через модель ARGB. Полезные методы:
getAlpha(int col, int row)setARGB(int col, int row, int a, int r, int g, int b)
Первый метод возвращает альфа-компоненту пикселя (col, row). Второй задает альфа-, красную, зеленую и синюю компоненты этого пикселя. Значение альфа-канала определяет прозрачность: 0 — полностью прозрачный, 255 — полностью непрозрачный. Если прозрачность явно не задавать, используется значение 255.
Сохранение файлов.
StdPicture поддерживает запись изображения в поддерживаемые форматы (обычно JPEG, PNG, GIF, TIFF, BMP).
save(String filename)
Изображение также можно сохранить вручную через меню окна: File -> Save.
Форматы файлов.
StdPicture поддерживает чтение и запись всех форматов, которые поддерживает javax.imageio (обычно JPEG, PNG, GIF, TIFF, BMP). Соответствующие расширения: .jpg, .png, .gif, .tif, .bmp. Форматы JPEG и BMP не поддерживают прозрачность.
Использование памяти.
Изображение размера \(W \times H\) использует примерно \(4 \times W \times H\) байт памяти, так как цвет каждого пикселя кодируется 32-битным int.
Полное API StdPicture на английском
По материалам:
Robert Sedgewick, Kevin Wayne. Computer Science: An Interdisciplinary Approach. Princeton University.