Atitit.遍历图像像素点rgb java attilax总结

1. 遍历像素点 1

2. 提取一行 1

3. Rgb分量提取 2

4. 其他读取像素 3

5. --code 5

6. 参考 6

1. 遍历像素点

ImgxPicPhotoSplitor.java  atibrow prj

public static boolean containsWhiteLine(BufferedImage image) {

int heit=image.getHeight();

for(int i=0;i<heit;i++)

{

PixLine pl=getPixLine(image, i);

if(isWhiteLine(pl))

return true;

}

return false;

}

2. 提取一行

这 个过程的下一步是用 Java 2D 绘制图像。首先取得它的 Graphics2D 上下文。可以用方法 createGraphics2D() 或者调用 getGraphics() 做到这一点。在这个上下文上绘制将会自动修改图像的像素数据。在绘制完成后,可以用方法 getRGB(int startX, int startY, int w, int h, int rgbArray, int offset, int scansize) 容易且高效地提取图像的像素值。这个方法可以将图像中矩形区域的像素数据传输到一个整数数组中。getRGB() 方法的参数如下:



startX, startY 是要提取的区域左上角图像的坐标

w, h 是要提取的区域的宽度和高度

rgbArray 是接收像素值的整数数组

offset 是数组中接收第一个像素值的位置的索引。

scansize 是图像中相邻两行中具有相同行索引的像素的索引偏移值。如果这个值与要提取的区域的宽度相同,那么一行的第一个像素就会存储在数组中前一行最后一个像素后 面的索引位置。如果这个值大于提取区域的宽度,那么数组中,在一行最后和下一行开始之间就会有一些未使用的索引。

走势这个getRGB 好像有问题,不会调用,查找资料也不行。自豪嘎子写蓝。。

public static PixLine getPixLine(BufferedImage image, int lineIndex) {

int[] pxs=new int[image.getWidth()];

for(int i=0;i<image.getWidth();i++)

{

pxs[i]=image.getRGB(i, lineIndex);

}

PixLine pl=new PixLine();

pl.pxs=pxs;

return pl;

}

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

3. Rgb分量提取

多谢sqcl的回答,还有一个问题,就是用BufferedImage.getRGB()返回的像素值是32位颜色值,要自己移位才能得到RBGA的各个分量值,有没有什么类可以配合BufferedImage直接取出某个像素的某个独立的分量值?

1

2

3

4

5

int pixel = 0xFF0000;

Color pixelColor = new Color(pixel);

int r = pixelColor.getRed();

int g = pixelColor.getGreen();

int b = pixelColor.getBlue();

不过,这样效率太低。用移位最好。如果觉得不方便,可以自己写个Helper类简单封装一下。

我们知道通过bufferedimage对象的getRGB(x,y)方法可以返回指定坐标的颜色int值 他可以通过

int R =(rgb & 0xff0000 ) >> 16 ;

int G= (rgb & 0xff00 ) >> 8 ;

int B= (rgb & 0xff );

转换成三个颜色分量

4. 其他读取像素

从BufferedImage对象中读取像素数据的代码如下:

[java] view plaincopy

1. int type= image.getType();

2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )

3.      return (int [])image.getRaster().getDataElements(x, y, width, height, pixels );

4. else

, width );

[java] view plaincopy

1. int type= image.getType();

2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )

3.      return (int [])image.getRaster().getDataElements(x, y, width, height, pixels );

4. else

, width );

位的INT型数据,直接读写RGB值即可,否则需要从Raster

对象中读取。

往BufferedImage对象中写入像素数据同样遵守上面的规则。代码如下:

[java] view plaincopy

1. int type= image.getType();

2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )

3.    image.getRaster().setDataElements(x, y, width, height, pixels );

4. else

, width );

[java] view plaincopy

1. int type= image.getType();

2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )

3.    image.getRaster().setDataElements(x, y, width, height, pixels );

4. else

, width );

读取图像可能因为图像文件比较大,需要一定时间的等待才可以,Java Advance Image

Processor API提供了MediaTracker对象来跟踪图像的加载,同步其它操作,使用方法如下:

[java] view plaincopy

1. MediaTracker tracker = new MediaTracker(this); //初始化对象

); // 加入要跟踪的BufferedImage对象image_001

) // 等待10秒,让iamge_01图像加载

[java] view plaincopy

1. MediaTracker tracker = new MediaTracker(this); //初始化对象

); // 加入要跟踪的BufferedImage对象image_001

) // 等待10秒,让iamge_01图像加载

位int型数据cARGB中读取图像RGB颜色值的代码如下:

[java] view plaincopy

)& 0xff; //透明度通道

) &0xff;

) &0xff;

4. int blue = cARGB & 0xff;

[java] view plaincopy

)& 0xff; //透明度通道

) &0xff;

) &0xff;

4. int blue = cARGB & 0xff;

将RGB颜色值写入成一个INT型数据cRGB的代码如下:

[java] view plaincopy

) | blue;

[java] view plaincopy

) | blue;

