大家好,我是三分钟学堂公众号郭丽媛。今天,我将继续学习Android键。
本期我们来学习如何使用按钮来旋转和缩小图片。这两个功能在对接编码平台时可能会用到。
在说这个之前需要强调一下,下面的代码是在Android app 3.3.8 版本中使用的。
按键精灵手机助手上面的命令是:
如果你的版本比较低按键精灵如何按时间调用子程序,可能没有这些功能,自己升级版本。
这个Image图像命令组涉及到一个以前没有使用过的知识点。
知识点:【图片资料】
那么什么是图像数据,它的格式是什么?
让我们用一个命令来演示它:
我们先来“获取指定屏幕范围内的图片数据”,这个命令有4个参数按键精灵如何按时间调用子程序,搜索区域的4个坐标值与我们截图命令和图片搜索命令的坐标范围完全一致。那么这个命令有什么意义呢?它的返回值将所有颜色数据作为键值表返回。
对于一个不熟悉的键值表,我们怎么知道它的格式呢?我教你一个方法:
“将键值表转换为json”,然后使用traceprint调试输出json。
我们来看看这个命令的返回值的键值表格式:
Dim PixelData = Image.GetScreenData(0,0,5,5)
Dim json=encode.TableToJson(PixelData)
TracePrint json
返回值:
当前脚本第3行:[[[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59]],[[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59]],[[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59]],[[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59]],[[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59]],[[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59],[225,131,59]]]
使用在线格式化工具处理返回值:
[
[
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59]
],
[
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59]
],
[
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59]
],
[
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59]
],
[
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59]
],
[
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59],
[225, 131, 59]
]
]
通过处理后的格式可以看出,返回值是一个三维数组。
数组最大下标:三维数组(5,5,2)
搞清楚这个之后,我们就开始今天的主题。
(一)图像旋转(顺时针 90 度)。
Dim Path1 = "/sdcard/pictures/1.jpg"
Dim Path2 = "/sdcard/pictures/2.jpg"
Dim PixelData = Image.SetRotation(Path1, 90)
Image.SavePixelData(PixelData, Path2)
图片旋转的逻辑如下:
①读取图像数据
②顺时针旋转90度对应的数据替换
③ 从图像数据生成图像数据
(二)图片缩小
有时由于手机分辨率过大,截图得到的图片超过了编码平台要求的图片大小,导致上传失败。
先说一下缩小图像的思路:假设我们缩小n倍。
①获取原始图像的图像数据
②每n个位置从图像数据中提取一个数据,形成新的图像数据,得到的数据是原始数据的n分之一。
③ 从新的图像数据生成图片
代码显示如下:
Dim Path = "/sdcard/pictures/f.jpg"
Dim NewPath = "/sdcard/pictures/f1.jpg"
dim PicSize = Image.Size(Path)
Dim x=PicSize[1]
Dim y=PicSize[2]
Dim n=5 //缩放倍数
Dim PixelData =Image.GetPicData(Path)
Dim NewPixelData= Image.GetScreenData(1,1,int(x/n),int(y/n))
For j = 1 To int(x/n)
For i = 1 To int(y/n)
For k = 1 To 3
NewPixelData[j][i][k]=PixelData[j*5][i*5][k]
Next
Next
Next
Image.SavePixelData NewPixelData, NewPath
显示结果:
代码中有一个缩放因子变量。您可以直接将其修改为您需要的倍数。本来想写下截图的缩放比例。然后我想了想。不就是先保存截图,然后再放大图片吗?原理是一样的。没有必要写。
请登录后发表评论
注册
社交帐号登录