什么是反色
反色又称补色,是与原色叠加可以变为白色的颜色,即用白色(RGB:255,255,255)减去原色的颜色。比如说红色(RGB:255,0,0)的反色是青色(0,255,255)。
我们可以通过如下公式计算到图像中RGB三种颜色通量的反色通量:
反色颜色通量 = 255 – 原始颜色通量
反色图片的效果
在现实生活中,我们照片底片的效果就是反色后的图像。
以下是图像反色的例子,第一张是源图片,第二张是反色后的图片
cat_humor2.jpg
anti_cat.jpg
JAVA中图片反色的处理方法
最简单的实现方式就是取出图像中个个像素的颜色,进行反色计算,在传回图像中,就实现了反色的效果。代码如下:
public static void antiColor(BufferedImage img) {
int width = img.getWidth();
int height = img.getHeight();
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int r = img.getRGB(x, y);
int red = (r >> 16) & 0x0ff;
int green = (r >> 8) & 0x0ff;
int blue = r & 0x0ff;
red = 255 - red;
green = 255 - green;
blue = 255 - blue;
r = (red << 16) | (green << 8) | blue;
img.setRGB(x, y, r);
}
}
}
以上代码中使用了BufferedImage类中的 getRGB和setRGB函数,这连个函数执行效率比较低,因此以上代码完成反色的速度比较慢。事实上Java图像处理包中给我们提供了另外一种方法——使用LookupOp图像处理类。
LookupOp实现从源到目标的查找操作。LookupTable 对象可能包含单个数组或多个数组。
LookupOp在实例化时需要传入LookupTable实例,当前LookupTable接口的两个实现类分别为ByteLookupTable与ShortLookupTable。在反色操作中我们使用ByteLookupTable实例,我们实现256个颜色梯度的反向表,就可以实现图像的反色功能。
使用LookupOp实现反色的代码如下:
public static BufferedImage antiColorLookup(BufferedImage image) {
byte reverse[] = new byte[256];
for (int j = 0; j < 256; j++) {
reverse[j] = (byte) (255 - j);
}
ByteLookupTable blut = new ByteLookupTable(0, reverse);
BufferedImage bimg = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
LookupOp lop = new LookupOp(blut, null);
lop.filter(image, bimg);
return bimg;
}
测试
使用以下代码进行测试,两种方式实现的反色效果完全相同。
方法一测试代码:
public static void main(String[] argv) throws IOException {
BufferedImage img = ImageIO.read(new File("cat.jpg"));
antiColor(img);
ImageIO.write(img, "jpeg", new File("anti-cat.jpg"));
}
方法二测试代码:
public static void main(String[] argv) throws IOException {
BufferedImage img = ImageIO.read(new File("cat.jpg"));
BufferedImage img2 = antiColorLookup(img);
ImageIO.write(img2, "jpeg", new File("anti-cat.jpg"));
}
作者:快乐小吧
链接:https://www.jianshu.com/p/6b2bbf95aee0
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
免责声明: | |
1、 | 资源售价只是赞助,不代表代码或者素材本身价格。收取费用仅维持本站的日常运营所需。 |
2、 | 本站资源来自用户上传,仅供用户学习使用,不得用于商业或者非法用途,违反国家法律一切后果用户自负。用于商业用途,请购买正版授权合法使用。 |
3、 | 本站资源不保证其完整性和安全性,下载后自行检测安全,在使用过程中出现的任何问题均与本站无关,本站不承担任何技术及版权问题,不对任何资源负法律责任。 |
4、 | 如有损害你的权益,请联系275551777@qq.com及时删除。 |