创建一个BufferedImage对象的代码如下:

[java] view plaincopy

, BufferedImage.TYPE_INT_ARGB);

[java] view plaincopy

, BufferedImage.TYPE_INT_ARGB);

5. --code

ImgxPicPhotoSplitor.java  atibrow prj

6. 参考

Java数字图像处理基础知识 - 必读 - 流浪的鱼 - 博客频道 - CSDN.NET.htm

Java数字图像处理基础知识 - 必读 - 流浪的鱼 - 博客频道 - CSDN.NET.html

Atitit.遍历图像像素点rgb java attilax总结的更多相关文章

  1. Atitit 遍历文件夹算法 autoit attilax总结

    Atitit 遍历文件夹算法 autoit attilax总结 _FileListToArray Lists files and\or folders in a specified folder (S ...

  2. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

  3. Atitit.计算机图形图像图片处理原理与概论attilax总结

    Atitit.计算机图形图像图片处理原理与概论attilax总结 计算机图形1 图像处理.分析与机器视觉(第3版)1 数字图像处理(第六版)2 图像处理基础(第2版)2 发展沿革 1963年,伊凡·苏 ...

  4. Atitit swt 4.3 4.4 4.5 新特性java attilax总结

    Atitit swt 4.3 4.4 4.5 新特性java attilax总结 1. 4.5 Release - June 3, 20151 1.1. Older Releases1 2. SWT  ...

  5. Atitit 图像处理—图像形态学(膨胀与腐蚀)

    Atitit 图像处理-图像形态学(膨胀与腐蚀) 1.1. 膨胀与腐蚀1 1.2. 图像处理之二值膨胀及应用2 1.3. 测试原理,可以给一个5*5pic,测试膨胀算法5 1.4. Photoshop ...

  6. Atitit 视频编码与动画原理attilax总结

    Atitit 视频编码与动画原理attilax总结 1.1. 第一步:实现有损图像压缩和解压1 1.2. 接着将其量化,所谓量化,就是信号采样的步长,1 1.3. 第二步:实现宏块误差计算2 1.4. ...

  7. Atitit 项目语言的选择 java c#.net  php??

    Atitit 项目语言的选择 java c#.net  php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...

  8. Atitit 图像处理的心得与疑惑 attilax总结

    Atitit 图像处理的心得与疑惑 attilax总结 1.1. 使用类库好不好??还是自己实现算法1 1.2. 但是,如果遇到类库体积太大,后者没有合适的算法,那就只能自己开发算法了1 1.3. 如 ...

  9. Atitit.ide技术原理与实践attilax总结

    Atitit.ide技术原理与实践attilax总结 1.1. 语法着色1 1.2. 智能提示1 1.3. 类成员outline..func list1 1.4. 类型推导(type inferenc ...

随机推荐

  1. inno setup 脚本常用修改 转

    http://blog.sina.com.cn/s/blog_72c2eb350100y2sa.html 有人提及想更换安装界面的图片,其实方法很简单,只需要修改inno setup安装目录下的Wiz ...

  2. E-R图样例

    基本知识 基本的ER模型包含三类元素:实体.关系.属性. 实体(Entities):实体是首要的数据对象,常用于表示一个人.地方.某样事物或某个事件.一个特定的实体被称为实体实例(entity ins ...

  3. java通过UUID生成16位唯一订单号

    import java.util.UUID; public class T { public static String getOrderIdByUUId() { int machineId = 1; ...

  4. 从Cell的视图推出一个新的界面

    先写一个方法, 强制增加一个navigation的属性. 这样self就可以调出来navigation了 - (UINavigationController*)naviController { for ...

  5. iOS -- DES算法

    算法步骤: DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位(实际用到了56位,第8.16.24.32.40.48.56.64位是校验位, 使得每个密钥都有奇数个1),其 ...

  6. Linux自定义应用程序及其菜单图标

    在Linux桌面系统中,如果需要自己添加一个应用程序,如果是标准的bin, lib, share结构,我通常将其放在/usr/local/bin中.如果非这样,或者程序文件很多,易造成Linux系统目 ...

  7. AMBA AHB总线

    Advanced Microcontroller Bus Architecture, 即AMBA,是ARM公司提出的总线规范,被很多SoC设计所采用,常用的实现有AHB(Advanced High-P ...

  8. linux之misc及使用misc创建字符设备

    1:linux字符设备及udev 1.1字符设备 字符设备就是:一个一个字节来进行访问的,不能对字符设备进行随机读写.简单字符设备创建实例如下: #include <linux/module.h ...

  9. 使用MyEclipse 2014构建Maven项目的两种方法

    前提: MyEclipse已配置Maven,具体步骤见http://blog.csdn.net/haishu_zheng/article/details/51492491 方法一: 1 File--& ...

  10. Neo4J简单了解

    1.什么是Neo4j Neo4j是由java实现的开源NOSQL图数据库 数据库分为关系型和非关系型两种类型. 其中非关系型又分为Graph(图形),Document(文档),Cloumn Famil ...