autojs例子之getPixel参数详解

"ui";

/*
本文主要介绍了。bitmap的getPixels 各参数的作用。
参数
pixels 接收位图颜色值的数组
offset 写入到pixels[]中的第一个像素索引值
stride pixels[]中的行间距个数值(必须大于等于位图宽度)。可以为负数
x  从位图中读取的第一个像素的x坐标值。
y 从位图中读取的第一个像素的y坐标值
width   从每一行中读取的像素宽度
height    读取的行数 
异常
IilegalArgumentExcepiton 如果x,y,width,height越界或stride的绝对值小于位图宽度时将被抛出。
ArrayIndexOutOfBoundsException 如果像素数组太小而无法接收指定书目的像素值时将被抛出。

*/

/*
var x=0,y=0;
var width=W/2,height=H/2;
//坐标宽高的区域。
var offset=0,stride=width;
//从数组的索引offset处开始写入。偏移stride个空位写入一行
var length=offset+stride*height;

 var pixels = util.java.array("int",length );
//log(bitmap.getPixels.toString());
bitmap.getPixels(pixels,offset,stride,x,y,width,height);
//log(Bitmap.createBitmap.toString());
//log(pixels);

var bitmap2=Bitmap.createBitmap(pixels,width,length/width,Bitmap.Config.ARGB_8888);
*/



importClass(android.graphics.BitmapFactory);
importClass(android.graphics.Paint);
importClass(android.graphics.Bitmap);



var SeekBarLayout = (function() {
    util.extend(SeekBarLayout, ui.Widget);

    function SeekBarLayout() {
        ui.Widget.call(this);
        this.Magnification = 1;
        this.Difference = 0;
        this.defineAttr("text", (view, attr, value, defineSetter) => {
            view._text.setText(String(value));
        });
        this.defineAttr("range", (view, attr, value, defineSetter) => {
            value = String(value);
            let ary = String(value).split(" ");
            let ASumStr = ary[0];
            let BSumStr = ary[1];

            let AMinSum = parseFloat(ASumStr);
            let AMaxSum = parseFloat(ASumStr.replace(".", ""));
            let A_M = AMaxSum / AMinSum;

            let BMinSum = parseFloat(BSumStr);
            let BMaxSum = parseFloat(BSumStr.replace(".", ""));
            let B_M = BMaxSum / BMinSum;

            this.Magnification = A_M >= B_M ? A_M : B_M;

            let MinSum = AMinSum <= BMinSum ? AMinSum : BMinSum;
            let MaxSum = AMinSum <= BMinSum ? BMinSum : AMinSum;
            let MinSumStr = AMinSum <= BMinSum ? ASumStr : BSumStr;
            let MaxSumStr = AMinSum <= BMinSum ? BSumStr : ASumStr;

            this.Difference = MinSum;

            view._Duration_Min.setText(MinSumStr);
            view._Duration_Max.setText(MaxSumStr);
            view._Duration_seekbar.setMax(this.Magnification * (MaxSum - MinSum));
        });
        this.defineAttr("sum", (view, attr, value, defineSetter) => {
            let Sum = parseFloat(String(value));
            view._CurrentDuration.setText(String(value));
            let _Sum = this.Magnification * (Sum - this.Difference);
            view._Duration_seekbar.setProgress(_Sum);
        });
        this.defineAttr("onChang", (view, attr, value, defineSetter) => {
            var _myFun = eval(value);
            view._Duration_seekbar.setOnSeekBarChangeListener({
                onProgressChanged: (seekBar, progress, fromUser) => {
                    view._CurrentDuration.setText(String(Math.floor((progress / this.Magnification + this.Difference) * 100) / 100));
                    if (fromUser) {
                        _myFun(view._text, Math.floor(progress / this.Magnification + this.Difference));
                    }
                },
                onStartTrackingTouch: function(seekBar) {},
                onStopTrackingTouch: function(seekBar) {
                    //eval(value+"(view._text,progress)");
                }
            });
        });
    };
    SeekBarLayout.prototype.render = function() {
        return (
            <vertical margin="5" >
                            <text id="_text"  w="auto" text="A" textSize="15"gravity="center" layout_gravity="center"/>
                            <frame w="*">
                                <text id="_Duration_Min" w="auto" text="0"margin="10 0 0 0" gravity="center" layout_gravity="left"/>
                                <text id="_CurrentDuration" w="auto" text="0"margin="0 0 0 0" gravity="center" layout_gravity="center"/>
                                <text id="_Duration_Max" w="auto" text="0"margin="0 0 10 0" gravity="center" layout_gravity="right"/>
                            </frame>
                            <seekbar id="_Duration_seekbar" layout_weight="1"/>
                        </vertical>
        );
    };
    SeekBarLayout.prototype.getSum = function() {
        return this.view._Duration_seekbar.getProgress();
    };
    ui.registerWidget("seekbar-layout", SeekBarLayout);
    return SeekBarLayout;
})();


