Java 图片提取RGB数组 RGBOfCharMaps (整理)

时间:2022-09-03 13:42:05
 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 &lpar;整理&rpar;

      /* * 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 &lpar;整理&rpar;

    /** * 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&period;java图片图像处理attilax总结

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

  9. Atitit&period;java图片图像处理attilax总结&&num;160&semi;&&num;160&semi;BufferedImage&&num;160&semi;extends&&num;160&semi;java&period;awt&period;Image获取图像像素点image&period;getRGB&lpar;i&comma;&&num;160&semi;lineIndex&rpar;&semi;&&num;160&semi;图片剪辑&sol;AtiPlatf&lowbar;cms&sol;src&sol;com&sol;attilax&sol;img&sol;imgx&period;javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片&&num;160&semi;atitit 图片去噪算法的原理与

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

随机推荐

  1. 分页插件--根据Bootstrap Paginator改写的js插件

    刚刚出来实习,之前实习的公司有一个分页插件,和后端的数据字典约定好了的,基本上是看不到内部是怎么实现的,新公司是做WPF的,好像对于ASP.NET的东西不多,导师扔了一个小系统给我和另一个同事,指了两 ...

  2. Engine中如何更改lyr文件数据源的相对路径

    以下是使用relativebase存储layerfile的代码,如果需要修改数据源只要修改ILayer即可: string folderpath = @E:相对路径; string layerfile ...

  3. Recover Binary Search Tree-恢复二叉查找树

    题目描述: 由于某种原因一个二叉排序树的两个节点的元素被交换,在不改变树的结构的情况下恢复这颗二叉排序树 题目来源: http://oj.leetcode.com/problems/recover-b ...

  4. 常见排序算法(PHP实现)

    function InsertSort($arr){ $num = count($arr); for($i = 1; $i < $num; $i++){ $key = $arr[$i]; for ...

  5. 遍历Javascript数组的一种方法!

    应用场景: 如果您的数组只用一次的话就适用这种方法,因为遍历完后数组便清空了.代码如下: var arr=[1,5,6,2,3]; for(;i=arr.shift();){ console.log( ...

  6. 初始化openresty开发环境

    参考链接 https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 初始化git ...

  7. python 去除html 超链接href 如何实现&quest;

    今天持久男 在抓取数据的时候发现很多内容都加了锚文本, 这怎么办呢? 没办法只能通过工具解决 我是这样解决的: 例如: soup = BeautifulSoup('<p>Hello &lt ...

  8. Btrace介绍

    一.Btrace简介 BTrace可以动态的向目标应用程序的字节码注入追踪代码 用到的技术JavaComplierApi,JVMTI,Agent,Instrumentation+ASM 二.Btrac ...

  9. &lbrack;C&rsqb;&ast;和&amp&semi;

    一 .& c的&被称为“寻址运算符”,作用是指向某变量的指针: 请看以下代码: int main(void){ int int_1 = 16;        printf(" ...

  10. &lbrack;UE4&rsqb;从零开始构建VR角色

    一个工程是不是VR,并没有什么特别的地方,原则上任何工程都可以在VR设备下展示 一.新建一个名为“VRPawnBase”的Pawn. 二.在VRPawnBase中添加组件“Steam VRChaper ...