Để chuyển đổi hình ảnh âm bản sang dương bản:
- Đọc hình ảnh bằng ImageIO.read().
- Lấy chiều cao và chiều rộng.
- Dùng vòng lặp for lồng nhau duyệt qua từng pixel.
- Lấy giá trị pixel bằng getRGB().
- Để lấy từng giá trị từ pixel, cần dịch phải (right shift) đến vị trí bắt đầu của mỗi màu: 24 cho alpha, 16 cho đỏ, 8 cho xanh lá, 0 cho xanh dương, và thực hiện phép AND bitwise với 0xFF. Điều này lọc lấy 8 bit cuối và bỏ qua các bit còn lại.
- Tính giá trị đỏ, xanh lá, xanh dương mới bằng cách trừ chúng từ 255.
- Tái tạo pixel bằng cách dịch trái (left shift) ARGB về vị trí tương ứng và nối bằng OR bitwise.
- Gán giá trị pixel mới bằng setRGB().
Ví dụ
import java.io.File;
import java.io.IOException;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Negative2Color {
public static void main(String args[]) throws IOException {
// Đọc hình ảnh
File file = new File("D:\\Images\\cat_neg.jpg");
BufferedImage img = ImageIO.read(file);
for (int y = 0; y < img.getHeight(); y++) {
for (int x = 0; x < img.getWidth(); x++) {
// Lấy nội dung của một pixel
int p = img.getRGB(x, y);
// Lấy giá trị A R G B từ giá trị pixel
int a = (p >> 24) & 0xff;
int r = (p >> 16) & 0xff;
int g = (p >> 8) & 0xff;
int b = p & 0xff;
// Trừ RGB từ 255
r = 255 - r;
g = 255 - g;
b = 255 - b;
// Gán giá trị RGB mới
p = (a << 24) | (r << 16) | (g << 8) | b;
img.setRGB(x, y, p);
}
}
// Lưu hình ảnh đã chỉnh sửa
file = new File("D:\\Images\\negative_positive.jpg");
ImageIO.write(img, "jpg", file);
System.out.println("Hoàn tất...");
}
}
Ảnh đầu vào

Ảnh đầu ra
