求canvas小程序该效果,要求最终输出rgb值对象需要根据传入的rgb正确定位点的位置

求canvas小程序该效果,要求最终输出rgb值对象需要根据传入的rgb正确定位点的位置,第1张

最近有一个需求说是需要换颜色

最后其实给我拒绝了,因为我说很难实现。但是心中还是上心了。

下面是替换颜色的方法。效果还行吧。一般般

主要代码还是copy别人的。这里就写一下,当记录

1、canvas的getImageData所生成的组成

根据循环可以得出

组成是ARGB格式,第一个是透明度,后续rgba

2、得出的循环需要按4的倍数进行循环,否则至少是卡死的地步

for (var j = 0; j < pdatalength; j+=4) { if (pdata[j] === 95) pdata[j] = colorArr[0]; if (pdata[j - 1] === 170) pdata[j-1] = colorArr[1]; if (pdata[j - 2j] === 129) pdata[j-2] = colorArr[2]; } 复制代码

3、注意替换颜色应该是倒序

所以0,1,2,3的顺序

替换的rgb颜色应该是3,2,1

得到数组rgb:data[i],data[i-1],data[2]

替换方式看上面代码

4、完整代码格式

<!DOCTYPE html> <html> <style> #btn { width: 100px; height: 50px; background: coral; position: fixed; top: 0; } </style> <head> <script type="text/javascript"> var c, ctx,myImage; function displayImage() { myImage = new Image(); myImagesrc = "1719ebbc83be39f0webpjpg"; c = documentgetElementById("myCanvas"); if (cgetContext) { ctx = cgetContext("2d"); myImageonload = function() { ctxdrawImage(myImage, 0, 0); } } } //colorArr 替换后的颜色 // 替换前的颜色 function getColorData(colorArr, color2) { imageD = ctxgetImageData(0, 0, myImagewidth, myImageheight); var pdata = imageDdata; for (var j = 0; j < pdatalength; j+=4) { if (pdata[j] === color2[0]) pdata[j] = colorArr[0]; if (pdata[j + 1] === color2[1]) pdata[j + 1] = colorArr[1]; if (pdata[j + 2] === color2[2]) pdata[j + 2] = colorArr[2]; } ctxputImageData(imageD, 0, 0); } function colorChange() { // rgb颜色 getColorData([102, 51, 153], [95, 170, 129]); } </script> </head> <body onload="displayImage()"> <p>原始:</p> <img id="myPhoto" src="1719ebbc83be39f0webpjpg"> <p>Canvas:</p> <canvas id="myCanvas" width="200" height="200"></canvas> <button id="btn" onclick="colorChange()">变颜色啦!</button> </body> </html>

微信小程序动态显示和隐藏某个控件新手教程。在小程序的开发过程中,经常需要用到隐藏某个控件这种情况。

因为项目原本是需要将两个canvas切换,但是小程序的canvas支持的功能实在是少,本来就jQuery mobile或者将canvas转为就可以很容易实现滑动效果,但是都不支持,最后只能是做一个canvas,需要时显示,不需要时隐藏。

实现方法:

logswxml

123456

<view> <button bindtap="onChangeShowState">{{showView'Click To Check IdleReason':'Click To Check MTStatus'}}</button> </view> <view class="{{showView'bright789_view_show':'bright789_view_hide'}}"> <canvas canvas-id="pieCanvas1" ></canvas> </view>

logsjs

123456789101112131415

