2010-07-23 1 views

ответ

87

На самом деле правильный способ скопировать данные холст, чтобы передать старый холст на новый пустой холст. Попробуйте эту функцию.

function cloneCanvas(oldCanvas) { 

    //create a new canvas 
    var newCanvas = document.createElement('canvas'); 
    var context = newCanvas.getContext('2d'); 

    //set dimensions 
    newCanvas.width = oldCanvas.width; 
    newCanvas.height = oldCanvas.height; 

    //apply the old canvas to the new one 
    context.drawImage(oldCanvas, 0, 0); 

    //return the new canvas 
    return newCanvas; 
} 

Использование getImageData предназначено для доступа к пиксельным данным, а не для копирования холстов. Копирование с ним очень медленно и сложно в браузере. Его следует избегать.

+5

+1 на ссылке 'drawImage()', но стоит отметить, что вызов 'new Canvas()' не работает во всех браузерах (в частности, Firefox) - вместо этого вы должны использовать 'document.createElement ('canvas')' –

+0

@ AJ. Спасибо, я исправил это. –

+0

довольно странная ошибка здесь: при загрузке изображения и корректировке размера холста соответственно и _then_ клонирования он только клонирует первые 300 пикселей (по горизонтали) и первые 150 пикселей (по вертикали) (см. Http: //peter.muehlbacher. me/playground/mycelium? src = ../downloads/chess_pawn.png при нажатии - это регистрация альфа-значений копии) – Peter

11

Вы можете позвонить

context.getImageData(0, 0, context.canvas.width, context.canvas.height); 

который будет возвращать объект ImageData. Это свойство имеет свойство данных типа CanvasPixelArray, которое содержит значения rgb и прозрачности всех пикселей. Эти значения не являются ссылками на холст, поэтому их можно изменить, не затрагивая холст.

Если вы также хотите получить копию элемента, вы можете создать новый элемент canvas и затем скопировать все атрибуты в новый элемент canvas. После этого вы можете использовать

context.putImageData(imageData, 0, 0); 

метод нарисовать объект ImageData на новый элемент холста.

См. Этот ответ для более подробной информации getPixel from HTML Canvas? об управлении пикселями.

Вы можете найти эту статью полезной MOZILLA а также https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Drawing_shapes

+0

Хорошее место. Благодарю. – Castrohenge

+2

Не очень хороший метод для копирования. Это больше подходит для хранения данных. –

 Смежные вопросы

  • Нет связанных вопросов^_^