Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将BuffereImage相乘以设置亮度是否正确?_Java_Bufferedimage_Brightness - Fatal编程技术网

Java 将BuffereImage相乘以设置亮度是否正确?

Java 将BuffereImage相乘以设置亮度是否正确?,java,bufferedimage,brightness,Java,Bufferedimage,Brightness,这是一个问题,我是否使用正确的方法。通过正确的方法,我的意思是,有没有一种更有效的方法来实现这一点 我使用1个图像源: String imgurl = "imgreadertest8.png"; BufferedImage loadedimage = ImageIO.read(getClass().getResource(imgurl)); BufferedImage image = ImageIO.read(getClass().getResource(imgurl)); 我使用pa

这是一个问题,我是否使用正确的方法。通过正确的方法,我的意思是,有没有一种更有效的方法来实现这一点

我使用1个图像源:

String imgurl = "imgreadertest8.png";
  BufferedImage loadedimage = ImageIO.read(getClass().getResource(imgurl));
  BufferedImage image = ImageIO.read(getClass().getResource(imgurl));
我使用paint()方法绘制图像。但有时我需要设置亮度:

public void setBrightness(float brightness)
{
    RescaleOp rescaleOp = new RescaleOp(brightness, 15, null);
    rescaleOp.filter(loadedimage, image);
}
所以我读了同样的图片,两次。一个是有一个“final”buffereImage(它不是真正的final…但我不能在这个上下文中使用final,因为它需要在构造函数外部使用(这里你看不到,但它是))作为模板,另一个是用来编辑和绘制的

更多信息:在尝试这种方法之前,我做了以下操作:

String imgurl = "imgreadertest8.png";
  BufferedImage loadedimage = ImageIO.read(getClass().getResource(imgurl));
  BufferedImage image = loadedimage;
但当我编辑图像时,它也会编辑LoadeImage。几乎是因为它们是同一个物体


所以。。。是否有其他方法可以设置此图像的亮度,而无需加载同一图像两次?

以下方法将复制图像

public static BufferedImage copy(BufferedImage img) {
    Hashtable<?,?> properties = new Hashtable<>();
    for (String propertyName : img.getPropertyNames()) {
        properties.put(propertyName, img.getProperty(propertyName));
    }
    return new BufferedImage(img.getColorModel(),
            img.copyData(null),
            img.isAlphaPremultiplied(), properties);

}
公共静态BuffereImage副本(BuffereImage img){
Hashtable属性=新的Hashtable();
对于(字符串propertyName:img.getPropertyNames()){
properties.put(propertyName,img.getProperty(propertyName));
}
返回新的BuffereImage(img.getColorModel(),
img.copyData(空),
img.isAlphaPremultiplied(),属性);
}
同样的事情也可以通过创建一个空图像,在它的
createGraphics
中绘制(不要忘记dispose)来实现,速度较慢,但更简单。如果您需要图形2D来处理图像,这可能也是一个选项