当前位置: 首页 > news >正文

cesium FBO(三)渲染到Canvas(灰度图效果)

接第一篇cesium FBO(一)渲染到纹理(RTT)原理的基础,再接着cesium FBO(二)渲染到Canvas,实现对FBO中的数据进行二次处理,实现灰度图效果。

知道怎么样渲染到FBO了,又知道如何从FBO显示到Canvas了,要进行灰度处理,事情就变的简单了,效果如下图左上角。

一、效果

二、实现

实现过程分为以下几步:

1.创建FPO
2.渲染到FBO
3.灰度处理FBO中的数据
4.从FBO读到Canvas

其中 1、2、4同上一篇文章,这里只展示第3步:

          //1)创建临时空间let flippedImgData = new ImageData(width, height);//2)垂直翻转for (let y = 0; y < height; y++) {for (let x = 0; x < width; x++) {let originalIndex = (y * width + x) * 4;let flippedIndex = ((height - 1 - y) * width + x) * 4;flippedImgData.data[flippedIndex] = imageData.data[originalIndex];flippedImgData.data[flippedIndex + 1] = imageData.data[originalIndex + 1];flippedImgData.data[flippedIndex + 2] = imageData.data[originalIndex + 2];flippedImgData.data[flippedIndex + 3] = imageData.data[originalIndex + 3];}}//3)计算灰度值for (let i = 0; i < flippedImgData.data.length; i += 4) {let gray = 0.299 * flippedImgData.data[i] + 0.587 * flippedImgData.data[i + 1] + 0.114 * flippedImgData.data[i + 2];flippedImgData.data[i] = gray;flippedImgData.data[i + 1] = gray;flippedImgData.data[i + 2] = gray;}//4)缩放并绘制到Canvas上const canvas = document.getElementById('DeepCanvas');canvas.width = 300;  // 目标宽度canvas.height = 200; // 目标高度const context2d = canvas.getContext('2d');const tempCanvas = document.createElement('canvas');tempCanvas.width = width;tempCanvas.height = height;const tempCtx = tempCanvas.getContext('2d');tempCtx.putImageData(flippedImgData, 0, 0);// 绘制并缩放到目标尺寸context2d.drawImage(tempCanvas,0, 0, width, height,    // 源图像位置和尺寸0, 0, canvas.width, canvas.height // 目标位置和尺寸);

主要分为四个步骤,注释已经很清楚了,你已经拿到一帧画面的数据(RGB)了,想怎么玩就怎么玩,如高斯模糊、红外效果等。

http://www.dtcms.com/a/310129.html

相关文章:

  • 【OneAPI】网页搜索API和网页正文提取API
  • Lombok常用注解及功能详解
  • oracle的安全加密有哪些?
  • Python文件对比利器:filecmp模块详解
  • 学习嵌入式第十七天
  • Vue项目使用ssh2-sftp-client实现打包自动上传到服务器(完整教程)
  • 10.Linux 用户和组的管理
  • 【HL7】.aECG与.hl7文件的关系和区别
  • Java滤波去除异常峰值方法(二)
  • CGA匹兹堡睡眠质量指数量表评估睡眠状况​
  • nCode 疲劳分析场景复杂,企业如何科学合理分配授权资源?
  • Shader开发(六)什么是着色器
  • Go语言常用的设计模式
  • leetcode热题——全排列
  • 视频质量检测中卡顿识别准确率↑32%:陌讯多模态评估框架实战解析
  • 音频获取长度
  • anaconda、conda、pip、pytorch、torch、tensorflow到底是什么?它们之间有何联系与区别?
  • 目标检测检出率,误检率,ap,map等评估python代码
  • SOLIDWORKS教育版
  • 地震光与鸟类异常行为的科学关联性及地震预测潜力评估
  • (AC)五子棋
  • 在 uni-app 中进行路由跳转前的权限验证(检查用户是否登录)
  • OCC任务新SOTA!华科提出SDGOCC:语义深度双引导的3D占用预测框架(CVPR 2025)
  • 基于Pipeline架构的光存储读取程序 Qt版本
  • ansible简单playbook剧本例子3-安装nginx
  • Typora v1.10.8 好用的 Markdown 编辑器
  • 【2】专业自定义图表创建及应用方法
  • flutter release调试插件
  • 通过pendingIntent启动activity被block问题
  • C语言数据结构(3)单链表专题1.单链表概述