手机应用加载图片后“由于内存不足,无法加载之前的操作”?

问题描述 投票:0回答:2

我有一个简单的移动应用程序。它首先提示用户选择一个图像,然后通过以下代码在本地加载并显示在画布上:

function handleFileSelect(evt) {
var files = evt.target.files;
var f = files[0];
console.log(evt);
var ctx = document.getElementById("myCanvas").getContext('2d'),
img = new Image(),
f = document.getElementById("uploadbutton").files[0],
url = window.URL || window.webkitURL,
src = url.createObjectURL(f);

img.src = src;
lastImage = img;
img.onload = function() 
{
    window.requestAnimationFrame(function(){
    var w = window.innerWidth;
    var h = window.innerHeight;
    ctx.clearRect(0, 0, w, h);
    ctx.drawImage(lastImage, 0, 0);
    //url.revokeObjectURL(src);
    });
}}

在我的网络浏览器和手机上,图像已正确加载并显示在画布中,但是我听说在带有 Google Chrome 的 Razr Maxx HD 上运行该图像的用户会收到“错误:无法由于内存不足,请加载之前的操作。”我怀疑这个问题不能通过首先读取图像然后在显示之前缩放它来解决,因为即使不显示完整图像也已经加载到内存中。有没有办法将图像的缩放版本加载到内存中,而无需先加载整个图像?我可以在 Chrome 中的 Galaxy S3 上加载大量图像,并且 Galaxy S3 的 RAM 量与 Razr Maxx HD 相同,您知道是什么导致了这个问题吗?

javascript html web-applications html5-canvas
2个回答
0
投票

可用内存量可能取决于用户正在运行的应用程序。

一种解决方案是让应用程序请求具有一定宽度的图像,服务器可以返回缩放后的图像,这应该会减少内存需求。


-1
投票

我的三星 Galaxy S4 也遇到了同样的问题。我在手机上找到了解决方案,此后就再也没有出现过问题:

  1. 转到手机上的“设置”。
  2. 选择右上角任务项中的更多。
  3. 滚动到开发者选项。 - 如果您没有启用开发者选项,请按照步骤 1 和 2 操作,然后向下滚动到“关于设备”并单击它。应显示电话信息,您应向下滚动直至看到内部版本号。接下来要做的就是多次单击“版本号”...(每次单击它时,都会显示一个信息栏,告诉您开发人员选项需要单击多少次。当您单击 BN 几次后,DO 现在将显示保持开放态度,我们可以继续上述内容。
  4. 如果您已成功单击“开发人员选项”,则必须向下滚动到 D.O 菜单底部附近的应用程序选项。
  5. 如果选择(不保留活动),请务必取消选中它,确保该框没有勾选,因为它会在离开页面后立即结束每个应用程序或正在运行的操作,因此照片不会加载到Facebook 等。如果正确完成,那么您现在应该可以上传照片。
© www.soinside.com 2019 - 2024. All rights reserved.