绘制弧线将线性渐变html5画布(Draw arc will linear gradient html5 canvas)

I have a circular arc drawn in canvas is it possible to give it linear gradient with three colors??

原文:https://stackoverflow.com/questions/14193956

更新时间:2019-12-30 17:40

最满意答案

是的,这是可能的! Javascript中有一个名为createLinearGradient的方法,它将画布上下文作为源,并应用由sx , sy , dx , dy坐标定义的渐变。 前两个选项定义起始坐标,最后两个定义结束坐标。

var gradient = context.createLinearGradient(sx, sy, dx, dy);

调用此方法后,您可以通过调用colorStop方法将渐变颜色应用于画布:

gradient.addColorStop(0, '#f00'); // red

gradient.addColorStop(0.5, '#ff0'); // yellow

gradient.addColorStop(1, '#00f'); // blue

这些是在画布上实现渐变的基本要素。 然后,如果您需要圆形渐变,下一步将是计算圆形颜色渐变位置。 这可以通过以下公式来满足:

var applyAngle = function (point, angle, distance) {

return {

x : point.x + (Math.cos(angle) * distance),

y : point.y + (Math.sin(angle) * distance)

};

};

然后将生成的x和y位置插入到createLinearGradient方法中,这将创建一个漂亮的圆形渐变。 当然,您需要使用arc方法使其成为圆形。

Yes, it's possible! There is a method in Javascript, named createLinearGradient which gets as source the canvas context and applies a gradient defined by sx, sy, dx, dy coordinates. The first two options defines the starting coordinates and last two the ending coordinates.

var gradient = context.createLinearGradient(sx, sy, dx, dy);

After invoking this method you can apply gradient colors to your canvas by calling the colorStop method:

gradient.addColorStop(0, '#f00'); // red

gradient.addColorStop(0.5, '#ff0'); // yellow

gradient.addColorStop(1, '#00f'); // blue

These are the base ingredients for implementing a gradient on a canvas. Then, the next step would be to calculate the circular color gradient positions if you need a circular gradient. This can be satisfied by the following formula:

var applyAngle = function (point, angle, distance) {

return {

x : point.x + (Math.cos(angle) * distance),

y : point.y + (Math.sin(angle) * distance)

};

};

Then plugin the resulted x and y position into the createLinearGradient method, which would create a nice looking circular gradient. Of course you need to use the arc method to make it circular.

相关问答

嘿我从这里偷走了这个: 在Android中用SweepGradient画一个圆弧 但它工作正常,我用的是LinearGradient。 Shader gradient = new SweepGradient (0,getMeasuredHeight()/2, Color.RED, Color.WHITE);

lightRed.setShader(gradient);

canvas.drawArc(rectf, -90, 360, false, lightRed);

Hey I stole thi

...

你只需要记住一点三角。 如果你的中心点是x , y和radius是r ; 那么角度alpha上的圆上的坐标是: pointX = x + Math.cos(alpha) * r;

pointY = y + Math.sin(alpha) * r;

而且你有两个角度,对应于起点和终点。 You just have to remember a little trigonometry. If your center point is x, y and radius is r; then the coo

...

这是一个函数,它应该完成梯度线绘制 function drawgradientline(x,y,height){

var grd = context.createLinearGradient(x, y, 1, height);

grd.addColorStop(0, '#12a6eb');

grd.addColorStop(1, '#ebc711');

context.fillStyle = grd;

context.fill();

}

Her

...

是的,这是可能的! Javascript中有一个名为createLinearGradient的方法,它将画布上下文作为源,并应用由sx , sy , dx , dy坐标定义的渐变。 前两个选项定义起始坐标,最后两个定义结束坐标。 var gradient = context.createLinearGradient(sx, sy, dx, dy);

调用此方法后,您可以通过调用colorStop方法将渐变颜色应用于画布: gradient.addColorStop(0, '#f00'); /

...

实际上,这些算法似乎有所不同。 不太清楚为什么,但我会说CSS不认为rgba(0,0,0,0)像canvas一样是透明的黑色像素 ,而是透明 。 2D画布将从所有4个RGBA通道值直接合成,直到下一次停止,而CSS似乎理解为特定情况下透明。 要在画布上获得与CSS相同的结果,只需更改alpha值,就必须将第一个透明光圈设置为下一个透明光圈。 var ctx = c.getContext('2d'),

grad = ctx.createLinearGradient(0,0,0,150);

g

...

