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

时间:2014-04-06 15:10:10

标签: javascript html5 canvas libgdx

在我的LibGDX游戏的HTML5版本中,有时 canvas.toDataUrl("image/png")会返回一个截断的字符串,从而产生黑色图像。

CanvasElement canvas = ((GwtApplication)Gdx.app).getCanvasElement();
String dataUrl = canvas.toDataUrl("image/png");
Window.open(dataUrl, "_blank", "");

奇怪的是,有时候它有效。当它工作时,我按预期得到一个~100KiB的图像,新的窗口打开,地址栏只是说"数据:"。我可以将它发送到web服务并从Base64转换为适当的PNG字节,OSX预览也显示它也很好。

没有工作时,新窗口显示正确尺寸的黑色图像,以及带有Base64编码数据的地址栏(开始data:image/png;base64,iVBORw0KGgoAAAAN ... ),但结束于似乎由浏览器UI呈现而不是实际数据字符串中的三个句点的省略号。这种情况下的数据是~31KiB。当我尝试通过我的webservice转码时,我得到了相同的黑色矩形。

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

有什么想法吗?获取画布内容的代码非常简单,所以我无法看到我是如何做错的。我想到浏览器中的错误,或LibGDX和渲染的某种时间问题?

1 个答案:

答案 0 :(得分:0)

这是由LibGDX不保留绘图缓冲区引起的。 LibGDX的家伙非常友好地修复了这个现在可用的夜间版本。

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

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

    return config; 
}