来学一下如何用按键实现图片旋转和图片缩小,这两个功能可能在对接打码平台时会用到

大家好,我是三分钟学堂公众号郭丽媛。今天,我将继续学习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

显示结果:

代码中有一个缩放因子变量。您可以直接将其修改为您需要的倍数。本来想写下截图的缩放比例。然后我想了想。不就是先保存截图,然后再放大图片吗?原理是一样的。没有必要写。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论