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

【第4章 图像与视频】4.1 图像的绘制

文章目录

  • 前言
  • 在 Canvas 之中绘制图像
  • drawImage() 方法的用法


前言

drawImage() 方法可以将一幅图像的整体或某个部分绘制到 canvas 内的任何位置上,并且允许开发者在绘制过程中对图像进行缩放。也可以将图像绘制在离屏 canvas 中,这样的话就可以对图像进行一些有技巧性地处理了,例如实现图像查看器。


在 Canvas 之中绘制图像

应用程序首先创建了一幅图像,设置了它的数据源,然后等待浏览器加载图片,在图片加载完成后,将其绘制与 canvas 的左上角。

这就是 drawImage() 最简单的用法了。采用这种方式,可以把一整张未经缩放的图形绘制在 canvas 中,该方式的唯一缺点则是你必须等待图像加载完毕后才能对其进行绘制。如果在图像尚未完成加载时就进行绘制,那么根据 Canvas 规范,drawImage() 方法会执行失败,而且没有任何提示。

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>4-1-图像的绘制</title><style>body {background: #eeeeee;}#canvas {background: #ffffff;margin-top: 5px;margin-left: 10px;}</style></head><body><canvas id="canvas" width="800" height="600"></canvas><script>const canvas = document.getElementById('canvas'),context = canvas.getContext('2d'),image = new Image()image.src = './waterfall.png'image.onload = () => {context.drawImage(image, 0, 0)}</script></body>
</html>

drawImage() 方法的用法

drawImage() 方法会将一幅图像绘制到一个 canvas之中,所绘的图像叫做“源图像”(source image),而绘制到的地方则叫做“目标canvas”(destination canvas)。这里的image参数可以是 HTMLImageElement 对象、HTMLCanvasElement 对象、HTMLVideoElement 对象。

drawImage() 方法可以接受以下3套参数:

第一种用法,会将整幅图像原样绘制在目标 canvas 中的指定位置上。

drawImage(image, dx, dy)

第二种用法,会将图像完整地绘制到指定的位置上,然而,在绘制时会根据目标区域的宽度与高度进行缩放

drawImage(image, dx, dy, dWidth, dHeight)

第三种用法,可以将整幅图像或其一部分绘制到目标 canvas 的指定位置上,而且在绘制时会根据目标区域的宽度和高度对图像进行缩放

drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)

在这里插入图片描述


http://www.xdnf.cn/news/9840.html

相关文章:

  • Next.js 布局(Layout)与模板(Template)深度解析:从原理到实战
  • 在VirtualBox中打造高效开发环境:CentOS虚拟机安装与优化指南
  • SQL正则表达式总结
  • Java面试实战:从Spring到大数据的全栈挑战
  • STM32中,如何理解看门狗
  • WebSocket与实时对话式AI服务的集成
  • MySQL ALTER TABLE 组合操作时导致的错误
  • GPU 图形计算综述 (二):固定管线
  • dto vo类为什么要序列化?
  • 相量法正弦稳态电路的分析(面向题目)
  • 从汇编的角度揭秘C++函数重载,原来这么简单
  • 【最小生成树】Prim 算法、Kruskal 算法
  • 基于vue框架的独居老人上门护理小程序的设计r322q(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 42道CSS高频题整理(附答案背诵版)
  • Java AQS(Abstract Queued Synchronized)深度解析
  • MyBatisPlus(2):常用注解
  • 【MATLAB例程】基于脉冲雷达的TDOA目标定位,适用于四个锚点、三维空间的环境,附代码下载链接
  • 亚远景-ASPICE与ISO 26262:适用范围与应用场景的差异分析
  • 国产化redis 替代产品tendis 安装
  • 1Panel v2 首发体验(alpha)
  • Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决
  • 项目管理进阶:精读78页 IPD+CMMI+Scrum一体化研发管理解决方案【附全文阅读】
  • 初学python的我开始Leetcode题10-1
  • 递归与递推算法详解(C++版)教案——以斐波那契数列为例
  • MySQL高可用革命:Orchestrator实现零干预的故障转移与智能拓扑管理
  • 自动驾驶与智能交通:构建未来出行的智能引擎
  • LangFuse:开源LLM工程平台的革新实践
  • SpringBoot使用ThreadLocal保存登录用户信息
  • 搭建frp内网穿透
  • 每日c/c++题 备战蓝桥杯(洛谷P1481 魔族密码 题解)