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); ...
随机推荐
- 由浅入深了解Thrift之微服务化应用架构
为什么选择微服务 一般情况下,业务应用我们都会采用模块化的分层式架构,所有的业务逻辑代码最终会在一个代码库中并统一部署,我们称这种应用架构为单体应用. 单体应用的问题是,全部开发人员会共享一个代码库, ...
- POJ 1988
#include<iostream> #include<stdio.h> #include<algorithm> #define MAXN 30005 using ...
- 来认识下less css
简介 感觉自己都out了,跟不上web时代的潮流了,前不久才刚接触这玩意,发觉lesscss在某些方面还挺有用的,说白了这东西就是一种动态的样式语言,语法类似于css,可以像java那样进行编译,生成 ...
- C# WinForm窗口最小化到系统托盘
* C# WinForm窗口最小化到系统托盘http://hi.baidu.com/kfxtgtqyapouyze/item/8ccfdcd5a174a7312a35c7c3 主要功能:(1).程序启 ...
- hdu2024C语言合法标识符
#include<iostream> #include<stdio.h> #include<math.h> #include<stdlib.h> #in ...
- java连接access数据库
完整代码: package odbcj; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prep ...
- P2P金融
P2P金融又叫P2P信贷,是互联网金融(ITFIN)的一种.意思是:点对点. P2P金融指不同的网络节点之间的小额借贷交易(一般指个人),需要借助电子商务专业网络平台帮助借贷双方确立借贷关系并完成相关 ...
- Box2d学习
Box2d 学习 . Testbed 项目: Testbed 是 Box2d 源码里包含的一个例子程序.Testbed 封装了界面显示.游戏循环等部分的代码.添加新的例子的时候,只需要关注与 Box ...
- android-HttpClient上传信息(包括图片)到服务端
需要下载apache公司下的HttpComponents项目下的HTTPCLIENT ----------地址为http://hc.apache.org/downloads.cgi 主要是用到了htt ...
- echo "hello" | nc -4t -w1 localhost 8001
TCP4: echo "hello" | nc -4t -w1 localhost 8001 UDP4: echo "hello" | nc -4u -w1 l ...