var w = device.width;


ui.layout(
    <vertical>
        <canvas id="canvas" w="{{w}}px"h="{{w}}px"/>
                    <text id="text" text="参数正确" textSize="10" w="*"h="30"/>
        <scroll layout_weight="1">
            <vertical margin="5">
                <vertical bg="#e0e0e0" margin="5">
                    <text text="就下面这6道参数" textSize="17" gravity="center"w="*"/>
                    <seekbar-layout id="s1" w="*" h="auto" text="offset" range="0 {{w}}" sum="1" onChang="setOffset"/>
                    <seekbar-layout id="s2" w="*" h="auto" text="stride" range="{{w}} {{w*2}}" sum="{{w}}" onChang="setStride"/>
                    <seekbar-layout id="s3" w="*" h="auto" text="x" range="0 {{w}}" sum="0" onChang="setX"/>
                    <seekbar-layout id="s4" w="*" h="auto" text="y" range="0 {{w}}" sum="0" onChang="setY"/>
                    <seekbar-layout id="s5" w="*" h="auto" text="width" range="0 {{w}}" sum="{{w}}" onChang="setWidth"/>
                    <seekbar-layout id="s6" w="*" h="auto" text="height" range="0 {{w}}" sum="{{w}}" onChang="setHeight"/>
                </vertical>
            </vertical>
        </scroll>
    </vertical>
);

var offset,stride,x,y,width,height;

var MainImg;
var MainBitmap;
var imgBitmap;

var url = "https://www.autojs.org/assets/uploads/files/1540386817060-918021-20160416200702191-185324559.jpg";
//黑色画笔。
var paint = new Paint;
var paint1 = new Paint;
paint1.setTextSize(75);
//paint.setTextAlign(Paint.Align.CENTER);
//paint.setStrokeWidth(2);
//paint.setStyle(Paint.Style.STROKE);
//paint.setStyle(Paint.Style.FILL);
//paint.setARGB(255, 0, 0, 0);
//paint.setColor(colors.GRAY);
//paint.setTextSize(75);


var canvasRect = new android.graphics.RectF;
var canvasMatrix = new android.graphics.Matrix;
ui.canvas.post(function() {
    threads.start(function(){
    MainImg=images.load(url);
    MainBitmap=MainImg.getBitmap();
    let v = ui.canvas;
    //var rect=new android.graphics.Rect;
    //ui.canvas.getBoundsOnScreen(canvasRect);
    let w = v.getWidth(),
        h = v.getHeight();
    canvasRect.set(new android.graphics.RectF(0, 0, w, h));
    if (MainImg) {
        canvasMatrix.setRectToRect(new android.graphics.RectF(0, 0, MainImg.getWidth(), MainImg.getHeight()), new android.graphics.RectF(canvasRect), android.graphics.Matrix.ScaleToFit.CENTER);
    }else{
        toastLog("加载图片失败");
        ui.finish();
    };
    
    let W=MainImg.width,H=MainImg.height
    offset=0;
    stride=W;
    x=0;
    y=0;
    width=W;
    height=H;
    
  var length=offset+stride*height;

 var pixels = util.java.array("int",length );
//log(bitmap.getPixels.toString());
MainBitmap.getPixels(pixels,offset,stride,x,y,width,height);
//log(Bitmap.createBitmap.toString());
//log(pixels);

imgBitmap=Bitmap.createBitmap(pixels,width,length/width,Bitmap.Config.ARGB_8888);
  
    ui.run(()=>{
       ui.s1.attr("range","0 "+W);
       ui.s1.attr("sum","0");
       ui.s2.attr("range","0 "+W*2);
       ui.s2.attr("sum",""+W);
       ui.s3.attr("range","0 "+W);
       ui.s3.attr("sum","0");
       ui.s4.attr("range","0 "+H);
       ui.s4.attr("sum","0");
       ui.s5.attr("range","0 "+W);
       ui.s5.attr("sum",""+W);
       ui.s6.attr("range","0 "+W);
       ui.s6.attr("sum",""+H);
     });
    });
});


