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. 修改activeMQ端口号

    原文:http://jingyan.baidu.com/article/3ea51489fba6a152e61bbacc.html 修改TCP 61616端口 打开您的mq安装目录 请看下图 如下图所 ...

  2. 【SQL Sever】安装过程

    下载了sql sever,如下: 首先把iso解压,如下: 1.点击 2.打开页面后 3. 接下来直接下一步下一步 完成之后,需要重启计算机才能使用! 4. 重启之后,进入配置工具 将所有的端口号更改 ...

  3. wince5.0 plat form builder下载

    学习嵌入式开发的朋友都知道,嵌入式开发主要用到2个软件一个是Platform Builder for Windows CE 5.0一个是VS.NET2005,其中VS.NET2005网上很容易下载,现 ...

  4. WebLogic Operator初试

    时隔几个月,重拾WebLogic 为什么是WebLogic 简单说一句就是,因为WebLogic在中间件里面够复杂. Server不同的角色 AdminServer和Managed Server之间的 ...

  5. win7注册表损坏的修复方法

    win7注册表损坏的修复方法 发布时间:2013-07-19 09:31发布者:系统城-小薇浏览数:3129 注册表是window系统中的一个非常重要的数据库,用于存储电脑系统和应用程序的设置信息,我 ...

  6. OCP试题解析之053-17 CONFIGURE CONTROLFILE AUTOBACKUP ON

    17.You configure AUTOBACKUP to ON in an RMAN session. When will RMAN back up the control file? (Choo ...

  7. transport.js报hasOwnProperty对象不支持此属性

    ECShop transport.js错误 这次出现的问题是transport.js在IE下提示对象不支持该用法.出现错误位置为608行的下面的代码: if(this.hasOwnProperty(k ...

  8. DevExpress TreeList使用

    using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; us ...

  9. TestNG测试报告美化

    因TestNG自带的测试报告不太美观,可以使用testng-xslt进行美化 1.下载testng-xslt包 2.把/src/main/resources/TestNG-results.xsl放到你 ...

  10. 常用命令(过滤、管道、重定向、ping 命令、netstat 命令、ps命令)

    常用命令 过滤 过滤出 /etc/passwd 文件中包含 root 的记录 grep 'root' /etc/passwd 递归地过滤出 /var/log/ 目录中包含 linux 的记录 grep ...