Ctx drawimage не работает

Форум

Справочник

Страница 1 из 2 1 2 >
Опции темы Искать в теме

Всем доброго времени суток! Есть код:

Почему не работает? Пробовал всяко-разно.

Ну во первых код может не работать если рисовать раньше чем загрузится картинка, во вторых не вижу где вы объявили переменную «Ugo».

А что пишет консоль?

Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования — читайте http://javascript.ru/formatting.

Сообщение от tsigel Ну во первых код может не работать если рисовать раньше чем загрузится картинка, во вторых не вижу где вы объявили переменную «Ugo».

А что пишет консоль?

.onload = function() пробовал, тоже не работает, Ugo — это id картинки, я попробовал в drawImage ставить id и все работает. Консолью не пользуюсь, алерта хватает.

в общем так работает:
ctx.drawImage(Ugo, 100, 100 );

а так нет
ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );

Сообщение от wadim Консолью не пользуюсь, алерта хватает.

Алерт вам ошибок не скажет, а конслоль скажет.

Короче вот вам пример, дальше сами.

ArrCenter = Array(100,100);

for (i=0; i ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );

А почему не так:

Сообщение от tsigel Алерт вам ошибок не скажет, а конслоль скажет.

Короче вот вам пример, дальше сами.

Консолью не умею пользоваться, разбираться нет времени, алерта пока хватает, я и так знаю что дело в drawImage, а именно: в попытке в качестве аргумента использовать элемент массива.

нужно именно с » i «, так как массив может быть очень большим:
ArrCenter = Array(100,100,200,200,300,300,400,400,500,500,501, 501 . );
и в ручную не реально все прописать.

попробовал как вы пишите:
var ArrCenter = [100,100]; — не помогло

Источник

Ctx drawimage не работает

Всем доброго времени суток! Есть код:

Почему не работает? Пробовал всяко-разно.

Ну во первых код может не работать если рисовать раньше чем загрузится картинка, во вторых не вижу где вы объявили переменную «Ugo».

А что пишет консоль?

Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования — читайте http://javascript.ru/formatting.

Ну во первых код может не работать если рисовать раньше чем загрузится картинка, во вторых не вижу где вы объявили переменную «Ugo».

А что пишет консоль?

.onload = function() пробовал, тоже не работает, Ugo — это id картинки, я попробовал в drawImage ставить id и все работает. Консолью не пользуюсь, алерта хватает.

в общем так работает:
ctx.drawImage(Ugo, 100, 100 );

а так нет
ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );

Алерт вам ошибок не скажет, а конслоль скажет.

Короче вот вам пример, дальше сами.

ArrCenter = Array(100,100);

for (i=0; i ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );

А почему не так:

Алерт вам ошибок не скажет, а конслоль скажет.

Короче вот вам пример, дальше сами.

Консолью не умею пользоваться, разбираться нет времени, алерта пока хватает, я и так знаю что дело в drawImage, а именно: в попытке в качестве аргумента использовать элемент массива.

нужно именно с » i «, так как массив может быть очень большим:
ArrCenter = Array(100,100,200,200,300,300,400,400,500,500,501, 501 . );
и в ручную не реально все прописать.

попробовал как вы пишите:
var ArrCenter = [100,100]; — не помогло

Источник

Javascript метод drawImage()

Метод drawImage() рисует изображение, содержимое другого элемента или видео.

Также, метод drawImage() может нарисовать часть изображения и/или увеличить/уменьшить размер изображения.

Внимание: Нельзя вызывать метод drawImage() прежде, чем изображение будет загружено. Чтобы убедиться, что изображение было загружено, вызов метода drawImage() можно поместить внутри события window.onload() или document.getElementById(«imageID»).onload.

JavaScript синтаксис

Вывод изображения в заданной позиции на холсте:

JavaScript синтаксис: context.drawImage(img, x, y);

Вывод изображения в заданной позиции на холсте и определение его ширины и высоты:

JavaScript синтаксис: context.drawImage(img, x, y, width, height);

Обрезание изображения и вывод обрезанной части в заданную позицию:

JavaScript синтаксис: context.drawImage(img, sx, sy, swidth, sheight, x, y, width, height);

Значения параметров

Параметр Описание
img Определяет используемое изображение, видео или элемент
sx Необязательный параметр. Координата X начальной точки обрезки
sy Необязательный параметр. Координата Y начальной точки обрезки
swidth Необязательный параметр. Ширина обрезанного изображения
sheight Необязательный параметр. Высота обрезанного изображения
x Координата X на холсте, куда будет помещено изображение
y Координата Y на холсте, куда будет помещено изображение
width Необязательный параметр. Применяемая ширина изображения (можно растянуть или сжать изображение)
height Необязательный параметр. Применяемая высота изображения (можно растянуть или сжать изображение)

Пример использования

Изображение для примера:

Пример №1

Нарисовать изображение на холсте:

Ваш браузер не поддерживает HTML5 тег canvas.

Пример №2

Поместим изображение в заданную позицию на холсте и определим его ширину и высоту:

Ваш браузер не поддерживает HTML5 тег canvas.

Пример №3

Обрежем изображение и поместим обрезанную часть в заданную позицию на холсте:

