Atitit.遍历图像像素点rgb java attilax总结
Atitit.遍历图像像素点rgb java attilax总结
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总结的更多相关文章
- Atitit 遍历文件夹算法 autoit attilax总结
Atitit 遍历文件夹算法 autoit attilax总结 _FileListToArray Lists files and\or folders in a specified folder (S ...
- Atitit 图像处理 调用opencv 通过java api attilax总结
Atitit 图像处理 调用opencv 通过java api attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...
- Atitit.计算机图形图像图片处理原理与概论attilax总结
Atitit.计算机图形图像图片处理原理与概论attilax总结 计算机图形1 图像处理.分析与机器视觉(第3版)1 数字图像处理(第六版)2 图像处理基础(第2版)2 发展沿革 1963年,伊凡·苏 ...
- 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 ...
- Atitit 图像处理—图像形态学(膨胀与腐蚀)
Atitit 图像处理-图像形态学(膨胀与腐蚀) 1.1. 膨胀与腐蚀1 1.2. 图像处理之二值膨胀及应用2 1.3. 测试原理,可以给一个5*5pic,测试膨胀算法5 1.4. Photoshop ...
- Atitit 视频编码与动画原理attilax总结
Atitit 视频编码与动画原理attilax总结 1.1. 第一步:实现有损图像压缩和解压1 1.2. 接着将其量化,所谓量化,就是信号采样的步长,1 1.3. 第二步:实现宏块误差计算2 1.4. ...
- Atitit 项目语言的选择 java c#.net php??
Atitit 项目语言的选择 java c#.net php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...
- Atitit 图像处理的心得与疑惑 attilax总结
Atitit 图像处理的心得与疑惑 attilax总结 1.1. 使用类库好不好??还是自己实现算法1 1.2. 但是,如果遇到类库体积太大,后者没有合适的算法,那就只能自己开发算法了1 1.3. 如 ...
- Atitit.ide技术原理与实践attilax总结
Atitit.ide技术原理与实践attilax总结 1.1. 语法着色1 1.2. 智能提示1 1.3. 类成员outline..func list1 1.4. 类型推导(type inferenc ...
随机推荐
- Inno Setup自定义卸载文件名称的脚本
Inno Setup 支持在同一个目录中安装多个应用程序,所以根据安装的先后次序自动将卸载程序文件命名为 unins000.exe,unins001.exe,unins002.exe 等等.这是 IN ...
- JavaScript基础入门教程(五)
说明 本系列博客的第一篇已经说明了,要求阅读者需要具有其它语言的编程基础,所以关于组数的基础部分本篇博客将不再赘述,主要讲js中数组的特性. 创建数组 数组的创建主要有两种方法,一种是数组直接量,还有 ...
- Android记一次后台保活设计心得2018
首先我并不推荐也不喜欢手机应用通过各种手段后台保活,但是当产品经理确定一定以及肯定地提出了这个需求,活着应用有着必须常驻后台的理由,也就只有硬着头皮去与各个手机的后台管理机制做斗争了. 背景:因为开发 ...
- OpenCV支持向量机SVM对线性不可分数据的处理
支持向量机对线性不可分数据的处理 目标 本文档尝试解答如下问题: 在训练数据线性不可分时,如何定义此情形下支持向量机的最优化问题. 如何设置 CvSVMParams 中的参数来解决此类问题. 动机 为 ...
- 【Shell】linux中shell变量$#,$@,$0,$1,$2的含义解释 && set 关键字使用
linux中shell变量$#,$@,$0,$1,$2的含义解释 摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide.pdf linu ...
- PHP基础知识(一)
The Basics Comparison operators Comparison operators are an often overlooked aspect of PHP, which ca ...
- java中异常介绍
一.异常概述 异常处理已经成为衡量一门语言是否成熟的标准之一,目前的主流编程语言如C++.C#.Ruby.Python等,大都提供了异常处理机制.增加了异常处理机制后的程序有更好的容错性,更加健壮. ...
- java类与对象_成员变量和局部变量区别
成员变量和局部变量:1.成员变量:再类中定义,用来描述对象将要有什么.2.局部变量:在类的方法中定义,在方法中临时保存数据.区别:1.作用域不同: 局部:仅限于定义它的方法 成员:整个类中都是可见 ...
- Android布局基础
布局过程的含义 布局过程,就是程序在运行时利用布局文件的代码来计算出实际尺寸的过程. 布局过程的工作内容 两个阶段:测量阶段和布局阶段. 测量阶段:从上到下递归地调用每个 View 或者 ViewGr ...
- 算法笔记_107:蓝桥杯练习 算法提高 学霸的迷宫(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要 ...