📜  增加或减少图像亮度的Java程序(1)

📅  最后修改于: 2023-12-03 15:08:09.409000             🧑  作者: Mango

在Java中增加或减少图像亮度的方法

在图像处理中,调整亮度是一种常见的操作。在Java中,可以使用一些库来实现这个功能。在本文中,将介绍如何使用Java内置的 BufferedImage 类来增加或减少图像亮度。

实现方法
  • 获取 BufferedImage 对象: 读取图像文件并创建 BufferedImage 对象。

    BufferedImage image = ImageIO.read(new File("path/to/image"));
    
  • 获取图像的 Raster 对象: 通过调用 BufferedImage 对象的 getRaster() 方法获取 Raster 对象。

    WritableRaster raster = image.getRaster();
    
  • 反转每个像素的 RGB 值: 对于每个像素,将其 RGB 值减去 255,即可将图像反转。这个过程也可以理解为减小亮度。

    int[] pixel = new int[4];
    for (int x = 0; x < raster.getWidth(); x++) {
        for (int y = 0; y < raster.getHeight(); y++) {
            pixel = raster.getPixel(x, y, pixel);
            pixel[0] = 255 - pixel[0];
            pixel[1] = 255 - pixel[1];
            pixel[2] = 255 - pixel[2];
            raster.setPixel(x, y, pixel);
        }
    }
    
  • 增加每个像素的 RGB 值: 对于每个像素,将其 RGB 值加上某个值,即可增加亮度。

    int[] pixel = new int[4];
    int brightness = 50;    // 增加亮度的值
    for (int x = 0; x < raster.getWidth(); x++) {
        for (int y = 0; y < raster.getHeight(); y++) {
            pixel = raster.getPixel(x, y, pixel);
            pixel[0] = Math.min(pixel[0] + brightness, 255);
            pixel[1] = Math.min(pixel[1] + brightness, 255);
            pixel[2] = Math.min(pixel[2] + brightness, 255);
            raster.setPixel(x, y, pixel);
        }
    }
    
  • 保存图像: 保存修改后的图像。

    ImageIO.write(image, "png", new File("path/to/saved/image.png"));
    
完整代码
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import javax.imageio.ImageIO;

public class ImageBrightness {

    public static void main(String[] args) throws Exception {

        // 读取图像文件并创建 BufferedImage 对象
        BufferedImage image = ImageIO.read(new File("path/to/image"));

        // 获取 Raster 对象
        WritableRaster raster = image.getRaster();

        // 反转每个像素的 RGB 值
        int[] pixel = new int[4];
        for (int x = 0; x < raster.getWidth(); x++) {
            for (int y = 0; y < raster.getHeight(); y++) {
                pixel = raster.getPixel(x, y, pixel);
                pixel[0] = 255 - pixel[0];
                pixel[1] = 255 - pixel[1];
                pixel[2] = 255 - pixel[2];
                raster.setPixel(x, y, pixel);
            }
        }

        // 增加每个像素的 RGB 值
        int brightness = 50;    // 增加亮度的值
        for (int x = 0; x < raster.getWidth(); x++) {
            for (int y = 0; y < raster.getHeight(); y++) {
                pixel = raster.getPixel(x, y, pixel);
                pixel[0] = Math.min(pixel[0] + brightness, 255);
                pixel[1] = Math.min(pixel[1] + brightness, 255);
                pixel[2] = Math.min(pixel[2] + brightness, 255);
                raster.setPixel(x, y, pixel);
            }
        }

        // 保存图像
        ImageIO.write(image, "png", new File("path/to/saved/image.png"));
    }
}

以上就是使用 BufferedImage 类来增加或减少图像亮度的方法。