因为做个游戏,需要一些图片资源,而获取到的图片资源都是jpg格式的,不是透明的,例如下面样式的:
为了取出其中的蓝光部分,透明化黑色背景,我开始了图片处理探索之路。
这篇文章的内容包含以下部分:
1.RGB是什么?
2.获取图片指定位置的RGB值
3.图片的灰化处理
4.修改图片的透明通道alpha
————————————————————————————————————————————————————————————————————
RGB是什么?
这里简单说一下,RGB即是red,green,blue的缩写,即红绿蓝三种颜色。可以通过这三种颜色按一定比例混合,可以形成任何颜色。
图片是由许许多多个像素组成,每一像素是一种颜色,有rgb按一定比例混合而成,平常rbg的取值范围为0~255,当red,green,blue的值都为0时,这个像素的颜色就为黑色,都为255时就是白色,当他们的值相同时,混合色变相为灰色。所以,一个像素点可以表示的颜色的个数为 255 * 255 * 255个,是非常多的。
这里不多做介绍,百科还是很详细的。
获取图片指定位置的RGB值
使用java获取一个像素的RGB,需要使用BufferedImage这个类,这个类提供修改图片数据的方法。
1 /**2 * 读取一张图片的RGB值3 */
4 public voidgetImagePixel(String image) {5
6 int[] rgb = new int[3];7 File file = newFile(image);8 BufferedImage bi = null;9 try{10 bi =ImageIO.read(file);11 } catch(IOException e) {12
13 e.printStackTrace();14 }15 int width =bi.getWidth();16 int height =bi.getHeight();17 int minX =bi.getMinX();18 int minY =bi.getMinY();19 for(int y = minY; y < height; y++) {20 for(int x = minX; x < width; x++) {21 //获取包含这个像素的颜色信息的值, int型
22 int pixel =bi.getRGB(x, y);23 //从pixel中获取rgb的值
24 rgb[0] = (pixel & 0xff0000) >> 16; //r
25 rgb[1] = (pixel & 0xff00) >> 8; //g
26 rgb[2] = (pixel & 0xff); //b