Angular 5 与 Canvas drawImage 未显示

2024-01-17

尝试使用drawImage 将背景图像添加到画布,但它没有显示。我知道图像的路径是正确的,因为我可以<img src="{{ imageName }}" />那行得通。其他一切在 JavaScript 中都可以正常工作,但不能很好地转换为 Angular。

HTML:

<canvas #canvas></canvas>

打字稿:

import { Component, OnInit } from '@angular/core';
...

@Component({
  selector: 'app-box-picker',
  templateUrl: './box-picker.component.html',
  styleUrls: ['./box-picker.component.css']
})
export class BoxPickerComponent implements OnInit {
  @ViewChild('canvas') public canvas: ElementRef;

  canvasEl: any;
  ctx: CanvasRenderingContext2D;

  @Input() public width = 535.0;
  @Input() public height = 669.25;

  mousePosition: any;
  isMouseDown: boolean;
  dragoffx: number;
  dragoffy: number;

  circles: any;

  imageObj = new Image();
  imageName = "../../assets/pdf.png";

  constructor() {
  }

  ngOnInit() {

  }

  public ngAfterViewInit() {
    this.canvasEl = this.canvas.nativeElement;
    this.ctx = this.canvasEl.getContext('2d');

    this.canvasEl.width = this.width;
    this.canvasEl.height = this.height;

    this.imageObj.src = this.imageName;
    console.log(this.imageName);
    console.log(this.imageObj);
    // init circles
    var c1 = new Circle();
    c1.init(50, 50, 15, "rgba(217,83,79, .5)", "black", this.ctx);
    // console.log(c1);
    c1.out();

    this.circles = [c1];

    this.draw();

    this.captureDownEvents(this.canvasEl);
    this.captureMoveEvents(this.canvasEl);
    this.captureUpEvents(this.canvasEl);
  }

  draw() {
    //clear canvas
    this.ctx.clearRect(0, 0, this.canvasEl.width, this.canvasEl.height);
    this.ctx.drawImage(this.imageObj, 0, 0, this.canvasEl.width, this.canvasEl.height);
    this.drawCircles();
  }

  drawCircles() {
    for (var i = this.circles.length - 1; i >= 0; i--) {
      this.circles[i].draw();
    }
  }
...
}

当我做一个console.log(this.imageObj);有时我得到<img src="../../assets/pdf.png">其他时候我只得到<img>。这有什么关系吗?


@Kaiido 是正确的。我需要等待图像加载。我在用着setTimeout(e => this.draw(), 500);直到我找到更好的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 5 与 Canvas drawImage 未显示 的相关文章

