Java 图片提取RGB数组 RGBOfCharMaps (整理)
package demo; /**
* Java 图片提取RGB数组 RGBOfCharMaps (整理)
* 声明:
* 和ImageCombining配合使用的工具,这里是提取图片的R、G、B生成数组,放入文件
* 中,给ImageCombining进行图片合成。
*
* 2016-1-2 深圳 南山平山村 曾剑锋
*/ import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter; public class RGBOfCharMaps{
/** 声明一个文件选择器引用 */
static JFileChooser jFileChooser = null;
/** 用于保存您选择的单个或者多个文件路径集合, 初始化为null */
static File filePath = null;
/** 保存图片的宽、高 */
static int imageWidth = 0;
static int imageHeight = 0;
/** 图像缓冲引用 */
static BufferedImage bufferedImage = null;
/**
* main()函数,完成任务如下:<br><ol>
* <li>对文件选择器进行初始化;<br>
* <li>保存转换好的文件;<br>
* <li>如果出现异常,给出提示信息。<br></ol>
*/
public static void main(String[] args) {
try {
filesSelectInit();
System.out.println(1);
if (getImageFile()) {
fileSave();
System.out.println(imageHeight);
System.out.println(imageWidth);
}; } catch (Exception e) {
//System.out.println("请选择后缀为png/PNG/jpeg/jpe/JPEG的文件");
System.out.println(e);
}
} private static boolean getImageFile() throws IOException {
if (jFileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
filePath = jFileChooser.getSelectedFile();
if (fileSuffixCheck(filePath)) {
bufferedImage = ImageIO.read(filePath);
imageWidth = bufferedImage.getWidth();
imageHeight = bufferedImage.getHeight();
return true;
}
}
return false;
} /**
* 文件后缀检查函数,完成任务如下:<br>
*        
* 采用正则表达式对文件进行匹配。<br>
*/
private static boolean fileSuffixCheck(File filePath) {
//使用正则表达式来防止选择目前不支持的文件,目前只支持png/PNG/jpeg/jpe/JPEG格式图片
Pattern pattern = Pattern.compile(".+[.][pPJj][nNpP][eEgGpP][gG]?");
Matcher matcher = pattern.matcher(filePath.getName());
if (matcher.matches() == false) {
return false;
}
return true;
}
/**
* 文件保存函数,完成任务如下:<br><ol>
* <li>设置一个文件保存的路径,这个路径可以自己修改;<br>
* <li>创建文件路径下的文件缓冲区;<br>
* <li>将charMaps中的字符写好文件中,忽略在上、下、左、右边界之外的部分,只将边界内的字符输出;<br>
* <li>每写完一行字符,进行换行;<br>
* <li>最后关闭文件缓冲区,如果不关闭,文件缓冲区内的字符可能不会写到文件中,请注意;<br>
* <li>提示完成以及提示文件路径。<br><ol>
*/
private static void fileSave() {
File[] saveFilePath = new File[3];
saveFilePath[0] = new File("/home/soft1/B.txt");
saveFilePath[1] = new File("/home/soft1/G.txt");
saveFilePath[2] = new File("/home/soft1/R.txt");
try {
SaveRGB(saveFilePath);
} catch (IOException e1) {
e1.printStackTrace();
}
} private static void SaveRGB(File[] saveFilePath) throws IOException {
String[] RGB = {"Blue","Green","Red"};
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < saveFilePath.length; i++) {
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(saveFilePath[i]));
singleColorSave(stringBuilder,bufferedOutputStream,i);
System.out.println("CharMaps已完成颜色"+RGB[i]+"工作,请到"+saveFilePath[i].getPath()+"中查看结果 ^_^\n");
}
}
private static void singleColorSave(StringBuilder stringBuilder,
BufferedOutputStream bufferedOutputStream, int i) throws IOException {
stringBuilder.append('{');
for (int row = 0; row < imageHeight; row++) {
stringBuilder.append('{');
for (int col = 0; col < imageWidth; col++) {
int rgb = bufferedImage.getRGB(col, row);
int singleColor = ((rgb >> (8*i))&0xff);
stringBuilder.append(singleColor);
stringBuilder.append(',');
}
stringBuilder.append('}');
if (row == imageHeight-1) {
stringBuilder.append('}');
}else {
stringBuilder.append(',');
}
byte[] byteWrite = (byte[])stringBuilder.toString().getBytes();
bufferedOutputStream.write(byteWrite, 0, stringBuilder.length());
bufferedOutputStream.write('\n');
bufferedOutputStream.flush();
stringBuilder.delete(0, stringBuilder.length());
}
bufferedOutputStream.close();
} /**
* 文件选择对话框初始化函数,Init是初始化的英文单词缩写,完成任务如下:<br><ol>
* <li>提示欢迎使用CharMaps;<br>
* <li>创建文件选择对话框;<br>
* <li>创建文件选择过滤器;<br>
* <li>将文件选择过滤器添加进入文件对话框,还句话说是:使文件选择过滤器有效;<br>
* <li>将文件选择对话框设置为可以多选;<br>
* <li>提示完成初始化。<br></ol>
*/
private static void filesSelectInit() {
System.out.println("\n\t欢迎使用RGBOfCharMaps");
jFileChooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"Images", "jpg", "png","PNG","JPG","jpe","JPE");
jFileChooser.setFileFilter(filter);
System.out.println("1、完成文件选择初始化");
}
}
RGBOfCharMaps
Java 图片提取RGB数组 RGBOfCharMaps (整理)的更多相关文章
- Java 图片转换为字符图 CharMaps (整理)
/* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...
- Java 图片与byte数组互相转换
//图片到byte数组 public byte[] image2byte(String path){ byte[] data = null; FileImageInputStream input = ...
- Java RGB数组图像合成 ImageCombining (整理)
/** * Java RGB数组图像合成 ImageCombinning (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * 注意事项: * 1.本程序为java程序,同时感谢您花费 ...
- opencv java api提取图片sift特征
opencv在2.4.4版本以后添加了对java的最新支持,可以利用java api了.下面就是我利用opencv的java api 提取图片的sift特征. import org.opencv.co ...
- 如何使用MATLAB对图片的RGB三种颜色进行提取
参考: https://jingyan.baidu.com/article/456c463b41de5f0a5831448e.html matlab在图像处理方面,具有很强大的应用.下面将分享如何使用 ...
- Ruby数组方法整理
数组方法整理 方法列表: all().any().none()和one():测试数组中的所有或部分元素是否满足给定条件.条件可以是语句块中决定,也可以是参数决定 append():等价于push() ...
- Java图片上查找图片算法
之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就是在屏幕范围查找给定的一张图片,返回查找到的坐标位置. 现在,Java来实现这个函数类似的功能. 算法描述: 屏幕截图,得到图A,(查找 ...
- Atitit.java图片图像处理attilax总结
Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...
- Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与
Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...
随机推荐
- (转)Learning to Rank for IR的评价指标—MAP,NDCG,MRR
转自:http://www.cnblogs.com/eyeszjwang/articles/2368087.html MAP(Mean Average Precision):单个主题的平均准确率是每篇 ...
- css display visibility
当visibility被设置为"hidden"的时候,元素虽然被隐藏了,但它仍然占据它原来所在的位置.注意,当元素被隐藏之后,就不能再接收到其它事件了. display属性就有一点 ...
- 【C语言】二维数组做形参
二维数组有两种形式: ①在栈上: int a[4][4] = {...}; ②在堆堆上: int ** a = new int *[4]; for ...
- Linux网络编程3——socket
宏定义 首先介绍两个宏定义,看如下代码 代码1 /************************************************************************* & ...
- x86虚拟地址到物理地址的映射学习
这里只谈分页管理的机制,也是目前最重要的内存管理机制. 最初的设计想法: 结构图如下: 页的尺寸是4KB,虚拟地址的前20位用于指定一个物理页,后12位用于访问页内偏移. 页表项的结构: 各个位的含义 ...
- ios开发--苹果企业开发者账号
苹果企业开发者账号添加多个开发成(组)员的方法 如果你们公司有一个帐号,你是管理员,加入组员的办法如下: 第一步:进入Member Center页 第二步:点击people,会见到 第三步:点击Inv ...
- SRM 620 DIV1 L2
题意:有n个等长的string(设string的长度为m),string中的字符从'A'到'Z',容许对m列执行稳定的排序操作,问说是否能通过这m种操作将这n个string调整成对应的顺序. 题解: ...
- hive0.13.1配置hwi
1 寻找hive-hwi-*.war文件 不清楚什么原因在hive0.13.1版本中的lib文件夹下没有hive-hwi-0.13.0.war,也就是没有*.war的文件. 所以用hive 0.12. ...
- 关于MySQL
DBMS - 数据库管理系统(Database Management System) RDBMS - 关系数据库管理系统(Relational Database Management System) ...
- 脉络清晰的BP神经网络讲解,赞
学习是神经网络一种最重要也最令人注目的特点.在神经网络的发展进程中,学习算法的研究有着十分重要的地位.目前,人们所提出的神经网络模型都是和学习算 法相应的.所以,有时人们并不去祈求对模型和算法进行严格 ...