Удовлетворение названия сообщения может потребоваться для редактирования, но пока я не знаю, где проблемы. Я читал страницы и отвечал на подобные вопросы, здесь и в других местах. Один ответ переполнения стека особенно близок, но я этого не понимаю.Функция многократного копирования изображений в многоугольники с использованием холста html5
Я хочу функцию, чтобы нарисовать полигоны на холсте в нужных координатах и заполнить их некоторым фоновым изображением, загруженным из файла (достаточно большим, чтобы не было необходимости в черепице). Треугольники были бы хороши для теста. По-видимому, я должен использовать drawImage и клип, а чтобы предоставить полигону границу, я могу использовать один и тот же путь для клипа и штриха. Также, видимо, я должен хранить порядка
- define path
- save
- clip
- drawImage
- restore
- stroke.
Также читайте где-нибудь, что достаточно загрузить изображение один раз. (Если uou хотите, чтобы я цитирую источники для всех этих предположений, я буду искать, где я их видел. Большинство из них на переполнение стека)
HTML, является иначе пустой
<body onload = "main();"></body>
Первый подход, делая вид, что браузер будет ждать изображения для загрузки:
var ctx, img;
var image_path = 'bg.jpg';
function main() {
var CANVAS_SIZE = 600;
var view_field_cnv = document.createElement ('canvas');
view_field_cnv.width = CANVAS_SIZE;
view_field_cnv.height = CANVAS_SIZE;
view_field_cnv.style.border = "1px solid";
document.body.appendChild (view_field_cnv);
ctx = view_field_cnv.getContext ('2d');
img = document.createElement ('img');
img.src = image_path;
place_triangle (0, 0);
place_triangle (300, 300);
place_triangle (500, 500);
place_triangle (0, 0);
}
function place_triangle (x, y) {
console.log (x, y);
ctx.beginPath();
ctx.moveTo (x + 10, y);
ctx.lineTo (x + 110, y);
ctx.lineTo (x + 60, y + 40);
ctx.closePath();
img = document.createElement ('img');
img.src = image_path;
ctx.save();
ctx.clip();
ctx.drawImage (img, x, y);
ctx.restore();
ctx.stroke();
}
Это привлекает все три треугольника, но нет вырезанных изображений.
Вторая попытка, с DrawImage внутри image.onload:
var ctx;
var image_path = 'bg.jpg';
function main() {
var CANVAS_SIZE = 600;
var view_field_cnv = document.createElement ('canvas');
view_field_cnv.width = CANVAS_SIZE;
view_field_cnv.height = CANVAS_SIZE;
view_field_cnv.style.border = "1px solid";
document.body.appendChild (view_field_cnv);
ctx = view_field_cnv.getContext ('2d');
place_triangle (0, 0);
place_triangle (300, 300);
place_triangle (500, 500);
place_triangle (0, 0);
}
function place_triangle (x, y) {
console.log (x, y);
var img;
ctx.beginPath();
ctx.moveTo (x + 10, y);
ctx.lineTo (x + 110, y);
ctx.lineTo (x + 60, y + 40);
ctx.closePath();
img = document.createElement ('img');
img.src = image_path;
img.onload = function() {
ctx.save();
ctx.clip();
ctx.drawImage (img, x, y);
ctx.restore();
ctx.stroke();
}
}
Это один делает обратить обрезанное изображение, но только один треугольник, последний. Просто комментирование сохранения и восстановления не помогает.
Итак, я не понимаю, как загружать изображения, сохранять, восстанавливать и, возможно, миллионы других вещей. Где будут ошибки?
Благодаря ориентировочно. Я должен обработать его :) – user3334085
На данный момент я получил ширину линии шириной 2 пикселя, половина из которых выживет. Но обратный вызов я должен прочитать, прежде чем я смогу попробовать это сам и спасибо вам должным образом :) – user3334085
Похоже, что start() является основным. Мы просто поместили всю программу в загрузчик изображений? Пожалуйста, это настоящий вопрос, а не риторический. – user3334085