[原创.数据可视化系列之八]使用等d3进行灰度图转伪彩色
2017-02-03 20:51
337 查看
对灰度图进行彩色化是数据可视化中常见的需求,使用d3在客户端比较容易实现,本文使用d3生成图片,并显示:
代码如下:
代码中首先下载数据文件,然后设定d3的色带信息,生成一个空白的canvas元素,并对元素的,通过d3插值颜色,给每个点设定颜色信息,并显示出来:
代码如下:
代码中首先下载数据文件,然后设定d3的色带信息,生成一个空白的canvas元素,并对元素的,通过d3插值颜色,给每个点设定颜色信息,并显示出来:
d3.request("data/geos/current/" + IdwPro[options.pro].file) .responseType("arraybuffer") .response(function (req) { var values=req; console.info(values); //色带信息。 var color = d3.scaleLinear().domain([193, 206, 219, 233.15, 255.372, 273.15, 275.15, 291, 298, 311, 328]) .range([d3.rgb(37, 4, 42), d3.rgb(41, 10, 130), d3.rgb(81, 40, 40), d3.rgb(192, 37, 149), d3.rgb(70, 215, 215), d3.rgb(21, 84, 187), d3.rgb(24, 132, 14), d3.rgb(247, 251, 59), d3.rgb(235, 167, 21), d3.rgb(230, 71, 39), d3.rgb(88, 27, 67)]) .interpolate(d3.interpolateHcl); //图片高度 var width = 720, height = 360; var _blankcanvas = document.createElement("canvas"); _blankcanvas.width = width; _blankcanvas.height = height; var blankcanvas = _blankcanvas.getContext("2d").getImageData(0, 0, width, height); var _idwcontext = document.createElement("canvas"); _idwcontext.width = width; _idwcontext.height = height; var idwcontext = _idwcontext.getContext("2d"); var c, i = 0, n = width * height * 4, blankimg = blankcanvas.data; var d = new Uint8ClampedArray(n); //console.info(image.data); for (var i = 0; i < height; i++) { var istar = width * i; var istart = (height - i) * width; for (var j = 0; j < width; j++) { c = d3.rgb(color(values.blocks[0][(istar + j)])); blankimg[(istart + j) * 4 + 0] = c.r; blankimg[(istart + j) * 4 + 1] = c.g; blankimg[(istart + j) * 4 + 2] = c.b; blankimg[(istart + j) * 4 + 3] = 255; } } idwcontext.putImageData(blankcanvas, 0, 0); // }).get();
相关文章推荐
- [原创.数据可视化系列之六]使用openlyaers进行公网地图剪切
- [原创.数据可视化系列之一]使用openlayers 3 显示聚合数据
- 使用 Java 进行图像处理 - 将彩色图像转换为灰度图
- [原创.数据可视化系列之二]使用cesium三维地图展示美国全球军事基地分布
- 【D3.js数据可视化系列教程】--(八)使用D3绘制SVG
- [原创.数据可视化系列之三]使用Ol3加载大量点数据
- [原创.数据可视化系列之十二]使用 nodejs通过async await建立同步数据抓取
- 微软sharepoint产品组博客——使用VS进行工作流开发系列博客
- [原创]使用Adobe Audition进行内录
- 一步一步学Silverlight 2系列(27):使用Brush进行填充
- ASP.NET中使用MSMQ进行消息处理系列文章
- Linux下进程的创建及其使用管道进行进程之间的通讯[00原创]
- 使用VS进行工作流开发系列博客1-"So You Want to Develop Custom Workflows in Visual Studio..." - The Blog Series
- Struts1.x系列教程(23):使用Tiles模板进行布局
- 使用VS进行工作流开发系列博客7-Developing Workflows in VS: Part6 - Deploy and Debug your workflow
- 使用VS进行工作流开发系列博客8-Developing Workflows in VS: Part 7 - Summary and Final Thoughts
- 使用VS进行工作流开发系列博客3-Developing Workflows in VS: Part 2 - Planning Your Workflow: Two Things to Keep in Mind
- [原创]如何改善Managed Code的Performance和Scalability系列之二:深入理解string和如何高效地使用string
- 使用VS进行工作流开发系列博客5-Developing Workflows in VS: Part 4 - Design and Bind Your Forms
- Struts1.x系列教程(23):使用Tiles模板进行布局