Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

408
Visualizações
Problema con la carga de activos en el lienzo: DOMException no detectada (en promesa): se intentó usar un objeto que no se puede usar o que ya no se puede usar

Estoy tratando de cargar imágenes de mi matriz usando el método de lienzo drawImage. El problema es que a veces me tira el siguiente error

No capturado (en promesa) DOMException: se intentó usar un objeto que no es, o ya no es, usable

↑ firefox ↓ google

No capturado (en promesa) DOMException: no se pudo ejecutar 'createImageBitmap' en 'Ventana': el ancho de la imagen de origen es 0.

Ambos en index.js:13

A veces si vuelvo a cargar la página desaparece el error. ¿Alguien sabe qué podría estar causando este problema?

Mi código:

BOE_mosaico_conjunto.png

 (async () => { const img = new Image(); img.src = "./img/BOE_tile_set.png"; let tiles = []; let tileWidth = 28; let tileHeight = 36; for (let i = 0; i < 77; i++) { let x = i % 8; let y = Math.floor(i / 8); let bmp = await createImageBitmap(img, x * tileWidth, y * tileHeight, tileWidth, tileHeight); // index.js:13 tiles.push({ bmp, x, y }) } const canvas = document.querySelector("canvas"); canvas.width = 224; // img.width canvas.height = 360; // img.height const ctx = canvas.getContext("2d"); draw(); function draw() { tiles.forEach((tile) => { ctx.drawImage(tile.bmp, tile.x * tileWidth, tile.y * tileHeight); }) } })();
about 4 years ago · Santiago Gelvez
1 Respostas
Responde à pergunta

0

createImageBitmap(HTMLImageElement) requiere que HTMLImageElement esté completamente cargado.

Entonces, espera su evento de onload o, dado que es una imagen de mapa de bits y no SVG, puede esperar una llamada a su método decode() que devuelve una Promesa para cuando la imagen se haya cargado y decodificado por completo.

 (async () => { const image = new Image(); image.src = "https://upload.wikimedia.org/wikipedia/commons/c/cf/Black_hole_-_Messier_87.jpg?" + Math.random(); try { const bmp = await createImageBitmap(image); } catch(e) { console.error("Before load failed:", e.message); } await image.decode(); // wait for the image to be fully loaded const bmp = await createImageBitmap(image); console.log("After load succeeded", bmp); })();

Pero, aún suponiendo que no está utilizando una imagen SVG, y también suponiendo que se encuentra en una situación del mismo origen, entonces lo mejor es no usar HTMLImageElement en absoluto. De hecho, aquí acabamos de crear 2 ocurrencias de los datos de mapa de bits, una para HTMLImageElement y otra para ImageBitmap. El primero ya no se utilizará, pero aún consume computación y memoria.

Entonces, lo mejor es obtener su imagen como un blob y llamar directamente a createImageBitmap en ese blob:

 (async () => { const resp = await fetch("https://upload.wikimedia.org/wikipedia/commons/c/cf/Black_hole_-_Messier_87.jpg"); if (!resp.ok) { return console.error("Network error", resp.status); } const blob = await resp.blob(); const bmp = await createImageBitmap(blob); console.log(bmp); })();

Pero, una vez más, esto requiere que su imagen se pueda obtener a través de AJAX (lo que sin duda es su caso, ya que usa una ruta relativa), y que la imagen no sea una imagen SVG, porque createImageBitmap(Blob) no funciona con SVG imágenes a menos que use mi polyfill .

about 4 years ago · Santiago Gelvez Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda