Я пытаюсь трансформировать и/или перевернуть изображение. Однако в моей текущей реализации видна проволочная сетка, и я не знаю, как ее удалить.
Я пытался использовать http://tulrich.com/geekstuff/canvas/ Perspective.html, но я до сих пор не могу понять, что контрольная точка и отсутствие проволочной сетки вместе. Спасибо!
Я также исследовал следующий вопрос: «Нарисовать искаженное изображение на холсте html5», но мне не нужны ответы, подобные этому, потому что мне нужно, чтобы изображение переворачивалось или контрольные точки меняются местами без проволочной сетки.
var triangle1 = new Triangle(
new Point(p1x-1, p1y),
new Point(p3x+2, p3y+1),
new Point(p4x-1, p4y+1),
new TextCoord(u1, v1),
new TextCoord(u2, v2),
new TextCoord(u1, v2)
);
var triangle2 = new Triangle(
new Point(p1x-2, p1y),
new Point(p2x+1, p2y),
new Point(p3x+1, p3y+1),
new TextCoord(u1, v1),
new TextCoord(u2, v1),
new TextCoord(u2, v2)
);
Я пытаюсь трансформировать и/или перевернуть изображение. Однако в моей текущей реализации видна проволочная сетка, и я не знаю, как ее удалить. Я пытался использовать http://tulrich.com/geekstuff/canvas/ Perspective.html, но я до сих пор не могу понять, что контрольная точка и отсутствие проволочной сетки вместе. Спасибо! Я также исследовал следующий вопрос: «Нарисовать искаженное изображение на холсте html5», но мне не нужны ответы, подобные этому, потому что мне нужно, чтобы изображение переворачивалось или контрольные точки меняются местами без проволочной сетки. [code]var triangle1 = new Triangle( new Point(p1x-1, p1y), new Point(p3x+2, p3y+1), new Point(p4x-1, p4y+1), new TextCoord(u1, v1), new TextCoord(u2, v2), new TextCoord(u1, v2) );
var triangle2 = new Triangle( new Point(p1x-2, p1y), new Point(p2x+1, p2y), new Point(p3x+1, p3y+1), new TextCoord(u1, v1), new TextCoord(u2, v1), new TextCoord(u2, v2) ); [/code] Вот URL-адрес кода моей программы:
[code]var controls = [] var canvas var context var image var triangles = [] var dirtyTriangles = true
var rand = function(s, e) { return Math.random() * (e - s) + s }
if (dirtyTriangles) { dirtyTriangles = false calculateGeometry() }
for (triangle of triangles) { render(false, image, triangle) } }
var calculateGeometry = function() { // clear triangles out triangles = [] // generate subdivision var subs = 7 var divs = 7 const p1 = new Point( parseInt(controls[0].style.left) + 6, parseInt(controls[0].style.top) + 6, ) const p2 = new Point( parseInt(controls[1].style.left) + 6, parseInt(controls[1].style.top) + 6, ) const p3 = new Point( parseInt(controls[2].style.left) + 6, parseInt(controls[2].style.top) + 6, ) const p4 = new Point( parseInt(controls[3].style.left) + 6, parseInt(controls[3].style.top) + 6, )
var dx1 = p4.x - p1.x var dy1 = p4.y - p1.y var dx2 = p3.x - p2.x var dy2 = p3.y - p2.y
var imgW = image.naturalWidth var imgH = image.naturalHeight
for (var sub = 0; sub < subs; ++sub) { var curRow = sub / subs var nextRow = (sub + 1) / subs
var curRowX1 = p1.x + dx1 * curRow var curRowY1 = p1.y + dy1 * curRow
var curRowX2 = p2.x + dx2 * curRow var curRowY2 = p2.y + dy2 * curRow
var nextRowX1 = p1.x + dx1 * nextRow var nextRowY1 = p1.y + dy1 * nextRow
var nextRowX2 = p2.x + dx2 * nextRow var nextRowY2 = p2.y + dy2 * nextRow for (var div = 0; div < divs; ++div) { var curCol = div / divs var nextCol = (div + 1) / divs var dCurX = curRowX2 - curRowX1 var dCurY = curRowY2 - curRowY1 var dNextX = nextRowX2 - nextRowX1 var dNextY = nextRowY2 - nextRowY1 var p1x = curRowX1 + dCurX * curCol var p1y = curRowY1 + dCurY * curCol
var p2x = curRowX1 + (curRowX2 - curRowX1) * nextCol var p2y = curRowY1 + (curRowY2 - curRowY1) * nextCol
var p3x = nextRowX1 + dNextX * nextCol var p3y = nextRowY1 + dNextY * nextCol
var p4x = nextRowX1 + dNextX * curCol var p4y = nextRowY1 + dNextY * curCol var u1 = curCol * imgW var u2 = nextCol * imgW var v1 = curRow * imgH var v2 = nextRow * imgH
var triangle1 = new Triangle( new Point(p1x, p1y), new Point(p3x, p3y), new Point(p4x, p4y), new TextCoord(u1, v1), new TextCoord(u2, v2), new TextCoord(u1, v2), ) var triangle2 = new Triangle( new Point(p1x, p1y), new Point(p2x, p2y), new Point(p3x, p3y), new TextCoord(u1, v1), new TextCoord(u2, v1), new TextCoord(u2, v2), )
// Draw the whole image. Transform and clip will map it onto the // correct output triangle. // // TODO: figure out if drawImage goes faster if we specify the rectangle that // bounds the source coords. ctx.drawImage(im, 0, 0) ctx.restore() }
// point class
var Point = function(x, y) { this.x = x ? x : 0 this.y = y ? y : 0 }
var p = Point.prototype
p.length = function(point) { point = point ? point : new Point() var xs = 0, ys = 0 xs = point.x - this.x xs = xs * xs
Я хотел бы спросить, есть ли версия без проволочной сетки, я пытался использовать но все равно не могу реализовать контрольную точку и нет проволочная сетка вместе. Спасибо!
Ссылка Нарисуйте искаженное изображение на холсте html5 Авторская версия
Но...
Я хотел бы спросить, есть ли версия без проволочной сетки, я пытался использовать но все равно не могу реализовать контрольную точку и нет проволочная сетка вместе. Спасибо!
Ссылка Нарисуйте искаженное изображение на холсте html5 Авторская версия
Но...
Возможно ли, и если да, то как, рисовать изображения с четырьмя углами, искаженными до непрямоугольной формы. Например, если вы хотите нарисовать изображение так, как если бы оно было повернуто в трехмерном пространстве.
Прочитать изображение с диска (в моем случае PNG)
Нарисуйте в нем несколько фигур, например прямоугольников...
Отобразите полученное изображение в моем блокноте Jupyter, а также сохраните его обратно в файл
Я пытаюсь рисовать прямые линии с помощью холста и методаDetectDragGestures, но пока добился только хаотического поведения без каких-либо фиксаций. Я ищу решение, которое позволит мне всегда иметь прямые линии...