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); ...
随机推荐
- POJ 1939
#include<iostream> #include<iomanip> #define MAXN 10000 using namespace std; ]; int main ...
- 离开csdn来到blog园
csdn里没有限制阅读访问的功能,所以我选择来到cnblog 但是不得不说,cnblog做的界面很丑,我个人很不喜欢,但是没办法
- lintcode:打劫房屋II
题目 打劫房屋II 在上次打劫完一条街道之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子围成了一个圈,这就意味着第一间房子和最后一间房子是挨着的.每个房子都存放着特定金额的钱.你面临的唯一约 ...
- grep是模糊匹配
1. 我:我用的ps -nat|grep -i "80"|wc -l命令 我:解释详细点,,龙哥,对于我这种菜鸟:也是模糊匹配 :你用 grep "80" 会匹 ...
- Haproxy安装及配置
1.安装 # wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz # tar zcvf haproxy-1.3.20.t ...
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-006类型转换器( @Converter(autoApply = true) 、type="converter:qualified.ConverterName" )
一.结构 二.代码 1. package org.jpwh.model.advanced; import java.io.Serializable; import java.math.BigDecim ...
- php ++a和a++
<?php$a=$b=5;$a+$b=$a++-++$b;echo $b;?> 输出-1
- Windows Services Windows Services的操作
Windows Services的操作 一.服务的创建: 1.新建项目——Windows服务 2.这是每个人都会犯的错误,新建一个项目后,都会按F5(运行),就会出现如下错误: 3.安装服务有很多种方 ...
- jdbc框架 commons-dbutils的使用
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序 ...
- flex 4 写皮肤
皮肤容器:s:SparkSkin 主机组件: [HostComponent("spark.components.Panel")] 绘制: <s:Group left=&qu ...