将画图板数据保存成文件

本文介绍了图形绘制数据如何保存成文件的技术,包括自定义队列保存和仿BMP文件保存两种方法。自定义队列保存通过队列将图形信息写入文件;仿BMP文件保存则将画布上的每个点的颜色信息保存,提高了读取效率。

     前几天完成了在画图板上可以绘制一些图形,并将其保存在了一个自定义的队列中。此时,这些图形只是保存在了内存中。接下来的工作就是将画图板数据保存成文件,存储在硬盘里。

 

 第一种方法:

     利用队列,将重绘时用来保存形状对象的队列写入文件。此时,文件的格式是我们自己定义的。总的来说,不同的文件格式就是文件的信息用不同的顺序写入文件中,即,对信息的编码。文件的扩展名,对文件内信息的编码方式没有影响,只是用来方便应用程序识别文件格式,选取相应的应用程序来打开它。例如:新建一个Microsoft Word文档,它的扩展名是.doc.写入一行文字后保存。如果,去掉文件的扩展名,文件的信息仍然是存在的,只是打开时系统无法自定选择应用程序去打开这个文件,需要人去选择。如果,我们这是选择Microsoft Word去打开,仍然可以正确的打开读取。如果,我们选择txt文档去打开,仍然可以打开,只是此时读取的信息是乱码,因为 txt 文档会按照自己的解码方式 去读取文件信息,txt 解码方式和 doc不一样,txt 按照自己的解码方式翻译过来后,读取出来的对应的不是我们当初写入的初衷了。

 

 

     思路是:1,创建输出流对象。 2,首先读取图形的个数,写入文件。3,读取图形的形状写入文件。 4,根据读取的类型,创建相应的图形对象。然后,写入图形的属性。

 

    创建输出流对象时用到了基本数据输出流,因为此时写入的是一些基本的数据类型,基本数据类型有 8 个。byte=8 bit; int =4byte=32bit ; short=2byte=16bit;long =8byte=64bit; char=2 byte=16bit; float=4byte=32bit; double=8byte=64bit ; boolean=8bit;  1个汉字=2个英文字母=2byte,1个数字占一个字节。

 

    在写入文件的数据后,读取时,需要按照相同的顺序。文件的名字可以任意命名,扩展名亦是任意,也可以没有扩展名。如果,把文件的扩展名定义为 txt,那么,可以用txt 打开,不过打开后是乱码罢了,因为我们写入文件的信息顺序和txt不一样。

 

   读取文件时,新建一个队列存储信息,只要按照写入时,相同的顺序,read就好了,将读取的相应的属性赋予对象,最后,将队列遍历绘制就好了。这里面,最重要的就是 注意 写入 和读取 要有相同的顺序读取的相应的数据类型。

 

 

  第二种方法:

 

    仿照BMP文件 

 

   在第一种方法中,当要保存的形状个数特别多时,文件读取时,速度是非常慢的,仿BMP文件保存,就解决了这个问题。此时,保存时,不再以画了多少个图形为主,而是保存画布上的每一个点。因为画布大小不变时,像素点的数目是不变的,因此,就算图形个数特别多,文件读取图形重绘时,速度不会变慢。

   在仿BMP文件保存时,我们重绘的是画布上的点。声明一个数组Color[][],用来保存画布上的点的颜色,画布的宽和高,就是数组的列数和行数。得到数组后,对数组进行遍历,将点的颜色存入数组。像素点的颜色,是用RGB来定义,点的颜色的不同,就是RGB取值不同。java.awt下有一个Robot类下的createScreenCapture方法,可以抓取从屏幕中设定的矩形范围的图像。因为抓取的图像是相对于屏幕的位置,因此需要得到画布相对于屏幕的位置。JPanel有一个方法getLocationOnScreen(),可以得到画布左上角的点相对于屏幕的位置。此时,就可以设定Robot要抓取的具体位置了。抓取到图像后,就可以取得像素点的RGB值了。image.getRGB会得到一个值,存入数组,得到整个画布的像素点的分布了。

 

保存图片到文件,就是将每个点的颜色写入就好了。读取文件,正好相反,就是读取颜色,然后,绘制相应颜色的点。调用drawLine方法,绘制直线需要两个点,只要两个点坐标一样,那么就会绘制一个点了。只是,需要注意的一点就是,当按行遍历时,行数不变,列数增加,当将RGB的值赋予Color[][]数组时,横纵坐标应该是相反的。

 

这时,仿BMP文件保存,读取就完成了。

 

 

 

 

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值