将图片转化为数据储存
之前写了图片的构成与图片重绘,接下来说说如何将图片转化为可以储存的数据。
数组
之前说的像素点的储存与重绘是有二维数组来完成的,同理,将任意图片储存也要将其转化为二维数组储存进计算机。
讲到二维数组,就简单介绍一下我所理解的二维数组。学过线性代数的小伙伴一个就知道二维数组是以矩阵或类似矩阵的形式存在的,如下就是一个4x4的二维矩阵。
0,0,0,00,0,0,00,0,0,0
在计算机中储存的二维数组也是以这样的方式储存的吗?显然不是。如果二维是矩阵,那三维、四位等又该怎么储存?实际上,计算机的内存条的线性结构就决定了数据的储存也必然线性的。一维数组很好理解
int[] arg=new int[] {0,0,0,0,0,0,0};
一维整型数组里面每一个元素都是一个整形数。那么二维、三维甚至是更高维又该如何理解?二维数组有两个[ ],如下,可以先把[ ]与前面的数组名放一起暂时当一个数组名 arg[ ] ,然后数组名+[ ]也就是上面所说的一维数组了,不过这个“一维数组”中的每个素都是一维数组!可以理解就是多个一维数组构成的二维数组。同理,三维数组的数组名与前两个[ ] 组成一个特殊的一维数组,这个一维数组里面的元素是二维数组,这个二维数组中的元素又是一维数组,也就可理解为三维数组的元素是二维数组,二维数组里面有是一维数组。有点像俄罗斯套娃的意味。更高维的数组同样如此。
int[][] arg=new int[][] {{},{}};
简单展示一下一维数组和二维数组
int[] arg1=new int[] {0,0,0,0};int[][] arg2=new int[][] {{0,0,0,0},{0,0,0,0,}};
理解了二维数组了,该讲正事了。
将图片转化为二维数组
图片其实是由像素矩阵组成的,我们需要把这些像素转换为二维数组。所以我们需要一个存储图片信息的东西。这里我们就要用文件。
先创建一个文件对象,这里要用到java.io这个包下的 File 类。括号里的path我们写上图片文件的路径。然后需要用到BufferedImage这个类,这是Java中专门处理缓存图片的类。读取图片我们用到ImageIO.read();这个方法。这里可能会产生IO异常,所以我们加上try catch的语句。接着我们根据图片对象进行初始化二维数组,然后根据图片对象进行初始化二维数组。
整个流程就是先把图片转成BufferedImage,然后再转成二维数组。
这样我们就可以绘制一张图片啦!
int[][] imageData=convertImageToArray("TP/hhw.jpg");public static int[][] convertImageToArray(String fileName) { // 先创建文件对象 :File file = new File(fileName);// 声明一个BUfferedImage的引用名BufferedImage bf =null;try {// 将文件对象读为 缓冲图片对象bf = ImageIO.read(file);} catch (IOException e) {e.printStackTrace();} // 根据图片对象进行初始化二维数组int w = bf.getWidth ();int h = bf.getHeight ();int[][] imgData = new int[w][h];// 将 buffimg 中的RGB值存入数组中for(int i = 0; i < w; i++){for(int j = 0; j < h; j++){imgData[i][j] = bf.getRGB(i,j);}}//返回数组return imgData;}
转化为二维数组就可以来进行图片的一些处理,不仅仅原图绘制,一些基础特效也是可以完成的
上图的这些基础操作都是可以完成的,详情请看下回——图形的重绘与特效。
将图片转化为数据储存相关推荐
- unity 创建图片ui_在 Unity中 将游戏数据储存至本地文档
作者:游戏工坊-胡继伟 链接:https://blog.csdn.net/hu1262340436/article/details/110236103 在Unity中 添加本地文档储存游戏数据 首先我 ...
- C语言数据储存(保姆级教学)
unsighed和sighed的区别. 这里都用short来打比方 unsighed表示无符号,sighed表示有符号. 在数据储存中,最高位表示符号位 不知道第二个-32767怎么来的,后面会有讲到 ...
- python储存_python数据储存
python数据储存 csv文件的操作 安装csv包 打开cmd 执行 pip install csv 引入的模块名为csv 读取文件 with open("xx.csv",&qu ...
- Android 里的数据储存
数据持久化 关于数据储存,这个话题已经被反复讨论过很多次了,我是不建议把网络存储这种方式纳入到数据储存的范围的,因为这个和Android没多少关系,因此就有如下的分类: 本地储存(也称之为数据持久化, ...
- Python3 爬虫实战 — 豆瓣电影TOP250【requests、Xpath、正则表达式、CSV、二进制数据储存】
爬取时间:2019-09-27 爬取难度:★★☆☆☆☆ 请求链接:https://movie.douban.com/top250 以及每部电影详情页 爬取目标:爬取榜单上每一部电影详情页的数据,保存为 ...
- Python3 爬虫学习笔记 C09【数据储存系列 — 文件储存】
Python3 爬虫学习笔记第九章 -- [数据储存系列 - 文件储存] 文章目录 [9.1]TXT 文本存储 [9.1.1]基本示例 [9.1.2]打开方式 [9.2]JSON 文件存储 [9.2. ...
- arcmap给tif添加地理坐标_如何将JPG格式的图片转化为带地理坐标的TIFF格式
最近有个项目需要用到开源软件GeoServer,数据源是一张高分辨率的2.5维图片,格式是jpg的,由于GeoServer不支持jpg格式的发布,因此考虑到要进行格式转换,将其转换成tiff格式. 1 ...
- C语言基础——数据储存
目录 前言 正文 一.数据类型介绍 1.整型family 2.浮点型family 3.构造类型 4.指针类型 5.空类型 二.整型提升 三.整形在内存中的存储 1.源码.反码.补码 2.大端小端介绍 ...
- Unity游戏存档 (将游戏数据储存至本地文档)
在Unity中 添加本地文档储存游戏数据 首先我们应该在Unity中创建一个C#脚本,将其命名为Inventory 脚本不用挂在任何物体上,只需要在命名空间之前写一句代码,如下: 代码写好之后保存,在 ...
最新文章
- C2893 未能使函数模板“unknown-type std::invoke(_Callable ,_Types ...)”专用化 websocket_server
- Python-OpenCV 杂项(一):图像绘制
- python语言写九九乘法表_【酷叮课堂】--Python语言完成99乘法表
- ThreadLocal用法详解和原理
- JEECG(J2EE Code Generation) 基于代码生成器J2EE智能开发框架 杂记:发布新版本 JEECG_v2.0
- java生成和读取keystore_java-如何以编程方式创建新的KeyStore?
- apache struts linux,Apache Struts2远程代码执行漏洞(S2-053)(CVE-2017-12611)
- Linux 中的 XEN 虚拟化技术(二)Xen 的安装和配置
- 迅雷没有做错什么,只是用户不需要了
- c语言源代码如何读取打开文件,C语言读取文件
- AutoCAD查询插件的开发
- 计算机键盘数字和确键失控,电脑键盘数字键失灵怎么办
- es的bucket和metric
- littlevgl技术参考手册_树莓派littlevGL系列教程:littlevGL简单了解
- 凸优化和非凸优化的区别
- Python爬取第一电影天堂最新电影(5000多部)代码实例(一)
- 前端JavaScript实现垃圾分类小游戏教程
- Java之旅--如何从草根成为技术专家
- 高楼扔鸡蛋问题 - 动态规划+反推演绎
- 【开发工具】史上最全的IDEA快捷键总结 MAC版