var ASX=new XYToMatrix(null,2);

ui.canvas.setOnTouchListener(ASX.touchListener);
ui.canvas.on("draw", function(canvas) {
    var w = canvas.getWidth();
    var h = canvas.getHeight();
    canvas.drawARGB(255, 127, 127, 127)
    if (MainImg) {
        canvas.drawImage(MainImg, 0, 0, paint1);
        if(imgBitmap){
        
        let matrix=new android.graphics.Matrix(canvasMatrix);;
        matrix.postConcat(ASX.matrix);
        canvas.setMatrix(matrix);
        canvas.drawBitmap(imgBitmap, 0, 0, paint);
        };
    }else{
        canvas.drawText("请等待加载图片",0,h/2,paint1);
    };
});


function setOffset(T,value){
   offset=value; 
   newBit();
};
function setStride(T,value){
   stride=value; 
   newBit();
};
function setX(T,value){
   x=value; 
   newBit();
};
function setY(T,value){
   y=value; 
   newBit();
};
function setWidth(T,value){
   width=value; 
   newBit();
};
function setHeight(T,value){
   height=value; 
   newBit();
};



function newBit() {
    
var length=offset+stride*height;

 var pixels = util.java.array("int",length );
//log(bitmap.getPixels.toString());
try{
MainBitmap.getPixels(pixels,offset,stride,x,y,width,height);
//log(Bitmap.createBitmap.toString());
//log(pixels);

imgBitmap=Bitmap.createBitmap(pixels,width,length/width,Bitmap.Config.ARGB_8888);
   ui.run(()=>{
       ui.text.setText("参数正确");
       ui.text.setTextColor(colors.parseColor("#00ff00"));
   }); 
}catch(e){
   ui.run(()=>{
       ui.text.setText(""+e);
       ui.text.setTextColor(colors.parseColor("#ff0000"));
   }); 
};
};





