canvas绘图_erciyuanfulitu

这篇博客主要介绍了如何使用HTML5的canvas元素进行图像的倒序、随机和间歇绘制,包括随机数在图像处理中的应用,是前端开发中关于canvas绘图的一个实践教程。
部署运行你感兴趣的模型镜像

jmtt
jmtt
https://cm365.club/FqUf58
http://jmcomic.one/
5 随机数储存

<p id='show'>None</p>
<canvas style='border:1px solid;width:270'id='mcvs'  width=300 height=300></canvas>
<img style='visibility:hidden' id='img' src="https://img5.51tietu.net/pic/2019-080802/xr0s03fp520xr0s03fp520.jpg" alt="20160418_193134_007" width="777" height="808" />
<script>
var fgs50=[[9,10],[3,9],[7,15],[0,14],[6,11],[3,15],[14,2],[10,2],[4,5],[10,6],[12,12],[10,7],[0,10],[8,6],[13,8],[8,8],[6,10],[14,3],[4,12],[9,12],[9,9],[6,4],[9,7],[0,9],[2,5],[12,8],[9,8],[5,15],[13,14],[14,0],[8,11],[8,3],[5,9],[13,6],[6,8],[0,12],[8,9],[5,7],[6,2],[0,2],[6,12],[11,15],[4,2],[9,11],[0,5],[1,13],[14,8],[0,13],[9,13],[0,11],[1,8],[11,12],[6,14],[2,15],[8,2],[1,7],[11,3],[5,6],[0,15],[11,9],[5,12],[13,10],[11,14],[5,10],[14,11],[1,10],[11,6],[3,14],[13,7],[6,0],[5,5],[8,4],[8,10],[11,5],[10,10],[6,3],[14,5],[5,13],[8,15],[14,4],[12,5],[4,3],[12,13],[4,7],[14,13],[12,6],[5,8],[6,9],[3,4],[4,13],[1,14],[3,2],[12,0],[3,3],[7,2],[3,1],[10,14],[5,2],[5,1],[11,7],[9,14],[6,1],[11,11],[10,4],[3,13],[14,1],[4,8],[14,14],[2,4],[7,14],[2,3],[2,1],[13,4],[3,12],[3,7],[1,4],[12,10],[6,6],[14,12],[14,9],[1,3],[7,11],[1,0],[11,4],[5,4],[1,12],[12,9],[13,15],[10,13],[1,11],[4,11],[7,4],[2,2],[7,12],[13,9],[7,6],[11,10],[10,12],[10,15],[2,7],[13,11],[12,15],[14,7],[7,1],[1,5],[13,5],[10,3],[13,3],[7,10],[2,11],[3,0],[12,14],[9,0],[7,5],[4,10],[10,8],[1,9],[1,15],[8,7],[0,4],[12,1],[5,0],[2,8],[5,3],[4,15],[2,12],[9,5],[13,2],[9,2],[4,14],[1,2],[2,10],[13,1],[10,11],[0,7],[0,8],[2,0],[0,6],[8,14],[0,0],[12,3],[1,6],[2,6],[6,7],[3,5],[0,3],[10,5],[9,3],[8,1],[14,10],[11,1],[4,1],[4,6],[2,13],[13,12],[3,11],[12,11],[6,5],[13,0],[3,8],[4,9],[7,7],[9,15],[14,6],[10,1],[0,1],[8,0],[7,8],[6,13],[6,15],[3,10],[10,0],[11,0],[11,13],[9,4],[2,9],[2,14],[11,8],[12,4],[5,11],[7,13],[10,9],[13,13],[14,15],[9,6],[8,12],[7,9],[7,3],[4,4],[7,0],[8,13],[4,0],[1,1],[5,14],[8,5],[12,2],[3,6],[9,1],[11,2],[12,7]];   
var gogg=null;
img.onload=function(){
//img.width=img.width/3;img.height=img.height/3
let ctx=mcvs.getContext('2d');
//ctx.drawImage(img,400,200,200,200,0,0,100,100)
let fgs=20;
let w=img.width,h=img.height,fg=fgs,dfg=fgs,dcol=parseInt(w/fg),xfgs=parseInt(w/fg),yfgs=parseInt(h/fg);
mcvs.width=w;mcvs.height=h
let iarr=[];for(let a=0;a<xfgs*yfgs;a++){iarr.push([a%xfgs,(a-a%xfgs)/xfgs])}
daoxuf(iarr);suijif(iarr)
let str='[';for(let a=0;a<iarr.length;a++){str+='['+iarr[a]+']';if(a<iarr.length-1){str+=','}};str+=']';
show.innerHTML=str;
let fn=0;gogg=gog;
let siv=setInterval('gogg()',0);
function gog(){/*show.innerHTML=fn;*/let a=fn;if(fn<iarr.length){fn++}else{clearInterval(siv)};let sx=iarr[a][0]*fg,sy=iarr[a][1]*fg,dpos=topos(a,dcol),dx=dpos[0]*dfg,dy=dpos[1]*dfg;ctx.drawImage(img,sx,sy,fg,fg,dx,dy,dfg,dfg);ctx.strokeRect(dx,dy,dfg,dfg);/*ctx.strokeText(a,dx+15,dy+15);*/}
}
function topos(n,col){ return [n%col,(n-n%col)/col] }
function daoxuf(arr){let al=arr.length-1;for(let a=0;a<arr.length/2;a++){let temp=arr[a];arr[a]=arr[al-a];arr[al-a]=temp}}
function suijif(arr){for(let a=0;a<arr.length;a++){let rm=Math.floor(Math.random()*arr.length);let temp=arr[a];arr[a]=arr[rm];arr[rm]=temp;}}
</script>