稍微搜索一下,我从Mozilla Development Network找到了这个例子 function draw() {

var ctx = document.getElementById('canvas').getContext('2d');

var radgrad = ctx.createRadialGradient(0,0,1,0,0,150);

radgrad.addColorStop(0, '#A7D30C');

radgrad.addColorSto

...

您可以使用转换。 就像在这个实例中一样 。 context.save() ;

context.translate(150,150) ;

context.scale(2,1) ;

context.translate(-150,-150) ;

context.moveTo(150, 150);

context.arc(150, 150, 50, 0, 3*Math.PI/4, true);

context.closePath();

context.stroke() ;

context.r

...

模糊和阴影效果不包含在主画布库中,但您可以创建自己的库,也可以使用像easel.js这样的外部画布库,但是有很多与HTML5 相关的库。 您可以选择最适合您的产品。 作为模糊效果的问题,您可以使用Mario Klingeman stackblur javascript实现: http ://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html。 它易于使用且速度极快。 对于发光效果,随机纹理生成的一个好方法是在javasc

...

与SVG或HTML不同,HTML Canvas上没有分层或分组。 你不能将弧/渐变包裹在另一个低不透明度元素中; 您必须直接将不透明度(或着色或其他)更改传播到最终属性。 你的颜色#1f0000相当于rgb(31,0,0) ; 使用rgba降低此特定色块的不透明度。 var opacity = 0.55; //55% visible

grd.addColorStop(1,'transparent');

grd.addColorStop(0.1,'rgba(31,0,0,'+opacity+')')

...

是的,您可以重复使用一次创建的CanvasGradient, var ctx = c.getContext("2d");

var grads = [];

for(var i=0; i<20; i++){

grads.push(ctx.createLinearGradient(0,0,300,0));

}

grads.forEach(function(grad, i){

var a = i * (360 / 20);

grad.addColorStop(0, 'hsl('

...

html画布arc,绘制弧线将线性渐变html5画布(Draw arc will linear gradient html5 canvas)相关推荐

  1. WinAPI: Arc - 绘制弧线

    为什么80%的码农都做不了架构师?>>>    //声明: Arc(DC: HDC; {设备环境句柄}X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer ...

  2. html 怎么在画布上绘制一个圆,javascript – 如何在画布上画一个圆圈?

    我使用 javascript和画布绘制一个数学设计的尺度(用于测量扭矩,包括牛顿米和英尺磅).我已经用三角法来定位我的刻度,自然地用弧线绘制电弧线.问题来了,当他们需要排队,但有一些奇怪的失真.然后我 ...

  3. HTML5教程实例-用Canvas制作线性渐变图形

    HTML5教程实例-用Canvas制作线性渐变图形 到目前为止,我们使用canvas绘制图形的基本知识已经介绍完毕,从本节开始,我们将介绍其他比较高级的绘制知识之一 - 线性渐变,首先我们来回顾一下& ...

  4. pygame绘制弧线

    pygame中绘制弧线的函数如下: pygame.draw.arc(surface, color, rect, start_angle, stop_angle, width) 需要传入的参数: sur ...

  5. html绘制圆形和弧形的代码,通过HTML5 Canvas API绘制弧线和圆形的教程

    在html5中,CanvasRenderingContext2D对象也提供了专门用于绘制圆形或弧线的方法,请参考以下属性和方法介绍: JavaScript Code复制内容到剪贴板 arc(x, y, ...

  6. 如何运用html在画布上画画,如何使用js在画布上绘制图形

    在画布上,首先使用JavaScript的HTML DOM方法查找元素,在使用getContext()方法创建绘图对象,最后使用HTML DOM Canvas 对象的属性和方法绘制图形. HTML5元素 ...

  7. CSS3背景线性渐变

    5.背景线性渐变:background-gradient (1)linear:线性渐变, 谷歌浏览器:(webkit) background:-webkit-gradient(linear ,0 0, ...

  8. 前端画圆弧html弧线的像素,[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)...

    arc:画弧度 cxt.arc( x, y, 半径, 开始角度,结束角度,是否逆时针 ); x, y: 为弧度的中心横坐标和纵坐标,如果这是画一个圆.那么x,y就是圆的圆心. 开始角度与结束角度都是以 ...

  9. HTML5绘制渐变直线,如何使用HTML5 Canvas绘制动态线性渐变

    如果要使用HTML5 Canvas绘制线性渐变,需要用到createLinearGradient()方法.下面我们就来一起看看具体的内容. createLinearGradient() createL ...

  10. html5绘制渐变图形-线性渐变

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

最新文章

  1. AMD/NV大跌2周后仅两天收复失地 挖矿成背后推手
  2. C语言spirograph算法图形绘制(附完整源码)
  3. 阿里云容器服务全面升级,让云的边界拓展至企业需要的每个场景
  4. Curator实现分布式锁的基本原理-InterProcessMutex.acquire
  5. 版本控制:集中式(SVN) vs 分布式(GIT)
  6. android uboot log,RK3288 Android 8.1系统uboot logo过渡到kernel logo会花一下
  7. spark基础之spark streaming的checkpoint机制
  8. 在Windows下编译OpenSSL(VS2005)【转】
  9. Dev gridView中设置自适应列宽和日期显示格式、金额的显示格式
  10. oracle参数错误,解决oracle参数系统文件出错
  11. 计算机继电保护书籍,计算机继电保护的发展
  12. 【计算机软件基础】如何理解鲁棒性Robust?
  13. serialVersionUID
  14. 电脑间通过串口传输数据【串口练习】
  15. GBIT51129-2015工业化建筑评价标准
  16. Technica Engineering Enhanced Ethernet Switch, 车载以太网交换机功能介绍(100/1000BASE-T1 Switch, AVB/TSN)
  17. 静态模型,动态模型!
  18. BOM中的history对象和navigator对象
  19. 直接数字下变频(3):希尔伯特变换法
  20. php实现支付宝扫码付

热门文章

  1. ADF12C 一个应用读多个数据库的数据
  2. 通过shell登录OSC并备份博文
  3. mybatis与hibernate的区别及各自应用场景
  4. C# 比较两个数组中的内容是否相同的算法
  5. C#校验身份证(15位、18位)
  6. fatal: empty string is not a valid pathspec, please use . instead if you meant to match all paths
  7. tcp程序——回声客户端
  8. 六石管理学:好大喜功,头目们是否相信
  9. VirtualBox安装MACOSX 10.13虚拟机的增强功能
  10. 全网首发:怎样制作CDKEY(2)-数据构造