2017-03-08 84 views
0

我有一个图像,我从一个url获得。我想在这个图像上画一个矩形。我目前正在试图使用画布来实现这一点,但我不完全理解如何实现它。当我使用这段代码时,画布中没有任何变化,它仍然是空白的。我想在angular2上的图像上绘制一个矩形

我有这个在我的HTML

<canvas #layout></canvas> 

然后这在我的组件打字稿文件

@ViewChild('layout') canvasRef; 

//other code here 

drawRectangle(file: any): void 
{ 
    let canvas = this.canvasRef.nativeElement; 
    let context = canvas.getContext('2d'); 

    let source = new Image(); 
    source.src = this.imgUrl; 

    source.onload =() => 
    { 
     context.drawImage(source.src,0,0); 
     context.beginPath(); 
     context.rect(file.left, file.top, file.width, file.height); 
     context.stroke(); 
    }; 


} 
+0

....会发生什么? – putonspectacles

+0

@putonspectacles什么也没有发生 – lagfvu

+0

更新你的问题,以反映“什么都不发生”的意思。也看到我的回答 – putonspectacles

回答

1

尝试添加onload()回调后更新source.src。还需要将图像(source)传递给drawImagesource.src所以这里是更新后的代码:

所以

@ViewChild('layout') canvasRef; 

//other code here 

drawRectangle(file: any): void 
{ 
    let canvas = this.canvasRef.nativeElement; 
    let context = canvas.getContext('2d'); 

    let source = new Image(); 

    source.onload =() => 
    { 
     context.drawImage(source, 0, 0); 
     context.beginPath(); 
     context.rect(file.left, file.top, file.width, file.height); 
     context.stroke(); 
    }; 

    source.src = this.imgUrl; 




} 
+0

它给出'CanvasRenderingContext2D'执行'drawImage'失败的错误:提供的值不是''(CSSImageValue或HTMLImageElement或HTMLVideoElement或HTMLCanvasElement或ImageBitmap或OffscreenCanvas)' – lagfvu

+0

尝试更新后的代码,I替换source.src,并在调用drawImage时使用源代码 – putonspectacles