4

<p id='show'>None</p>
<canvas style='border:1px solid;width:270'id='mcvs'  width=300 height=300></canvas>
<img style='visibility:hidden' id='img' src="https://img5.51tietu.net/pic/2019-080802/xr0s03fp520xr0s03fp520.jpg" alt="20160418_193134_007" width="777" height="808" />
<script>
var gogg=null;
img.onload=function(){
//img.width=img.width/3;img.height=img.height/3
let ctx=mcvs.getContext('2d');
//ctx.drawImage(img,400,200,200,200,0,0,100,100)
let fgs=50;
let w=img.width,h=img.height,fg=fgs,dfg=fgs,dcol=parseInt(w/fg),xfgs=parseInt(w/fg),yfgs=parseInt(h/fg);
mcvs.width=w;mcvs.height=h
let iarr=[];for(let a=0;a<xfgs*yfgs;a++){iarr.push([a%xfgs,(a-a%xfgs)/xfgs])}
daoxuf(iarr);suijif(iarr)
let fn=0;gogg=gog;
let siv=setInterval('gogg()',50);
function gog(){show.innerHTML=fn;let a=fn;if(fn<iarr.length){fn++}else{clearInterval(siv)};let sx=iarr[a][0]*fg,sy=iarr[a][1]*fg,dpos=topos(a,dcol),dx=dpos[0]*dfg,dy=dpos[1]*dfg;ctx.drawImage(img,sx,sy,fg,fg,sx,sy,dfg,dfg);ctx.strokeRect(sx,sy,dfg,dfg);/*ctx.strokeText(a,dx+15,dy+15);*/}
}
function topos(n,col){ return [n%col,(n-n%col)/col] }
function daoxuf(arr){let al=arr.length-1;for(let a=0;a<arr.length/2;a++){let temp=arr[a];arr[a]=arr[al-a];arr[al-a]=temp}}
function suijif(arr){for(let a=0;a<arr.length;a++){let rm=Math.floor(Math.random()*arr.length);let temp=arr[a];arr[a]=arr[rm];arr[rm]=temp;}}
</script>

3 间歇绘制

<p id='show'>None</p>
<canvas style='border:1px solid'id='mcvs'  width=300 height=300></canvas>
<img style='visibility:hidden' id='img' src="https://img5.51tietu.net/pic/2019-080802/xr0s03fp520xr0s03fp520.jpg" alt="20160418_193134_007" width="777" height="808" />
<script>
var gogg=null;
img.onload=function(){
//img.width=img.width/3;img.height=img.height/3
let ctx=mcvs.getContext('2d');
//ctx.drawImage(img,400,200,200,200,0,0,100,100)
let fgs=50;
let w=img.width,h=img.height,fg=fgs,dfg=fgs,dcol=parseInt(w/fg),xfgs=parseInt(w/fg),yfgs=parseInt(h/fg);
mcvs.width=w;mcvs.height=h
let iarr=[];for(let a=0;a<xfgs*yfgs;a++){iarr.push([a%xfgs,(a-a%xfgs)/xfgs])}
//daoxuf(iarr);/*suijif(iarr)*/
let fn=0;gogg=gog;
let siv=setInterval('gogg()',50);
function gog(){show.innerHTML=fn;let a=fn;if(fn<iarr.length){fn++}else{clearInterval(siv)};let sx=iarr[a][0]*fg,sy=iarr[a][1]*fg,dpos=topos(a,dcol),dx=dpos[0]*dfg,dy=dpos[1]*dfg;ctx.drawImage(img,sx,sy,fg,fg,dx,dy,dfg,dfg);ctx.strokeRect(dx,dy,dfg,dfg);/*ctx.strokeText(a,dx+15,dy+15);*/}
}
function topos(n,col){ return [n%col,(n-n%col)/col] }
function daoxuf(arr){let al=arr.length-1;for(let a=0;a<arr.length/2;a++){let temp=arr[a];arr[a]=arr[al-a];arr[al-a]=temp}}
function suijif(arr){for(let a=0;a<arr.length;a++){let rm=Math.floor(Math.random()*arr.length);let temp=arr[a];arr[a]=arr[rm];arr[rm]=temp;}}
</script>

