java BufferImage类的使用
来源:互联网 发布:数据访问层框架 编辑:程序博客网 时间:2024/05/20 06:55
- BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filePath));
- BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filePath));
使图片变灰
使图片变灰有两种方法,一种是使用现成的类,一种是自己对每个像素进行操纵。
使用现成的类ColorConvertOp,它的作用就是将一个颜色模式的图片转换为另一个颜色模式的图片。颜色模式是诸如RGB颜色模式、灰度颜色模式等决定图片色彩的东西,比如一副RGB颜色模式的图片是彩色,但我们把它复制到一个灰度颜色模式的图片上时,图片就成灰色的了。
- public BufferedImage getGrayPicture(BufferedImage originalImage)
- {
- BufferedImage grayPicture;
- int imageWidth = originalImage.getWidth();
- int imageHeight = originalImage.getHeight();
- grayPicture = new BufferedImage(imageWidth, imageHeight,
- BufferedImage.TYPE_3BYTE_BGR);
- ColorConvertOp cco = new ColorConvertOp(ColorSpace
- .getInstance(ColorSpace.CS_GRAY), null);
- cco.filter(originalImage, grayPicture);
- return grayPicture;
- }
- public BufferedImage getGrayPicture(BufferedImage originalImage)
- {
- BufferedImage grayPicture;
- int imageWidth = originalImage.getWidth();
- int imageHeight = originalImage.getHeight();
- grayPicture = new BufferedImage(imageWidth, imageHeight,
- BufferedImage.TYPE_3BYTE_BGR);
- ColorConvertOp cco = new ColorConvertOp(ColorSpace
- .getInstance(ColorSpace.CS_GRAY), null);
- cco.filter(originalImage, grayPicture);
- return grayPicture;
- }
自己操纵图片的像素实现图片变灰。图片变灰的通用算法:取出某个像素的r、g、b值,然后重新计算r、g、b值,计算公式为r=r*0.3+g*0.59+b*0.11,g=r,b=g,最后将该rgb值重新写回像素。
可以用下面三个函数
分别取出r、g、b。ColorModel是一个用来将图片某点的rgb值转化为r、g、b以及alpha等值的类。而bufferedImage本身只能取出一个完整的rgb值,无法分离单独的r、g、b等值。
bufferedImage.getColorModel().getRed(int pixel)
bufferedImage.getColorModel().getGreen(int pixel)
bufferedImage.getColorModel().getBlue(int pixel)
但是这里要注意的是使用这种方法取出r、g、b时,有可能弹出一个错误信息——IllegalArgumentException: More than one component per pixel。通常当你使用这个方法操纵jpg等格式的图片时会报这个错误。这是因为某些图片如JPG格式的不支持使用单个int值的像素读取rgb等信息,应该使用Object类型的像素值进行读取,也就是bufferedImage.getColorModel().getGreen(Object indata)
- public BufferedImage getGrayPicture(BufferedImage originalImage)
- {
- int green=0,red=0,blue=0,rgb;
- int imageWidth = originalImage.getWidth();
- int imageHeight = originalImage.getHeight();
- for(int i = originalImage.getMinX();i < imageWidth ;i++)
- {
- for(int j = originalImage.getMinY();j < imageHeight ;j++)
- {
- //图片的像素点其实是个矩阵,这里利用两个for循环来对每个像素进行操作
- Object data = routeImage.getRaster().getDataElements(i, j, null);//获取该点像素,并以object类型表示
- red = routeImage.getColorModel().getRed(data);
- blue = routeImage.getColorModel().getBlue(data);
- green = routeImage.getColorModel().getGreen(data);
- red = (red*3 + green*6 + blue*1)/10;
- green = red;
- blue = green;
- /*
- 这里将r、g、b再转化为rgb值,因为bufferedImage没有提供设置单个颜色的方法,只能设置rgb。rgb最大为8388608,当大于这个值时,应减去255*255*255即16777216
- */
- rgb = (red*256 + green)*256+blue;
- if(rgb>8388608)
- {
- rgb = rgb - 16777216;
- }
- //将rgb值写回图片
- routeImage.setRGB(i, j, rgb);
- }
- }
- return originalImage;
- }
- java BufferImage类的使用
- java BufferImage类的使用
- 【java】BufferImage
- java的bufferImage异或加密jpg文件的一个有趣现象
- Image BufferImage 和 ImageIcon的区别
- BufferImage 与imagezh整理归纳
- Image、BufferImage和ImageIcon关系及用法
- Image、BufferImage和ImageIcon关系及用法
- java 类的使用
- Java类的使用
- jfreechart---paint(Graphics g) :g.drawImage(bufferImage, 0, 0, null);
- bufferimage中的图像怎么绘制在jpanel中那
- 读取jar包中图片文件,并转换为BufferImage
- 常用JAVA类的使用
- 常用JAVA类的使用
- java Collection类的使用
- java集合类的使用
- JAVA定时器类的使用
- WWDC 2015上那些酷酷的新内容(二)
- 理解弱引用
- Linux下C语言的调试
- Spring中javaMail通过SMTP发送邮件
- 投影仪矫正
- java BufferImage类的使用
- 读取配置文件 + 修改配置文件
- 百度电话面试PHP职位
- Hive 合并输入输出文件
- Spine制作骨骼动画的视频教程-spine,spine,spine
- SAT阅读备考的考生心得
- 尝试进行 apt update时遇到如下错误:
- listView的divider和dividerHeight属性
- JScript VS JavaScript