function XYToMatrix(matrix, maxPoints) {
    this.matrix = matrix||new android.graphics.Matrix;
    this.invertMatrix=new android.graphics.Matrix;
    this.matrix.invert(this.invertMatrix);
    this.maxPoints = maxPoints||2;
    this.maxPointsListener = function(){
    this.matrix = new android.graphics.Matrix;
        
    };
    this.Touch = {
        Matrix: this.matrix, 
        PointStart: new Array,
        PointCurrent: new Array,

    };
    this.touchListener = new android.view.View.OnTouchListener((view, event) => {
        try {
            var W = view.getWidth();
            var H = view.getHeight();
            var PC = event.getPointerCount();
            switch (event.getActionMasked()) {
                case event.ACTION_MOVE:
                    try {
                        for (let i = 0; i < PC; i++) {
                            let id = event.getPointerId(i);
                            let x = event.getX(i);
                            let y = event.getY(i);
                            this.Touch.PointCurrent[i * 2] = x;
                            this.Touch.PointCurrent[i * 2 + 1] = y;
                        };

                        //记录当前各手指坐标信息。
                        if (PC > this.maxPoints) { //手指数大于4个虽然记录坐标信息,但是不进行矩阵操作。
                            this.maxPointsListener(view, event);
                            break;
                        };

                        var Matrix = new android.graphics.Matrix();
                        Matrix.setPolyToPoly(this.Touch.PointStart, 0, this.Touch.PointCurrent, 0, PC > 4 ? 4 : PC);
                        this.matrix = new android.graphics.Matrix();
                        this.matrix.setConcat(Matrix, this.Touch.Matrix);
                        //进行矩阵运算并刷新矩阵。
                        this.matrix.invert(this.invertMatrix);
                        //反矩阵
                    } catch (e) {
                        throw "MOVE " + e;
                    };


                    break;
                case event.ACTION_CANCEL:
                    //log("CANCEL");
                    this.Touch.PointStart = new Array;
                    this.Touch.PointCurrent = new Array;

                    break;
                case event.ACTION_OUTSIDE:
                    //log("OUTSIDE");

                    break;
                default:
                    var I = Math.floor(event.getAction() / 256);
                    var ID = event.getPointerId(I);
                    var X = event.getX(I);
                    var Y = event.getY(I);
                    switch (event.getActionMasked()) {
                        case event.ACTION_DOWN:
                            try {
                                log("down");
                                //当有新的手指按下时使坐标差为零。//开始新的多指矩阵运算方式
                                this.Touch.PointStart.splice(I * 2, 0, X, Y);
                                this.Touch.PointCurrent.splice(I * 2, 0, X, Y);
                                this.Touch.Matrix = this.matrix;
                                //log(this.Touch.Matrix);
                            } catch (e) {
                                throw "DOWN " + e;
                            };
                            break;
                        case event.ACTION_UP:
                            //最后一个手指抬起。
                            log("up");
                            this.Touch.PointStart = new Array;
                            this.Touch.PointCurrent = new Array;

                            break;
                        case event.ACTION_POINTER_DOWN:
                            log("POINTER_DOWN");
                            try {
                                //当有新的手指按下时使坐标差为零。//开始新的多指矩阵运算方式
                                this.Touch.PointStart.splice(I * 2, 0, X, Y);
                                this.Touch.PointCurrent.splice(I * 2, 0, X, Y);
                                //获取点的总数量。
                                this.Touch.Matrix = this.matrix;
                                for (let i = 0; i < PC; i++) {
                                    this.Touch.PointStart[i * 2] = this.Touch.PointCurrent[i * 2];
                                    this.Touch.PointStart[i * 2 + 1] = this.Touch.PointCurrent[i * 2 + 1];
                                };
                                //保存坐标的数组。
                                if (PC > this.maxPoints) { //手指数大于4个化为原始矩阵虽然记录坐标信息,但是不进行矩阵操作。
                                    this.maxPointsListener(view, event);
                                    break;
                                };

                                var Matrix = new android.graphics.Matrix();
                                Matrix.setPolyToPoly(this.Touch.PointStart, 0, this.Touch.PointCurrent, 0, PC > 4 ? 4 : PC);
                                this.matrix = new android.graphics.Matrix();
                                this.matrix.setConcat(Matrix, this.Touch.Matrix);
                                //进行矩阵运算并刷新矩阵。
                                this.matrix.invert(this.invertMatrix);
                                //反矩阵
                            } catch (e) {
                                throw "P_DOWN " + e;
                            };

                            break;
                        case event.ACTION_POINTER_UP:
                            log("POINTER_UP");
                            try {
                                this.Touch.Matrix = this.matrix;
                                for (let i = 0; i < PC; i++) {
                                    this.Touch.PointStart[i * 2] = this.Touch.PointCurrent[i * 2];
                                    this.Touch.PointStart[i * 2 + 1] = this.Touch.PointCurrent[i * 2 + 1];
                                };
                                this.Touch.PointStart.splice(I * 2, 2);
                                this.Touch.PointCurrent.splice(I * 2, 2);

                            } catch (e) {
                                throw "P_UP " + e;
                            };
                            break;
                    };
            };
        } catch (e) {
            throw "imgTouch: " + e;
        };

        return true;

    });
};

实例简介】autojs例子大全,一千六百多个脚本,简单的到复杂的例子,统统有,小白学完马上变大神,大神学了变超神。 脚本内容包含: 几十种类型的UI脚本,抖音、QQ、微信、陌陌、支付宝等自动化操作的脚本、还有部分协议列表,HTTP协议(POST、GET)上传下载,接码模块,百度文字识别api模块,文件操作模块:txt文本读一行删一行,等等其他例子 【实例截图】 【核心代码】 └─1688 !运动点赞!.js (qq语音红包.js (协议)快阅读.js (可修改王者荣耀启动动画)视频播放器(1).js (实?).js (小瓜)九州行(720x1440)多账号游戏辅助.js -控件集合.js -控件集合2.js 0(1).js 0(2).js 0.js 00-仿真曲线滑动2.js 00-关闭指定应用-通用版.js 00-本地时间及网络时间验证改版.js 00-正则匹配关闭应用-适用大部分手机(1).js 00-正则匹配关闭应用-适用大部分手机.js 00-简化点击控件.js 00-结束事件与结束应用(1).js 00-结束事件与结束应用.js 00-读&删指定文本行.js 00-读取txt文本每一行&去空格.js 00-通知相册.js 001-Hello JS.js 002-if条件.js 003-循环break.js 004-循环for.js 005-循环while.js 0根据图色点击.js 0计分器.js 1(1).js 1.js 1024下载.js 11.js 111.js 11111111111.js 12.js 1233.js 1543275531466-mysl.js 18禁 小撸怡情,大撸伤身.js 190620_计算器.js 1gps码表.js 1别踩白块.js 1当前页面所有文字内容.js 1怎样动态增加text标签.js 1截图脚本.js 1提取QQ收藏完整内容.js 1改变字体颜色大小和内容.js 1易码获取短信.js 1查询本机IP地理位置.js 1比1比4悬浮窗可限制显示行数.js 1求交集.js 1爬取bilibili视频弹幕.js 1箭头函数和function的this对比.js 1鸣人分身.js 2.0示例脚本合集.js 2.js 2.离线文字转语音~发声器.js 2018-05-16.js 2018年刑侦科推理题.js 2019-10-13蚂蚁森林.js 2048全自动(1).js 2048全自动.js 2048游戏机(1).js 2048游戏机(2).js 2048游戏机(3).js 2048游戏机(4).js 2048游戏机.js 2048游戏机UI版.js 2048玲珑棋局.js 2与 y960对比颜色找顶点.js 3d视角.js 6.0start(1).js 6.0start(2).js 6.0start(3).js 6.0start.js 643个城市数组.js 6(0.51).js 8.0打开关闭网络usb共享.js 9420-麦小兜(1).js 99乘法表.js a5main.js activity.js AD790179-8D8A-4CC6-BF68-25D58C7FD745.js adb5037常用命令.js aes加解密000.js AES加解密demo.js after work.js AJ-网易云签到.js AJ_api_search(1).js AJ_api_search.js aj内置文件管理.js AJ功能搜索(1).js AJ功能搜索.js aj数据文件管理.js Alipay_collect_energy_Optimize.js Animal.js Ant_forest.js apk打包成js格式.js(1).js apk打包成js格式.js.js app启动停止和输入(2)(1).js app启动停止和输入(2).js Auto.JS悬浮按钮(第二版).js Auto.JS悬浮按钮大柒(第二版).js Auto.js悬浮知识点.js Auto.js教程浏览器.js auto.js无root取短信.js autoGetCatCoin.js autojs常用函数(1).js autojs开启无障碍.js Autojs悬浮按钮(全版本可用).js Autojs悬浮按钮.js autojs爬取百度贴吧.js AvlTree(平衡树).js AvlTree.js badapple.js Base64(1).js base64.js Base64_Codec.js base64和des.js bmob上传文件.js bmob用户表的增删改查.js bmob用户验证demo.js bmob示例-对象的增删改查.js caiji.js Calender.js canvas画正方形.js ceshi.js click控件获取坐标位置.js ColorMatrix处理图片↘颜色矩阵.js ColorMatrix颜色矩阵的用法.js common(1).js common.js config.js DailyTask.js DensityUtil.js didi.js digit.js dou_yin_yang_hao(1).js dou_yin_yang_hao.js download.js drawBitMap之平移佐罗.js dy.js dy抖音评论.js en.js enable.js exec的实践.js fab.js fenduan.js Fermat素性测试.js file_chooser_dialog.js FlashPictureGet(1).js Fuck加密机(不支持注释不支持双斜杠不支持ui).js funnyEncoderPlus2.0.js gestures动作数据生成.js getPixels参数详解.js gitee-webhook.js git常用命令.js gpsui.js gps时间获取.js HAHA小视频无限撸money(无解说).js hello语音刷房脚本(雷电).js hl4a.js HTTP请求.js http超时返回null.js ID3MusicDealer.js installInfo.js intent安装apk.js Intent生成器(2).js Intent生成器(3).js Intent生成器.js ipv6聊天室.js ipv6聊天室2.0.js.js ip地址查询.js ip地址查询UI.js java.js java代码改成autojs过程.js JD_Captcha_Test.js jimu.js jm_plp.js jquery1.js jsdroid.js json格式化.js jsoupDemo.js JS代码加密例子.js js加密器.js js块级作用域.js js查询.js js进阶教程02.js js进阶教程03.js juexin_Qtiao.js LayoutInflater.js leimu.js listView勾选框丢了怎么解决.js list隔行变色.js long.js long2.js ls_socket.js lunar.js LZ动作.js main(1)(1).js main(1)(2).js main(1)(3).js main(1)(4).js main(1).js main(10).js Main(11).js main(12).js main(13).js main(14).js main(2)(1).js main(2).js main(3).js main(5).js main(6).js main(7).js main(9).js main.js match的实践.js md5(1).js
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恶猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值