Ваш браузер не поддерживает HTML5 тег canvas.

Пример №4

Используемое видео (нажмите Play, чтобы начать демонстрацию):

Элемент canvas:

Ваш браузер не поддерживает HTML5 тег canvas.

JavaScript (код рисует текущий кадр видео каждые 20 миллисекунд):

Источник

Почему drawImage из localStorage не работает?

Используя TypeScript, но я не думаю, что это важно.

StackOverflow необходим новый тег: localstorage

Если вы скопируете тег img на холст через .drawImage, он будет работать нормально. Если вы сохраните и загрузите его из localStorage, вы получите:

DrawImage: аргумент 1 не может быть преобразован ни в один из: HTMLImageElement, SVGImageElement, HTMLCanvasElement, HTMLVideoElement, ImageBitmap.

4 ответа

Нашел рабочее решение, по крайней мере, в JSFiddle: https://jsfiddle.net/Dustin_00/nb1j3fw0/70 /

Решение @ Rojo тоже работает. Но ни одна из них не работает в моем приложении .NET Core — просто пустое изображение.

Вместо элемента img html вы должны хранить в localStorage только его атрибут src . Затем вам просто нужно создать изображение, установив его src в значение, которое хранится в localStorage, и после загрузки нарисуйте его на canvas . Вот так:

LocalStorage.setItem принимает только строки, поэтому все, что не является строкой, будет .toString() запущено на нем перед сохранением, проверьте MDN localStorage.setItem.

Думали ли вы о том, чтобы сохранить img src в локальном хранилище и сделать что-то подобное, чтобы отобразить его https://stackoverflow.com/a/4776378/ 12523447

Если вы хотите сохранить весь элемент в localStorage , вы должны использовать imgSrc.outerHTML

Затем получите элемент особым образом: (DOMParser MDN) и SO answer

И подождите, пока загрузится изображение:

И по какой-то причине мне нужно добавить изображение в , чтобы оно работало. Если это произойдет и с вами, вы можете сразу удалить изображение (это может быть JSFiddle):

Источник

HTML5 CANVAS шаг за шагом: Изображения

CANVAS шаг за шагом:

  1. Основы
  2. Изображения
  3. Понг
  4. Пятнашки

Продолжение статьи про рисование на холсте, в которой мы научимся использовать изображения. Естественно рисовать на холсте примитивами очень не удобно и требует определённых трудозатрат, и результат иногода явно хромает качеством. Поэтому естественно в canvas api предусмотрено взаимодействие с изображениями. Добавление изображения условно можно разделить на два шага: создание JavaScript объекта Image, а второй и заключительный шаг это отрисовка изображения на холсте при помощи функции drawImage. Рассмотрим оба шага подробнее.

Создание нового графического объекта:

Кстати в качестве источника изображения, можно указать вот такую строку в которой изображение и описанно:

1. drawImage

Теперь мы перейдём к рисованию изображения на холсте. Для этого существует функция drawImage.

Стоит отметить что загрузка изображения происходит сразу после присвоения объекту источника изображения, и если оно не загрузится полностью к моменту вызова функции отрисовки, то оно попросту не будет нарисовано на холсте. Для избежания этой ситуации используется такая конструкция:

Вот мы наверное и дошли до момента когда можно рассмотреть элементарный пример:

Ссылка на фидл с примерами для этой стать.

2. Тянем-потянем

Но если бы всё ограничивалось простым рисованием изображением, то отдельную статью можно было бы не писать, а ограничиться подпунктом «Изображения» в предыдущем посте. Итак теперь мы попытаемся масштабировать изображение и для этого существует ещё один способ вызова функции drawImage:

Возьмём предыдущий пример и внесём в drawImage некоторые изменения:

Ссылка на фидл с примерами для этой стать.

3. Рисуем фрагмент изображения

Третий вызов drawImage с восемью параметрами, выглядит приблизительно так:

Возьмём всё тот же пример и подкорректируем функцию drawImage в третий раз:

Ссылка на фидл с примерами для этой стать.

4. Задача

Теперь осталось закрепить всё пройденное на практическом примере. Как и в том примере это будет небольшая карта, только не из какой-то существовавшей игры, а придуманной нами. Для того что бы он нормально работал нам необходимо будет создать в любом графическом редакторе изображение составленное из фрагментов которые нам будут нужны что бы нарисовать дорожку, домик и полянку. Вообще фрагменты карты называются тайлами, а файл в котором они все собраны в одно изображение называется тайлсетом. Вот это изображение я нарисовал собственноручно в программе Pinta под Ubuntu.

Итак, размерность будет 8 на 8 квадратных блоков шириной 32 пиксела. На карте нам необходимо будет изобразить домик и дорожку. Элементы домика нарисованы ручками, можно сказать каждый кирпичик. Траву и песок делалось путём заливки облости соответствующим цветом и добавки шума. Всё конечно представленно очень примитивно, но показательно.
Рассмотрим с пинцетом такой кусок кода как var map = [[… значения x и y указывают какой элемент из картинки брать. Т.е. если исходный рисунок разбить на квадрат 32×32 то станет понятней.
И форэкзампл:

Источник

Читайте также:  Как настроить плагин dynpad
Оцените статью