使用canvas绘制股票图【envision.js】

最近的一个小项目需要用到一些财经图表,如股票图,净值曲线图,投资组合饼图等。按照产品的要求,这些图表需要在移动设备【手机,平板电脑】
和pc端良好运行。我们都知道在ios设备上没法运行flash,所以必须把使用flash开发的方案放弃,只能转向采用javascript开发,最新的移动设
备上的浏览器对javascript支持越来越好,同时用于图形图像开发的canvas属性在这里也支持良好。
   选好了技术方案,那就开发吧,很显然如果从零要把这些图表开发的比较完美还是很费时费力的,再说了不要重复发明轮子不是一直教导我们吗。那
么我们就来看看有没有现成的轮子供我们使用呢,经过搜索和查找,envision.js这个javascript图形类库引起了我的注意,这个类库的features
  • 支持所有现代浏览器,从IE6+
  • 支持触摸特性,移动设备
  • 财经图表
  • 时间序列图表
  • 能够自定义图表
  • 基于flotr2,同时也能够适配其他库
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在JavaScript中使用Canvas绘制YUV420像是一个相对复杂的任务,因为Canvas默认使用RGB颜色模式而不是YUV。你需要进行一些额外的步骤来将YUV420数据转换为RGB,并将其绘制Canvas上。 下面是一个基本的示例代码,用于展示如何使用Canvas绘制YUV420像: ```html <!DOCTYPE html> <html> <head> <title>Canvas YUV420</title> </head> <body> <canvas id="myCanvas" width="400" height="300"></canvas> <script> // 获取Canvas元素 var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); // 获取YUV420像的Y、U、V分量数据(假设已经获取到了) // 假设Y分量数据为yData,U分量数据为uData,V分量数据为vData // 创建一个ImageData对象用于存储RGB数据 var imageData = ctx.createImageData(canvas.width, canvas.height); var data = imageData.data; // YUV420转RGB函数 function yuv420ToRgb(y, u, v) { var r, g, b; // YUV到RGB转换公式 r = y + 1.402 * (v - 128); g = y - 0.344136 * (u - 128) - 0.714136 * (v - 128); b = y + 1.772 * (u - 128); // 将RGB值限制在0到255之间 r = Math.max(0, Math.min(255, r)); g = Math.max(0, Math.min(255, g)); b = Math.max(0, Math.min(255, b)); return [r, g, b]; } // 遍历每个像素 for (var i = 0; i < canvas.width * canvas.height; i++) { var y = yData[i]; var u = uData[Math.floor(i / 4)]; var v = vData[Math.floor(i / 4)]; // 转换YUV到RGB var rgb = yuv420ToRgb(y, u, v); // 填充RGB值到ImageData var dataIndex = i * 4; data[dataIndex] = rgb[0]; // 红色通道 data[dataIndex + 1] = rgb[1]; // 绿色通道 data[dataIndex + 2] = rgb[2]; // 蓝色通道 data[dataIndex + 3] = 255; // 不透明度 } // 将ImageData对象绘制Canvas上 ctx.putImageData(imageData, 0, 0); </script> </body> </html> ``` 在上面的示例中,我们假设已经获取到了YUV420像的Y、U、V分量数据,并创建了一个ImageData对象来存储RGB数据。然后,我们使用一个yuv420ToRgb函数将YUV数据转换为RGB,并将转换后的RGB值填充到ImageData对象中。最后,我们使用putImageData方法将ImageData对象绘制Canvas上。 请注意,上述示例是一个简化的版本,并未考虑YUV420像的具体格式和数据排列。在实际应用中,你可能需要根据实际情况进行适当的解析和处理。此外,由于JavaScript是单线程的,处理大量像素数据可能会导致性能问题,你可能需要考虑使用Web Worker或其他优化技术来提高性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值