2 倒序和随机

<canvas style='border:1px solid'id='mcvs'  width=300 height=300></canvas>
<img style='visibility:hidden' id='img' src="https://img5.51tietu.net/pic/2019-080802/xr0s03fp520xr0s03fp520.jpg" alt="20160418_193134_007" width="777" height="808" />
<script>
img.onload=function(){
//img.width=img.width/3;img.height=img.height/3
let ctx=mcvs.getContext('2d');
//ctx.drawImage(img,400,200,200,200,0,0,100,100)
let fgs=10;
let w=img.width,h=img.height,fg=fgs,dfg=fgs,dcol=parseInt(w/fg),xfgs=parseInt(w/fg),yfgs=parseInt(h/fg);
mcvs.width=w;mcvs.height=h
let iarr=[];for(let a=0;a<xfgs*yfgs;a++){iarr.push([a%xfgs,(a-a%xfgs)/xfgs])}
daoxuf(iarr);suijif(iarr)
for(let a=0;a<iarr.length;a++){
let sx=iarr[a][0]*fg,sy=iarr[a][1]*fg,dpos=topos(a,dcol),dx=dpos[0]*dfg,dy=dpos[1]*dfg
ctx.drawImage(img,sx,sy,fg,fg,dx,dy,dfg,dfg)
ctx.strokeRect(dx,dy,dfg,dfg);//ctx.strokeText(a,dx+15,dy+15);
}
}
function topos(n,col){ return [n%col,(n-n%col)/col] }
function daoxuf(arr){let al=arr.length-1;for(let a=0;a<arr.length/2;a++){let temp=arr[a];arr[a]=arr[al-a];arr[al-a]=temp}}
function suijif(arr){for(let a=0;a<arr.length;a++){let rm=Math.floor(Math.random()*arr.length);let temp=arr[a];arr[a]=arr[rm];arr[rm]=temp;}}

</script>

1

<canvas id='mcvs'  width=300 height=300></canvas>
<img id='img' src="https://img5.51tietu.net/pic/2019-080802/xr0s03fp520xr0s03fp520.jpg" alt="20160418_193134_007" width="777" height="808" />
<script>
img.onload=function(){
img.width=img.width/3;img.height=img.height/3
let ctx=mcvs.getContext('2d');
ctx.drawImage(img,400,200,200,200,0,0,100,100)
}
</script>

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

`lv_canvas_set_px_color` 和 `lv_canvas_set_px` 都是LVGL(Light and Versatile Graphics Library)中用于在画布(canvas)上设置像素的函数,它们的主要区别如下: ### 功能用途 - `lv_canvas_set_px_color`:该函数直接使用 `lv_color_t` 类型的颜色值来设置指定位置的像素颜色。这意味着可以直接传入一个完整的颜色对象,例如 `LV_COLOR_RED` 或者通过 `lv_color_make` 等函数创建的自定义颜色。这种方式对于需要精确控制颜色的场景非常方便,尤其是在需要使用特定的RGB值或者预定义颜色常量时。 ```c void lv_canvas_set_px_color(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_color_t color); ``` - `lv_canvas_set_px`:此函数使用一个索引值来设置像素颜色。在某些情况下,画布可能使用索引颜色模式(例如调色板模式),此时每个像素对应调色板中的一个索引,而不是直接的RGB值。`lv_canvas_set_px` 函数就是用于这种索引颜色模式的,通过传入一个调色板索引值来设置像素颜色。 ```c void lv_canvas_set_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, uint8_t idx); ``` ### 参数类型 - `lv_canvas_set_px_color` 的第三个参数是 `lv_color_t` 类型,它代表一个完整的颜色值,包含了红、绿、蓝等颜色通道的信息。 - `lv_canvas_set_px` 的第三个参数是 `uint8_t` 类型,它是一个调色板的索引值,用于从调色板中选择对应的颜色。 ### 应用场景 - `lv_canvas_set_px_color` 适用于需要直接指定RGB颜色的场景,例如绘制渐变、填充特定颜色的形状等。 - `lv_canvas_set_px` 适用于使用调色板的画布,当需要在有限的颜色集合中选择颜色时,使用调色板索引可以节省内存。 ### 示例代码 以下是使用这两个函数的简单示例: ```c #include "lvgl/lvgl.h" // 创建一个画布对象 lv_obj_t * canvas = lv_canvas_create(lv_scr_act()); lv_canvas_set_buffer(canvas, buf, 320, 240, LV_IMG_CF_TRUE_COLOR); // 使用 lv_canvas_set_px_color 设置像素颜色 lv_canvas_set_px_color(canvas, 10, 10, LV_COLOR_RED); // 使用 lv_canvas_set_px 设置像素颜色(假设使用调色板模式) // 这里假设调色板的第2个颜色是绿色 lv_canvas_set_px(canvas, 20, 20, 2); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值