console.show();
log('使用說明:建議[真機]使用此軟件,選擇好顏色之後[雙擊圓圈]可以自動複製顏色信息;');
sleep(5000);
log('截圖開始')
sleep(800);
console.hide()//隱藏控制檯懸浮窗。
console.clear()
if (!requestScreenCapture()) {
toast("請求截圖失敗");
exit();
};
var IMG = 截圖();
var img = images.copy(IMG);
var window = floaty.rawWindow(
<vertical id="vertical" bg="#aaaaaa" w="{{Math.floor(device.width*0.8)}}px" h="{{Math.floor(device.height*0.8)}}px" gravity="center">
<canvas id="canvas" margin="5dp" layout_weight="1" />
<horizontal id="horizontal" margin="5dp" w="*" gravity="center">
<button id="butJ" layout_weight="1" text="截圖" />
<button id="butX" layout_weight="1" text="選圖" />
<button id="butY" layout_weight="1" text="移動" />
{/* <button id="butH" layout_weight="1" text="官網" /> */}
<button id="butG" layout_weight="1" text="關閉" />
</horizontal>
</vertical>
);
var window_ = floaty.window(
<button id="but_" w="150px" h="150px" text="※" alpha="0.7" />
);
var ad = new 懸浮控制(window, window.butY, 1);
var ad_ = new 懸浮控制(window_, window_.but_);
ad.setLongClick(exit);
ad_.setLongClick(exit);
var F = ad.OutScreen();
var F_ = ad_.OutScreen();
threads.start(function () {
sleep(100);
F_ = ad_.OutScreen();
ad_.windowyidong(F_);
});
ad.setClick(function () {
window.disableFocus();
threads.start(function () {
F = ad.OutScreen();
ad.windowyidong(F);
ad_.windowyidong([F_[1], ad_.centerXY(ad.centerXY(F[0])[0])[1]]);
ad_.windowyidong(ad_.toScreenEdge(0.2));
});
});
ad_.setClick(function () {
threads.start(function () {
F_ = ad_.OutScreen();
ad_.windowyidong(F_);
ad.windowyidong([F[1], ad.centerXY(ad_.centerXY(F_[0])[0])[1]]);
ad.autoIntScreen();
});
});
window.butJ.click(() => {
threads.start(function () {
var F = ad.OutScreen();
ad.windowyidong(F);
sleep(100);
var IMG = 截圖();
//img.recycle();
img = images.copy(IMG);
ad.windowyidong(F.reverse());
});
});
window.butX.click(() => {
threads.start(function () {
var F = ad.OutScreen();
ad.windowyidong(F);
var Apath = "/sdcard";
var path = listpath(Apath);
if (path) {
var IMG = 加載圖片(path);
//img.recycle();
img = images.copy(IMG);
};
ad.windowyidong(F.reverse());
});
});
window.butG.click(() => {
exit();
});
setInterval(() => { }, 1000);
window.exitOnClose();
var paint = new Paint;
paint.setTextAlign(Paint.Align.CENTER);
paint.setStrokeWidth(5);
paint.setStyle(Paint.Style.STROKE);
var data = {
translate: {
x: 0,
y: 0
},
scale: 1,
};
threads.start(function () {
sleep(100);
window.setPosition(device.width / 2 - window.getWidth() / 2, device.height / 2 - window.getHeight() / 2);
sleep(100);
data = {
translate: {
x: -(window.getX() + window.canvas.getX()),
y: -(window.getY() + window.canvas.getY())
},
scale: 1,
};
});
var 點色;
window.canvas.on("draw", function (canvas) {
canvas.drawARGB(255, 127, 127, 127);
var w = canvas.getWidth();
var h = canvas.getHeight();
paint.setStrokeWidth(5);
var matrix = new android.graphics.Matrix();
matrix.postScale(data.scale, data.scale);
matrix.postTranslate(data.translate.x, data.translate.y);
paint.setARGB(255, 0, 0, 0);
canvas.drawImage(img, matrix, paint);
paint.setStrokeWidth(5);
paint.setStyle(Paint.Style.STROKE);
paint.setARGB(255, 255, 255, 0);
canvas.drawLine(w / 2 - 50, h / 2, w / 2 - 100, h / 2, paint);
paint.setARGB(255, 255, 0, 255);
canvas.drawLine(w / 2, h / 2 - 50, w / 2, h / 2 - 100, paint);
paint.setARGB(255, 255, 0, 0);
canvas.drawLine(w / 2 + 50, h / 2, w / 2 + 100, h / 2, paint);
paint.setARGB(255, 0, 0, 255);
canvas.drawLine(w / 2, h / 2 + 50, w / 2, h / 2 + 100, paint);
var S = 算座標(w / 2, h / 2, data, img);
點色 = S;
paint.setColor(S.color);
paint.setStrokeWidth(15);
canvas.drawCircle(w / 2, h / 2, 41, paint);
ui.run(() => {
window.vertical.attr("bg", colors.toString(反色(S.color)));
window.horizontal.attr("bg", S.colorString);
});
paint.setColor(反色(S.color));
paint.setStrokeWidth(5);
canvas.drawCircle(w / 2, h / 2, 50, paint);
var S1 = 算座標(w / 2, h / 2 - 100, data, img);
var S2 = 算座標(w / 2, h / 2 + 100 - 12.5, data, img);
var S3 = 算座標(w / 2, h / 2 + 100 + 12.5, data, img);
canvas.setMatrix(new android.graphics.Matrix());
paint.setStrokeWidth(1);
paint.setStyle(Paint.Style.FILL);
var size = 40;
paint.setTextSize(size);
paint.setColor(反色(S1.color));
canvas.drawText(S.x + "," + S.y, w / 2, h / 2 - 100 + 0.365 * size, paint);
paint.setColor(反色(S2.color));
canvas.drawText(S.color, w / 2, h / 2 + 100 - 12.5 + 0.365 * size, paint);
paint.setColor(反色(S3.color));
canvas.drawText(S.colorString, w / 2, h / 2 + 100 + 20 + 0.365 * size, paint);
});
// //autojs交流羣,腳本代碼還原,代碼分享!羣號:168196007 腳本分享高級羣:1036477155 此羣爲收費羣!
function 算座標(X, Y, data, img) {
var X = X - data.translate.x,
Y = Y - data.translate.y;
var x = X / data.scale;
var y = Y / data.scale;
x = Math.floor((0 <= x && x < img.getWidth()) ? x : (0 <= x ? img.getWidth() - 1 : 0));
y = Math.floor((0 <= y && y < img.getHeight()) ? y : (0 <= y ? img.getHeight() - 1 : 0));
var color = images.pixel(img, x, y);
var colorString = colors.toString(color);
return {
x: x,
y: y,
color: color,
colorString: String(colorString)
};
};
var Touch = new Array;
var TouchData = new Array;
var Wx, Wy, fuzhiid = 0,
fuzhi = false;
window.canvas.setOnTouchListener(function (view, event) {
try {
var w = view.width,
h = view.height;
sw: switch (event.getAction() <= 2 ? event.getAction() : Math.abs(event.getAction() % 2 - 1)) {
case event.ACTION_DOWN:
var i = Math.floor(event.getAction() / 256);
var id = event.getPointerId(i);
var X = event.getX(i);
var Y = event.getY(i);
if (weiyi([view.width / 2 - X, view.height / 2 - Y]) <= 50) {
Wx = X;
Wy = Y;
fuzhi = true;
fuzhiid = id;
break;
};
var PC = event.getPointerCount();
if (PC >= 3) {
data = {
translate: {
x: -(window.getX() + window.canvas.getX()),
y: -(window.getY() + window.canvas.getY())
},
scale: 1,
};
};
Touch[id] = {
X: X - data.translate.x,
Y: Y - data.translate.y
};
TouchData = deepCopy(data);
//複製對象。
break;
case event.ACTION_MOVE:
if (fuzhi) {
break
};
var PC = event.getPointerCount();
if (PC == 1) {
var id = event.getPointerId(0);
var X = event.getX(0);
var Y = event.getY(0);
data.translate.x = X - Touch[id].X;
data.translate.y = Y - Touch[id].Y;
} else if (PC == 2) {
var id = event.getPointerId(0);
var X = event.getX(0);
var Y = event.getY(0);
var id1 = event.getPointerId(1);
var X1 = event.getX(1);
var Y1 = event.getY(1);
var SS = weiyi([Touch[id1].X - Touch[id].X, Touch[id1].Y - Touch[id].Y]);
var SS1 = weiyi([X1 - X, Y1 - Y]);
var kS = SS1 / SS;
data.scale = TouchData.scale * kS;
data.translate.x = X - Touch[id].X * kS;
data.translate.y = Y - Touch[id].Y * kS;
} else {
data = {
translate: {
x: -(window.getX() + window.canvas.getX()),
y: -(window.getY() + window.canvas.getY())
},
scale: 1,
};
};
break;
case event.ACTION_UP:
var i = Math.floor(event.getAction() / 256);
var id = event.getPointerId(i);
if (fuzhi && id == fuzhiid) {
if (weiyi([event.getX(i) - Wx, event.getY(i) - Wy]) <= 10) {
setClip(JSON.stringify(點色));
toastLog("已複製 \n" + JSON.stringify(點色));
};
fuzhi = false;
break;
};
Touch[id] = undefined;
var PC = event.getPointerCount();
for (var i = 0; i < PC; i++) {
var id1 = event.getPointerId(i)
var X = event.getX(i);
var Y = event.getY(i);
if (id1 != id) {
Touch[id1] = {
X: X - data.translate.x,
Y: Y - data.translate.y
};
};
};
log(PC);
break;
};
return true;
} catch (e) {
toastLog("Touch: " + e);
return true;
};
});
/*
window.butJ.click(() => {
threads.start(function() {
var X=window.getX(),Y=window.getY();
window.setPosition(device.width, device.height);
sleep(100);
var IMG = 截圖();
img = images.copy(IMG);
window.setPosition(X,Y);
});
});
*/
function 截圖() {
while (true) {
if (圖 = captureScreen()) {
return 圖;
break;
}
}
};
function 加載圖片(A) {
if (files.isFile(A)) {
return images.read(A);
};
var dir = "/storage/emulated/0/DCIM";
var jsFiles = files.listDir(dir, function (name) {
return (name.endsWith(".jpg") || name.endsWith(".png")) && files.isFile(files.join(dir, name));
});
if (jsFiles.length) {
return images.read(files.join(dir, jsFiles[jsFiles.length - 1]));
} else {
toastLog("沒有圖片可以查看");
toastLog("請自己修改路徑");
toastLog("後使用");
exit();
};
};
function listpath(Apath, Bpath) {
Bpath = Bpath || "";
var path = files.join(Apath, Bpath);
var a = files.listDir(path, function (name) {
return name.endsWith(".jpg") || name.endsWith(".png") || files.isDir(files.join(path, name));
}).sort();
i = dialogs.select(path, a);
if (i + 1) {
path = files.join(path, a[i]);
if (files.isDir(path)) {
return listpath(Apath, files.join(Bpath, a[i]));
} else {
if (dialogs.confirm("確定文件?", a[i])) {
return path;
} else {
return listpath(Apath, Bpath);
}
}
} else {
var ary = Bpath.split("/");
if (ary.length && Bpath.length) {
ary.pop();
return listpath(Apath, ary.join("/"));
}
}
};
function 反色(color) {
return (-1 - colors.argb(0, colors.red(color), colors.green(color), colors.blue(color)));
};
function getsd(s, ary) {
//將數組內所有值的平方和開方等於s
var sum = weiyi(ary);
var S = (s / sum) || 0;
for (var i = 0; i < ary.length; i++) {
ary[i] = ary[i] * S;
};
return ary;
};
function weiyi(ary) {
//數組所有值平方和開方
var sum = 0;
for (var i = 0; i < ary.length; i++) {
sum += Math.pow(ary[i], 2);
};
return Math.sqrt(sum);
};
function kdfx(Y) {
//數學二維座標系xy,輸入角度。
var x = Math.cos(Y % 360 / 360 * 2 * Math.PI);
var y = Math.sin(Y % 360 / 360 * 2 * Math.PI);
return [x, y];
};
function ydfx(ary) {
//數學二維座標系xy,返回角度。
var ary = getsd(1, ary);
var x = ary[0],
y = ary[1];
var Y = Math.asin(y) / (2 * Math.PI) * 360;
if (x < 0) {
Y = 180 - Y;
};
return Y;
};
function windowGXY(x, y, k) {
x = (k[0][0] < x && x < k[1][0]) ? x : (k[0][0] < x ? k[1][0] : k[0][0]);
y = (k[0][1] < y && y < k[1][1]) ? y : (k[0][1] < y ? k[1][1] : k[0][1]);
return {
x: x,
y: y
};
};
function deepCopy(obj) {
if (typeof obj != 'object') {
return obj;
}
var newobj = {};
for (var attr in obj) {
newobj[attr] = deepCopy(obj[attr]);
}
return newobj;
};
function 懸浮控制(window, windowid, ar) {
this.Orientation = context.resources.configuration.orientation;
this.Width = this.Orientation == 1 ? device.width : device.height;
this.Height = this.Orientation == 2 ? device.width : device.height;
this.Click = function () { };
this.LongClick = function () { };
this.setClick = (fun) => {
fun = fun || function () { };
this.Click = fun;
};
this.setLongClick = (fun, ji) => {
fun = fun || function () { };
this.LongClick = fun;
if (parseInt(ji)) {
this.Tjitime = parseInt(ji) / 50;
};
};
setInterval(() => {
if (context.resources.configuration.orientation != this.Orientation) {
this.Orientation = context.resources.configuration.orientation;
this.Width = this.Orientation == 1 ? device.width : device.height;
this.Height = this.Orientation == 2 ? device.width : device.height;
var xy = this.windowGXY(window.getX(), window.getY(), this.G(window));
this.windowyidong([
[window.getX(), window.getY()],
[xy.x, xy.y]
]);
};
}, 100);
this.TX = 0;
this.TY = 0;
this.Tx = 0;
this.Ty = 0;
this.Tyidong = false;
this.Tkeep = false;
this.Tjitime = 12;
this.Ttime = 0;
setInterval(() => {
if (this.Tkeep) {
this.Ttime++;
if (!this.Tyidong && this.Ttime > this.Tjitime) {
//非移動且按下時長超過1秒判斷爲長按
this.Tkeep = false;
this.Ttime = 0;
this.LongClick();
};
};
}, 50);
if (windowid) {
windowid.setOnTouchListener(new android.view.View.OnTouchListener((view, event) => {
switch (event.getAction()) {
case event.ACTION_DOWN:
this.Tx = event.getRawX();
this.Ty = event.getRawY();
this.TX = window.getX();
this.TY = window.getY();
this.Tkeep = true; //按下,開啓計時
break;
case event.ACTION_MOVE:
var sx = event.getRawX() - this.Tx;
var sy = event.getRawY() - this.Ty;
if (!this.Tyidong && this.Tkeep && this.weiyi(sx, sy) >= 10) {
this.Tyidong = true;
};
if (this.Tyidong && this.Tkeep) {
window.setPosition(this.TX + sx, this.TY + sy);
};
break;
case event.ACTION_UP:
if (!this.Tyidong && this.Tkeep && this.Ttime < 7) {
this.Click();
};
this.Tkeep = false;
this.Ttime = 0;
if (this.Tyidong) {
var A = this.windowGXY(window.getX(), window.getY(), this.G(window));
threads.start(new java.lang.Runnable(() => {
this.windowyidong([
[window.getX(), window.getY()],
[A.x, A.y]
]);
}));
this.Tyidong = false;
};
break;
};
return true;
}));
};
this.G = (win) => {
var K = 35, //懸浮窗的隱形邊矩
H = 66; //手機通知欄的高度
if (!ar) {
return [
[-K, -K],
[this.Width - win.getWidth() + K, this.Height - win.getHeight() - H + K]
];
} else {
return [
[0, H],
[this.Width - win.getWidth(), this.Height - win.getHeight()]
];
};
};
this.weiyi = function () { //平方和開方
var num = 0;
for (var i = 0; i < arguments.length; i++) {
num += arguments[i] * arguments[i];
};
return Math.round(Math.sqrt(num) * 1000) / 1000
};
this.windowGXY = function (x, y, k) {
x = (k[0][0] < x && x < k[1][0]) ? x : (k[0][0] < x ? k[1][0] : k[0][0]);
y = (k[0][1] < y && y < k[1][1]) ? y : (k[0][1] < y ? k[1][1] : k[0][1]);
return {
x: x,
y: y
};
};
this.windowyidong = (A, s, w) => {
w = w || window;
s = s || 10;
var sx = A[1][0] - A[0][0],
sy = A[1][1] - A[0][1];
var sd = this.weiyi(sx, sy) / s;
var X = sx / sd,
Y = sy / sd;
var x = 0,
y = 0;
for (var i = 0; i < sd; i++) {
x += X;
y += Y;
sleep(1);
w.setPosition(A[0][0] + x, A[0][1] + y);
};
w.setPosition(A[1][0], A[1][1]);
};
this.OutScreen = () => {
var F = this.G(window);
var x = window.getX(),
y = window.getY();
var sx = window.getX() + window.getWidth() / 2,
sy = window.getY() + window.getHeight() / 2 + 66;
var cx = Math.abs(sx < (this.Width - sx) ? sx : (this.Width - sx)) < Math.abs(sy < (this.Height - sy) ? sy : (this.Height - sy)) ? (sx < this.Width / 2 ? (F[0][0] - window.getWidth()) : (F[1][0] + window.getWidth())) : x,
cy = Math.abs(sx < (this.Width - sx) ? sx : (this.Width - sx)) < Math.abs(sy < (this.Height - sy) ? sy : (this.Height - sy)) ? y : (sy < this.Height / 2 ? (F[0][1] - window.getHeight()) : (F[1][1] + window.getHeight()));
return [
[x, y],
[cx, cy]
];
};
this.toScreenEdge = (d) => {
d = d || 0;
var F = this.G(window);
var x = window.getX(),
y = window.getY();
var sw = window.getWidth() * d;
var sx = window.getX() + window.getWidth() / 2,
sy = window.getY() + window.getHeight() / 2 + 66;
var cx = sx < (this.Width - sx) ? -sw : (this.Width + sw - window.getWidth());
return [
[x, y],
[cx, y]
];
};
this.centerXY = (F) => {
var w = window.getWidth();
var h = window.getHeight();
return [
[F[0] + w / 2, F[1] + h / 2],
[F[0] - w / 2, F[1] - h / 2]
];
};
this.autoIntScreen = () => {
var A = this.windowGXY(window.getX(), window.getY(), this.G(window));
threads.start(new java.lang.Runnable(() => {
this.windowyidong([
[window.getX(), window.getY()],
[A.x, A.y]
]);
}));
};
this.autoIntScreen();
};
autojs-手機端截圖取色助手
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.