Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Canvas.toDataUrl在Chrome/Firefox中有时会被截断_Javascript_Html_Canvas_Libgdx - Fatal编程技术网

Javascript Canvas.toDataUrl在Chrome/Firefox中有时会被截断

Javascript Canvas.toDataUrl在Chrome/Firefox中有时会被截断,javascript,html,canvas,libgdx,Javascript,Html,Canvas,Libgdx,在我的LibGDX游戏的HTML5版本中,有时canvas.toDataUrlimage/png会返回一个截断的字符串,生成一个黑色图像 CanvasElement canvas = ((GwtApplication)Gdx.app).getCanvasElement(); String dataUrl = canvas.toDataUrl("image/png"); Window.open(dataUrl, "_blank", ""); 奇怪的是,有时它是有效的。当它工作时,我得到了一个~1

在我的LibGDX游戏的HTML5版本中,有时canvas.toDataUrlimage/png会返回一个截断的字符串,生成一个黑色图像

CanvasElement canvas = ((GwtApplication)Gdx.app).getCanvasElement();
String dataUrl = canvas.toDataUrl("image/png");
Window.open(dataUrl, "_blank", "");
奇怪的是,有时它是有效的。当它工作时,我得到了一个~100KiB的图像,正如预期的那样,新窗口打开时,地址栏上只显示数据:。我可以将其发送到Web服务,并将其从Base64转换为正确PNG的字节,OSX预览也可以显示它

当它不工作时,新窗口将显示一个正确尺寸的黑色图像,以及一个地址栏,其中起始数据为Base64编码数据:image/png;base64,ivborw0kggoaaan…,但以省略号结尾,该省略号似乎由浏览器UI呈现,而不是实际数据字符串中的三个句点。本例中的数据约为31KiB。当我尝试通过我的Web服务对其进行转码时,我得到了相同的黑色矩形

我在Chome和Firefox中都看到了这种情况


有什么想法吗?获取画布内容的代码非常简单,所以我看不出我怎么会做得不对。我想可能是浏览器中出现了错误,或者是LibGDX和渲染出现了某种时间问题?

这是由于LibGDX没有保留图形缓冲区造成的。LibGDX的家伙们非常友好地在现在可用的夜间构建中修复了这个问题

更新到最新版本1.0-SNAPSHOT并设置以下标志现在可以可靠地工作:

    @Override
public GwtApplicationConfiguration getConfig () {
    if(config == null)
    {
        config = new GwtApplicationConfiguration(1280, 960);
        config.preserveDrawingBuffer = true;
    }

    return config; 
}

可能是在glClear和渲染之间捕获的?为了检查这一点,你可以使用另一种比黑色更清晰的颜色,看看有时你是否仍然会看到黑色屏幕,或者新的清晰颜色。