P22 美颜相机——引入动态数组,优化重绘

目录

导图

一 利用方法的返回值传递参数

二 ImgArr0326类——引入动态数组

1初始化

2 存

 3 取

4 删

三 将每次绘图后得到的缓冲图保存到数组中

四 重绘

五 撤回

六 repaint

补充:图片居中显示问题


导图

一 利用方法的返回值传递参数

滤镜类Filter0326中,原本每个滤镜的实现方法返回值都是void,改成BufferedImage再返回BufferedImage类型的返回值

每一个滤镜的实现方法全都要改,过程略

这样在监听器实现类BoardListener0326中,调用滤镜的时候就可以得到返回值image,可以将这个图片对象保存(实现重绘的第一步就是保存,然后在paint方法中拿出来重绘),区别于上次的方法,上次的方法在paint方法调用的时候要调用很多层,比较复杂。现在调用会方便些

二 ImgArr0326类——引入动态数组

上次我们用的一维数组保存的,缺点在于数组在定义的时候要确定数组大小,对于图像处理来说,操作次数不能高于数组大小。(数组在初始化的时候要定容量,不方便扩容)。

这次选择线性表来保存,也就是动态数组(底层也是用数组实现的),动态的意思就是这个数组容量满了会自动扩容

线性表/动态数组相关信息(全都写在ImgArr0326类中)

存储结构:数组

初始化:传入一个初始化容量initSize

功能:存取 删除 查找 扩容

1初始化

构造方法,传入一个初始化容量initSize

主要分为两个部分,一个是initSize大小正常,直接作为数组长度,另一个是当initSize不正常,直接给定长度为10。为了方便,这里把10设置为一个常量。

这里要注意好几个不同功能的长度变量

size:用来计数的,数组中有几个元素;也可以作为下标使用

length:当前数组的长度或者说容量

defaultlength:常量

2

思路:造一个新的数组,再把旧的数组里面的数据拿进来

 3

4

三 将每次绘图后得到的缓冲图保存到数组中

回到监听器实现类中

四 重绘

回到UI类中,之前是在窗体上画,现在是在面板上画,需要自己写一个类ImagePanel0326,继承JPanel,用来替换面板,在这个类里面重写paint方法。如果和之前棋子一样要画出所有的,那么就要用for循环遍历,这里只要画出最后一种滤镜,所以不用for,可以借助栈的思维,只绘制栈顶。涉及到数据结构索引操作,一定要先确定是否越界。

ImagePanel0326类如下

 回到UI类中替换面板

这里也可以用构造方法来传(暂时还不会)

五 撤回

基本思想,删掉栈顶的图片,重绘新的栈顶图片

六 repaint

滤镜类Filter0326中,

每次点击按钮,都自动刷新repaint

在UI类中,将画图区对象传到监听器中

补充:图片居中显示问题

如何居中显示原本图片大小

用两个矩形的宽高以及中心点计算左上角坐标

 具体显示如下

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值