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>
* &nbsp &nbsp &nbsp &nbsp
* 采用正则表达式对文件进行匹配。<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 (整理)的更多相关文章

  1. Java 图片转换为字符图 CharMaps (整理)

      /* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...

  2. Java 图片与byte数组互相转换

    //图片到byte数组 public byte[] image2byte(String path){ byte[] data = null; FileImageInputStream input = ...

  3. Java RGB数组图像合成 ImageCombining (整理)

    /** * Java RGB数组图像合成 ImageCombinning (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * 注意事项: * 1.本程序为java程序,同时感谢您花费 ...

  4. opencv java api提取图片sift特征

    opencv在2.4.4版本以后添加了对java的最新支持,可以利用java api了.下面就是我利用opencv的java api 提取图片的sift特征. import org.opencv.co ...

  5. 如何使用MATLAB对图片的RGB三种颜色进行提取

    参考: https://jingyan.baidu.com/article/456c463b41de5f0a5831448e.html matlab在图像处理方面,具有很强大的应用.下面将分享如何使用 ...

  6. Ruby数组方法整理

    数组方法整理 方法列表: all().any().none()和one():测试数组中的所有或部分元素是否满足给定条件.条件可以是语句块中决定,也可以是参数决定 append():等价于push() ...

  7. Java图片上查找图片算法

    之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就是在屏幕范围查找给定的一张图片,返回查找到的坐标位置. 现在,Java来实现这个函数类似的功能. 算法描述: 屏幕截图,得到图A,(查找 ...

  8. Atitit.java图片图像处理attilax总结

    Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...

  9. 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); ...

随机推荐

  1. DELPHI 获取本月 的第一天 和 最后一天

    USER :DateUtils 使用 StartOfTheMonth 和 EndOfTheMonth 函数获取即可:   procedure TForm1.btn1Click(Sender: TObj ...

  2. HDU3487 Play With Chains(Splay)

    很裸的Splay,抄一下CLJ的模板当作复习,debug了一个下午,收获是终于搞懂了以前看这个模板里不懂的内容.以前用这个模板的时候没有看懂为什么get函数返回的前缀要加个引用,经过一下午的debug ...

  3. POJ 2674

    Linear world Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 2448   Accepted: 564 Descr ...

  4. java 时间戳与日期字符串相互转换

    /** * 时间戳转换成日期格式字符串 * @param seconds 精确到秒的字符串 * @param formatStr * @return */ public static String t ...

  5. RSS FEED的应用

    参考:http://inezha.com/help/feedrss 今天工作中遇到了一个知识是RSS FEED.当时觉得很奇怪,我们要这个干嘛用?RSS Feed就是一个xml文件.里面不包含数据,但 ...

  6. Android:Android SDK Manager

    Android SDK Manager 包含:Tools(构建工具.编译工具.平台工具等) .各种版本SDK.Extras(安卓知识库和辅助工具) 每个SDK至少包含:1.SDK Plaform 2. ...

  7. swift:入门知识之泛型

    在尖括号里写一个名字来创建一个泛型函数或者类型 例如<T>.<Type> 可以创建泛型类.枚举和结构体 在类型后使用where来指定一个需求列表.例如,要限定实现一个协议的类型 ...

  8. 两则C++知识点

    返回引用遵守的两条准则: 1. 不能返回局部变量: 2. 不能返回new出的量,因为可能是临时对象. const的用法: 1. 基本数据类型的写限制: 2. 函数的传入以及返回参数: 3. 类内的数据 ...

  9. SQL SERVER ->> Wait Stats

    等待状态是隔离SQL SERVER性能问题的一个重要手段,从实例级别入手.可以大概看出SQL SERVER在过去某段时间内是否处于某种资源的吃紧状态.不过取决于你是否有建立有效的性能数据收集机制.sy ...

  10. 《Linux内核设计与实现》读书笔记(十)- 内核同步方法【转】

    转自:http://www.cnblogs.com/wang_yb/archive/2013/05/01/3052865.html 内核中提供了多种方法来防止竞争条件,理解了这些方法的使用场景有助于我 ...