Рисование изображения на холсте с тремя копейками

У меня проблема с холстами. Я изменил пример программы Canvas.hs, чтобы нарисовать изображение на холсте с помощью

canvas # drawImg

сразу после кода установки холста; вот это для справки:

canvas <- UI.canvas
      # set UI.height canvasSize
      # set UI.width  canvasSize
      # set style [("border", "solid black 1px"), ("background", "#eee")]

где drawImg находится

drawImg :: UI.Canvas -> UI ()
drawImg canvas = do
  url <- UI.loadFile "image/png" "resources/img.png"
  img <- UI.img # set UI.src url
  UI.drawImage img (0,0) canvas

это должно быть то же поведение, что и функция щелчка для рисования изображения в исходной версии кода.

Реальное поведение этого кода - пустой холст, как в исходном примере перед нажатием кнопки рисования изображения. Я бы подумал, что это должно нарисовать изображение при загрузке. Почему это? Должен ли я вместо этого добавить этот вызов в строку, которая устанавливает холст?

1 ответ

Это canvas часть DOM? Не забудьте добавить его в тело документа с помощью getBody #+ [...] или т.п.

Однако может возникнуть другая проблема: браузеры обычно загружают URL-адреса изображений асинхронно. На самом деле, я не уверен, загружают ли они URL-адреса изображений вообще, если изображение не является частью DOM, как в вашем примере. В обоих случаях, если вы попытаетесь нарисовать изображение на холсте до того, как будет загружен его URL, ничто не будет нарисовано. (Самый простой способ проверить, является ли эта проблема актуальной в вашем коде, - это нарисовать многоугольники вместо изображения.)

Другие вопросы по тегам