Page({ data: { showView: true }, onLoad: function (options) { // 生命周期函数--监听页面加载 showView: (optionsshowView == "true" true : false) } , onChangeShowState: function () { var that = this; thatsetData({ showView: (!thatdatashowView) }) }, })

logswxss

123456

bright789_view_hide{ display: none; } bright789_view_show{ display: block; }

从上面三个页面的文件可以很明显看出逻辑:logswxml的onChangeShowState按钮会在logsjs中触发一个事件,它会改变showView的值,而在logswxml中会根据showView的值确定画布canvas的class属性,而在logswxss中具体再设置两个class属性哪个是否显示

在微信小程序中设置自定义标题后,自定义标题并不能覆盖住canvas

小程序中 canvas、textearea、video等组件使用原生渲染,层级最高,无法通过z-idnex设置进行控制

1在微信小程序的社区也有类型的问题,官方给出的解决办法是将其进行隐藏,在需要时进行显示。

2介于我的问题是canvas显示问题,并且canvas不是实时渲染,可以将canvas在渲染后变成进行展示:wxcanvasToTempFilePath

如果可以用css动画进行解决,也是可以的

如何将canvas所画的图形清除或者删除掉?

答:楼主的问题是怎么解决的?我最近也遇到了同样的问题我想画扇形,每隔1S更新一下扇形的面积不知道该怎么样更新?请指导一下 先谢谢你了

如何清除canvas上面画的所有图形

答:clearRect函数 contextclearRect(0,0,300,300); 第一个参数:x的起始位置 第二个参数:y的起始位置 第三个参数:清除的宽度 第四个参数:清除的高度

java 中如何将画在画布上的图形清除(从canvas类继

答:清除方法一、 在的位置接着画一个矩形覆盖这个,并且把颜色设置成和背景色一样就OK了! 代码如下: contextfillStyle="ffffff";//白色为例子; contextfillRect(400,100,400,100); 注意,上面的代码要放在imageObjonload里面才有效果

<!DOCTYPE html>

<html>

<head>

</head>

<body align="center">

    <canvas id="drawing" width="400" height="400">A drawing of someing!</canvas>

    <script type="text/javascript">

        //绘制饼图

        var drawCircle = function(canvasId, data_arr, color_arr){

            var drawing = documentgetElementById(canvasId);

            if(drawinggetContext) {

                var context = drawinggetContext('2d');

                var radius = drawingheight/2 -20,//半径

                    ox = radius +20, oy = radius +20;//圆心

                var width = 30, height = 10, //图例宽高

                    posX = ox  2 +20, posY = 30;//图例位置

                var textX = posX + width + 5, textY = posY + 10;//文本位置

                var startAngle = 0, endAngle = 0;//起始、结束弧度

                contextstrokeStyle = 'Purple';

                contextlineWidth = 3;

                contextstrokeRect(0, 0, drawingwidth, drawingheight);

                for(var i=0, len=data_arrlength; i<len; i++) {

                    //绘制饼图

                    endAngle += data_arr[i]  2MathPI;

                    contextfillStyle = color_arr[i];

                    contextbeginPath();

                    contextmoveTo(ox, oy);

                    contextarc(ox, oy, radius, startAngle, endAngle, false);

                    contextclosePath();

                    contextfill();

                    startAngle = endAngle;

                }

            }

        };

        var init = function(){

            var data_arr = [005, 025, 06, 01],

                color_arr = ['#00FF21', '#FFAA00', '#00AABB', '#FF4400'];

            drawCircle('drawing', data_arr, color_arr);

        };

        init();

    </script>

</body>

</html>

Canvas 组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。

应用程序必须为 Canvas 类创建子类,以获得有用的功能(如创建自定义组件)。必须重写paint 方法,以便在 canvas 上执行自定义图形。

举例:

Paneladd(new MyCanvas());//往panel中添加画布canvas

class MyCanvas extends Canvas {//定义一个canvas

public MyCanvas () {

setBackground (ColorGRAY);//设置背景为灰色

setSize(300, 300);//定义canvs大小是300300

}

public void paint (Graphics g) {//画布的paint方法,

Graphics2D g2;

g2 = (Graphics2D) g;

g2drawString ("It is a custom canvas area", 70, 70);//屏幕输出该字符串

}

}

在微信小程序使用canvas绘制圆角矩形时,在Android出现变形、锯齿现象,而iOS正常。

根据小程序社区回复:使用ctxarc + ctxlineTo就能避免Android错误,Android只使用ctxarcTo不兼容!!!

解决方案:

参考文章: 微信小程序 canvas 绘图问题总结

公司提了压缩的需求,在网上查了些资料,用canvas实现了,但发现使用wxcanvasToTempFilePath如果只是打印地址然后点击地址查看,或者保存至相册再查看,拿到的就是正常的,但我如果要在压缩后的success回调中使用去做一些事情(比如编码wxgetFileSystemManager()readFile、上传至服务器wxrequest),拿到的就是空白的。

经过多次调试后发现,是这里的问题

这里需要设置的多一点。我之前设置的100,即100ms,可能因为上传至服务器是异步的,导致100ms内canvas没法完成加载 *** 作,生成的就是空白的。改成1000之后,有足够长的时间渲染,就不会出现空白的问题了。

以上就是关于求canvas小程序该效果,要求最终输出rgb值对象需要根据传入的rgb正确定位点的位置全部的内容,包括:求canvas小程序该效果,要求最终输出rgb值对象需要根据传入的rgb正确定位点的位置、开发微信小程序时,如何隐藏控件、微信小程序中 canvas 层级过高问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10210497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存