之前写了图片的构成与图片重绘,接下来说说如何将图片转化为可以储存的数据。

数组

之前说的像素点的储存与重绘是有二维数组来完成的,同理,将任意图片储存也要将其转化为二维数组储存进计算机。

讲到二维数组,就简单介绍一下我所理解的二维数组。学过线性代数的小伙伴一个就知道二维数组是以矩阵或类似矩阵的形式存在的,如下就是一个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;}

转化为二维数组就可以来进行图片的一些处理,不仅仅原图绘制,一些基础特效也是可以完成的

上图的这些基础操作都是可以完成的,详情请看下回——图形的重绘与特效。

将图片转化为数据储存相关推荐

  1. unity 创建图片ui_在 Unity中 将游戏数据储存至本地文档

    作者:游戏工坊-胡继伟 链接:https://blog.csdn.net/hu1262340436/article/details/110236103 在Unity中 添加本地文档储存游戏数据 首先我 ...

  2. C语言数据储存(保姆级教学)

    unsighed和sighed的区别. 这里都用short来打比方 unsighed表示无符号,sighed表示有符号. 在数据储存中,最高位表示符号位 不知道第二个-32767怎么来的,后面会有讲到 ...

  3. python储存_python数据储存

    python数据储存 csv文件的操作 安装csv包 打开cmd 执行 pip install csv 引入的模块名为csv 读取文件 with open("xx.csv",&qu ...

  4. Android 里的数据储存

    数据持久化 关于数据储存,这个话题已经被反复讨论过很多次了,我是不建议把网络存储这种方式纳入到数据储存的范围的,因为这个和Android没多少关系,因此就有如下的分类: 本地储存(也称之为数据持久化, ...

  5. Python3 爬虫实战 — 豆瓣电影TOP250【requests、Xpath、正则表达式、CSV、二进制数据储存】

    爬取时间:2019-09-27 爬取难度:★★☆☆☆☆ 请求链接:https://movie.douban.com/top250 以及每部电影详情页 爬取目标:爬取榜单上每一部电影详情页的数据,保存为 ...

  6. Python3 爬虫学习笔记 C09【数据储存系列 — 文件储存】

    Python3 爬虫学习笔记第九章 -- [数据储存系列 - 文件储存] 文章目录 [9.1]TXT 文本存储 [9.1.1]基本示例 [9.1.2]打开方式 [9.2]JSON 文件存储 [9.2. ...

  7. arcmap给tif添加地理坐标_如何将JPG格式的图片转化为带地理坐标的TIFF格式

    最近有个项目需要用到开源软件GeoServer,数据源是一张高分辨率的2.5维图片,格式是jpg的,由于GeoServer不支持jpg格式的发布,因此考虑到要进行格式转换,将其转换成tiff格式. 1 ...

  8. C语言基础——数据储存

    目录 前言 正文 一.数据类型介绍 1.整型family 2.浮点型family 3.构造类型 4.指针类型 5.空类型 二.整型提升 三.整形在内存中的存储 1.源码.反码.补码 2.大端小端介绍 ...

  9. Unity游戏存档 (将游戏数据储存至本地文档)

    在Unity中 添加本地文档储存游戏数据 首先我们应该在Unity中创建一个C#脚本,将其命名为Inventory 脚本不用挂在任何物体上,只需要在命名空间之前写一句代码,如下: 代码写好之后保存,在 ...

最新文章

  1. BZOJ1061 [NOI2008]志愿者招募
  2. IDispose和Finalize的区别和联系
  3. Java IO流--练习2
  4. Fiddler之弱网测试(Web)
  5. Webpack使用指南
  6. php ldap支付,php – 实现LDAP合规性
  7. Canvas简单动画和像素处理
  8. 9000.消息中间件MQTT
  9. vue ---- webpack - devServer节点
  10. RPM-GPG-KEY在包安装时候的作用
  11. log4j配置详解(非常详细)
  12. 通过尾注设置参考文献
  13. python是什么专业术语-python术语大全
  14. 如何制作一个简单的游戏 Cocos2d-x 2.0.4
  15. 使用 Microsoft Teams 开会到底有多少途径——建会
  16. dfa算法 java_Java实现DFA算法对敏感词、广告词过滤功能示例
  17. Servlet解决中文乱码
  18. 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器...
  19. 软件设计师备考笔记(一)软考概述
  20. C语言中的基本数据类型

热门文章

  1. 大小限制_微信突破九张照片,视频大小限制
  2. 传统企业线下收益不可观,问答营销是你线上引流的好方法
  3. 如何利用XGen制作头发,发片-笔记
  4. 用token实现单点登录
  5. 交易思想之顺大势逆小势
  6. 去除ubuntu u盘只读的解决办法
  7. Windows下swig安装与配置
  8. 学习matlab(七)——符号计算
  9. 浅议极大似然估计(MLE)背后的思想原理
  10. 如何做好项目管理,实现高效的项目管理?