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

5.     return image.getRGB( x, y, width, height, pixels, 0, 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

5.     return image.getRGB( x, y, width, height, pixels, 0, width );

首先获取图像类型,如果不是32位的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

5.    image.setRGB(x, y, width, height, pixels, 0, 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

5.    image.setRGB(x, y, width, height, pixels, 0, width );

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

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

[java] view plaincopy

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

2. tracker.addImage(image_01, 1); // 加入要跟踪的BufferedImage对象image_001

3. tracker.waitForID(1, 10000) // 等待10秒,让iamge_01图像加载

[java] view plaincopy

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

2. tracker.addImage(image_01, 1); // 加入要跟踪的BufferedImage对象image_001

3. tracker.waitForID(1, 10000) // 等待10秒,让iamge_01图像加载

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

[java] view plaincopy

1. int alpha = (cARGB >> 24)& 0xff; //透明度通道

2. int red = (cARGB >> 16) &0xff;

3. int green = (cARGB >> 8) &0xff;

4. int blue = cARGB & 0xff;

[java] view plaincopy

1. int alpha = (cARGB >> 24)& 0xff; //透明度通道

2. int red = (cARGB >> 16) &0xff;

3. int green = (cARGB >> 8) &0xff;

4. int blue = cARGB & 0xff;

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

[java] view plaincopy

1. cRGB = (alpha << 24) | (red<< 16) | (green << 8) | blue;

[java] view plaincopy

1. cRGB = (alpha << 24) | (red<< 16) | (green << 8) | blue;

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

[java] view plaincopy

1. BufferedImage image = newBufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);

[java] view plaincopy

1. BufferedImage image = newBufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);

5. --code

ImgxPicPhotoSplitor.java  atibrow prj

6. 参考

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

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

Atitit.遍历图像像素点rgb java attilax总结相关推荐

  1. opencv 几种不同遍历图像像素的方法详解

    简述 我们在图像处理时经常会用到遍历图像像素点的方式,同样是遍历图像像素点,共有很多中方法可以做到:在这些方法中,有相对高效的,也有低效的:不是说低效的方法就不好,不同场景使用不同方法. 方法 下面将 ...

  2. bmp 像素点 php,读取BMP图像每一像素点RGB数据 | 学步园

    对于24位bmp图片,每一个像素点存放着此点的RGB值.首先定义一个结构体,包含红(red).绿(green).蓝(blue)这三个字段,如下: //像素颜色值 typedef struct tagP ...

  3. 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 4.4. ...

  4. java 三原色_opencv3_java 提取图像的RGB三原色分割图像Split Core.split

    提取图像的RGB三原色分割图像Split Core.split package opencv_java_demo; import java.util.List; import org.opencv.c ...

  5. 读取BMP图像每一像素点RGB数据

    对于24位bmp图片,每一个像素点存放着此点的RGB值.首先定义一个结构体,包含红(red).绿(green).蓝(blue)这三个字段,如下: [html] view plaincopy //像素颜 ...

  6. OpenCV遍历图像性能比较、利用查找表

    原文:http://blog.csdn.net/chenjiazhou12/article/details/21052849 对于如何扫描图像的方法实在是太多了,在浏览一些资料的时候也找到了一些好的方 ...

  7. 一条python语句实现BGR图像转RGB图像

    为什么要将BGR图像转RGB图像,一个典型的应用场景是opencv的颜色通道顺序为[B,G,R],而matplotlib的颜色通道顺序为[R,G,B].所以当用opncv读取的图像最终用matplot ...

  8. atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97

    atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...

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

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

最新文章

  1. 影像组学视频学习笔记[44(End)]-带95%置信区间的折线图、Li‘s have a solution and plan.
  2. 将万亿以下的阿拉伯数字转为中文金额
  3. python logging模块的作用及应用场景_Python常用模块功能简介(三)logging
  4. 分布式文件系统FastDFS设计原理
  5. unity3D-Gear VR字体由小变大效果
  6. (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)
  7. vscode好用的扩展及常用的快捷键
  8. CentOS6.5 调整 /home 挂载 分区大小
  9. 怎么关闭计算机硬件加速,win7关闭硬件加速的方法,手把手抓图教你如何关闭硬件加速功能...
  10. 什么耳机适合华为手机?通话质量好的蓝牙耳机
  11. 使用Excel数据分析工具进行多元回归分析的方法
  12. 写文档时经常用到的图标(对勾、叉号)
  13. 移动端实现图标拖拽效果
  14. 创造与魔法怎么自建服务器,创造与魔法自建服攻略大全_创造与魔法自建服建造方法、福利_玩游戏网...
  15. 解决Skype一台电脑登陆多个账号的问题
  16. python画图解决Times New Roman自带粗体问题
  17. (转载)(官方)UE4--图像编程----着色器开发----HLSL 交叉编译器
  18. 天然肠衣数学建模matlab代码,数学建模天然肠衣搭配问题.doc
  19. 12864图片显示操作
  20. [python] 圆形嵌套图Circular Packing

热门文章

  1. 最小生成树——克鲁斯卡尔算法
  2. mysql基本介绍和优化技巧
  3. markdown常见问题
  4. 防止NSTimer和调用对象之间的循环引用
  5. 71道经典Android面试题和答案
  6. [原]逆向iOS SDK -- _UIImageAtPath 的实现(SDK 5.1)
  7. Bjarne Stroustrup语录[C++经验]
  8. typedef的四个用途和两个陷阱
  9. 故宫首开夜场门票秒空官网崩溃:7本书让网站挺住
  10. css 解析 开源库_干货 | python库大全,全面高效