随机推荐

  • 如何运行手机版网站?

    运行移动版本网站有两种常见方法 通过服务器端脚本检测移动浏览器以显示移动主题 拥有单独的子域 例如 m domain com 或 mobile domain com 行动上哪个更好 在这两种情况下 我认为移动搜索引擎公平地索引移动网站 每种
  • TSP,算法陷入局部最小值

    我正在努力实现一个基于模拟退火的程序来解决旅行商问题 我得到的所有解决方案都不令人满意 我不知道如何改进我的实施 显然 我不关注基准 而只关注寻找视觉上可接受的最短路径 如果有人能启发我 我将不胜感激 weight function sim
  • Mysql 不使用两列的索引

    我有以下查询 select from my table where col1 col2 in 1000 1 2000 2 我在 col1 col2 以及 col1 和 col2 上定义了索引 如果我对其运行解释 我会发现 mysql 找不到
  • C - 如何使用变量作为 SQL 查询的一部分?

    介绍 我正在尝试使用 C 将变量合并到查询中 我正在使用 sqlite 遵循本教程教程点 https www tutorialspoint com sqlite sqlite c cpp htm 也是我第一次接触使用 SQL 本教程向我展示
  • scala 模式匹配函数 - 如何绕过类型擦除

    我想模式匹配一 个函数 问题是类型擦除 请注意下面的代码片段 尽管warning发出了一场比赛 并且出现了 错误 的比赛 scala gt def f1 gt true f1 gt Boolean scala gt val fl f1 fl
  • 使用 UPnP InvokeAction 获取 IP 地址没有返回任何内容,有帮助吗?

    基本上 当我使用 vb net 或 c net 来执行此操作时 它工作得很好 但是当我使用 vb6 时 它不起作用 在我的 for 循环中 捕获相关设备中的相关服务 这里是没有返回结果的代码 serv is properly declare
  • 如何在 Visual Studio 2017 Office 外接程序 TypeScript 项目中 Polyfill Promise

    我在 Office 加载项中使用 TypeScript 并且我想专门使用 async await 函数 该项目无法编译 并显示 TS2468 TypeScript 无法找到全局值 Promise 我在这里读到我必须为 Promise 创建一
  • matlab 中的文本折叠不起作用

    文本折叠在我的 matlab 2013 中不起作用 我在首选项编辑器 调试器中启用了所有内容 但仍然没有运气 下面是我试图折叠的示例 test 5 t 7 您在首选项中启用了什么 在 R2013a 中你应该去首选项 gt 编辑器 调试器 g
  • 使用多个重复键对参数进行编码

    我好像也遇到了和这位同学一样的问题here https stackoverflow com questions 9713382 rails parameter with multiple values in the url when con
  • 不从函数返回值会导致段错误

    发现我不明白的奇怪行为 std vector
  • Azure Active Directory:通过 Graph API 将用户分配到库中的应用程序

    我需要自动化从库 即 Trello 添加应用程序 配置它 即密码单点登录 并将用户分配给它的过程 这可以通过 Graph API 来完成吗 是的 您可以通过在 Trello 应用程序对应的目录中创建 servicePrincipal 来自动
  • 我错过了什么? HTML > 正文 - 调整大小事件

    添加调整大小事件 监听窗口大小更改 的常用方法是 works just fine window addEventListener resize function console log w true 但我想添加这个事件处理程序documen
  • Python 舍入问题

    我在 python 中遇到了一个非常奇怪的问题 使用Python 2 4 x 在窗口中 gt gt gt a 2292 5 gt gt gt print 0f a 2293 但在 Solaris 中 gt gt gt a 2292 5 gt
  • jquery AJAX请求不更新php变量

    我有一个漫画网站用棍棒打树 http HittingTreesWithSticks com 允许用户通过按下一个或简单地按箭头键来获取下一个 上一个或随机漫画 ID 由于图像存储在数据库中 因此我在客户端循环访问这些图像的唯一方法是将它们存
  • 列表元素与 pandas 列的关键字匹配

    我的元素列表如下 A loans s class veyron trump rihana drake election 我还有另一个 pandas 数据框B有柱子category and words这是逗号分隔的字符串 category w
  • 为什么 Module.method_define?(:method) 不能正常工作?

    我正在尝试检查模块中是否定义了方法Module method defined method 它返回 false 它应该返回 true module Something def self another 1 end end Something
  • 如何在 Chakra UI 元素中添加 ::-webkit-scrollbar 伪元素? (反应)

    我正在使用 Chakra UI 我需要使用 css 伪元素自定义滚动条样式 webkit scrollbar 但是 Chakra UI 没有看到这个伪元素 并且我不知道在哪里可以在不创建全局 css 类的情况下设置这个特定组件的样式 这是我
  • HTTP 与 HTTPS 性能

    http 和 https 之间的性能有什么重大差异吗 我似乎记得读到过 HTTPS 的速度是 HTTP 的五分之一 这对于当前一代网络服务器 浏览器有效吗 如果是的话 有任何白皮书支持吗 对此有一个非常简单的答案 分析您的 Web 服务器的
  • 如何从文本中提取命名实体+动词

    嗯 我的目标是从文本中提取 NE 人 和与其相关的动词 例如 我有这样的文字 邓布利多转身沿着街道走回去 哈利 波特在毯子里翻了个身 没有醒来 作为理想的结果我应该得到 邓布利多转身走了 哈利 波特卷起 我使用斯坦福 NER 来查找和标记人
  • Angular 5 与 Canvas drawImage 未显示

    尝试使用drawImage 将背景图像添加到画布 但它没有显示 我知道图像的路径是正确的 因为我可以 img src 那行得通 其他一切在 JavaScript 中都可以正常工作 但不能很好地转换为 Angular HTML