无法在Phonegap中的HTML5画布上绘制图像

艾哈迈德·萨德(Ahmed Saad)

我正在尝试将图像绘制到Html5画布以与Phonegap一起使用,这是我使用的代码。

问题是什么都没有发生,我几乎尝试了所有操作,添加了image.onload,尝试了clearrect仍然没有绘制任何内容。

我正在使用Phonegap 2.7,并在Android 2.3.7(GingerBread)上进行了测试。

小提琴

var canvas = document.getElementById('map');
var ctx = canvas.getContext("2d");
var image = new Image();
image.src="img/map-04.png";
image.onload=function(){            
    ctx.drawImage(image,0,0);
};              
function fitToContainer(canvas){
    var div = $(mapcontext);    
    canvas.style.width=div.css("width");
    canvas.style.height=div.css("height");
    canvas.width  = canvas.offsetWidth;
    canvas.height = canvas.offsetHeight;                
}

window.onload = fitToContainer(canvas);
window.onresize = fitToContainer(canvas);

提前致谢。

用户名

更新

根据提供的小提琴:

您可以通过以下方式重新组织代码来解决此问题:

  • 在执行任何操作之前,请确保已加载图像
  • 加载图像后,调用绘制函数并为窗口附加onresize处理程序
  • 删除draw函数参数,以便您可以直接将其设置为回调,也可以全局使用已分配的canvas变量
  • 在draw函数内部,直接将窗口的尺寸用于画布元素的宽度和高度,不要使用CSS,因为那样会拉伸图像(最好将拉伸后的图像重新绘制到画布上,以便可以正确读取鼠标位置等信息)。
  • 画布每次更改大小时都重新绘制图像

更新后的代码如下所示(此处为在线实时版本):

var canvas = document.getElementById('map');
var ctx = canvas.getContext("2d");

var image = new Image();
image.onload = function() {
    window.onresize = fitToContainer;
    fitToContainer();
};
image.src = "http://i.imgur.com/oPt1Nrr.gif";

function fitToContainer() {

    var div = $('#mapcontext'),
        w = $(window).width(),
        h = $(window).height();

    canvas.width = w;
    canvas.height = h;

    ctx.drawImage(image, 0, 0, w, h);
}

希望这可以帮助!


旧答案

window.onloadwindow.onresize错误的用法您需要传递给他们参考:

window.onload = window.onresize = function() {fitToContainer(canvas)};

您可以选择在函数回调中获取canvas元素,而只需调用无参数函数

window.onload = window.onresize = fitToContainer;

function fitToContainer() { ... } // use global var for canvas

另请注意,调整画布大小将导致其被清除,因此在发生这种情况时,您需要重新绘制图像:

function fitToContainer(canvas){
    var div = $(mapcontext);    
    canvas.style.width=div.css("width");
    canvas.style.height=div.css("height");
    canvas.width  = canvas.offsetWidth;     // this will clear canvas
    canvas.height = canvas.offsetHeight;

    if (image && image.complete)
        ctx.drawImage(image, 0, 0);         // redraw image if loaded
}

您还应该为图像添加一个onerror处理程序(最好是onabort),以防在加载和解码过程中发生错误。还要在设置之前添加这些回调src

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

javascript在画布上绘制图像

来自分类Dev

如何获取在HTML5画布上绘制的图像的X / Y值?

来自分类Dev

在html5画布内绘制图像的一部分

来自分类Dev

RXJS在HTML5画布上绘制线条

来自分类Dev

在背景缩放上绘制HTML5画布

来自分类Dev

如何下载HTML5画布上的图像?

来自分类Dev

在缩放的画布上绘制图像

来自分类Dev

列表内的HTML5 Canvas,无法在所有画布上绘制图像

来自分类Dev

使用for循环绘制HTML5画布圆

来自分类Dev

在HTML5画布上绘制多个图像有时不起作用

来自分类Dev

实时HTML5画布绘制

来自分类Dev

需要帮助JS图像事件侦听器在html5画布上绘制多个图像

来自分类Dev

如何在HTML5画布内旋转图像而不绘制图像?

来自分类Dev

画布HTML5中绘制图像对象的限制区域

来自分类Dev

清除画布后未绘制图像(html5画布)

来自分类Dev

HTML5画布图像上的插图阴影

来自分类Dev

无法在html5画布上绘制

来自分类Dev

为什么HTML5 drawImage无法在画布上绘制图像?

来自分类Dev

html5画布绘制多个图像

来自分类Dev

HTML5画布图案绘制延迟

来自分类Dev

Chrome 31.0 HTML5画布绘制图像

来自分类Dev

在html5画布内绘制图像的一部分

来自分类Dev

在背景缩放上绘制HTML5画布

来自分类Dev

在HTML5画布上绘制图像

来自分类Dev

HTML5画布:在单个画布上的范围内旋转裁剪的图像

来自分类Dev

在缩放的画布上绘制图像

来自分类Dev

如何在HTML5画布上绘制背景图像

来自分类Dev

使用javascript在html5中绘制图像

来自分类Dev

访问画布上的绘制图像