我正在尝试制作一个在 Canvas 上绘制图像的网站,然后用户可以按下一个按钮来 ctx.fill() 它的某些部分的颜色。我遇到了问题,我只能 ctx.fill() 最近创建的形状,这通常不是我想要的形状。
这是一个例子。在这段代码中(位于http://build.rivingtondesignhouse.com/piol/test/)我试图绘制第一个矩形,然后 save() 它在堆栈上,然后绘制第二个矩形(并且不要保存它),然后当我的 fill() 函数被调用时,我想用不同的模式恢复()第一个矩形和 ctx.fill()它。它不起作用!
在实践中,我实际上是在尝试用用户在绘制图像后选择的任何颜色填充这个复杂形状的灰色部分,但我认为技术是相同的。(http://build.rivingtondesignhouse.com/piol/test/justTop.html)
提前感谢您的帮助!!!
这是代码:
<script type="text/javascript">
var canvas;
var ctx;
function init() {
canvas = document.getElementById("canvas");
ctx = canvas.getContext("2d");
draw();
}
function draw() {
ctx.fillStyle = '#FA6900';
ctx.shadowOffsetX = 5;
ctx.shadowOffsetY = 5;
ctx.shadowBlur = 4;
ctx.shadowColor = 'rgba(204, 204, 204, 0.5)';
ctx.fillRect(0,0,15,150);
ctx.save();
ctx.fillStyle = '#E0E4CD';
ctx.shadowOffsetX = 10;
ctx.shadowOffsetY = 10;
ctx.shadowBlur = 4;
ctx.shadowColor = 'rgba(204, 204, 204, 0.5)';
ctx.fillRect(30,0,30,150);
}
function fill(){
var image = new Image();
image.src = "http://www.html5canvastutorials.com/demos/assets/wood-pattern.png";
image.onload = drawPattern;
function drawPattern() {
ctx.restore();
ctx.fillStyle = ctx.createPattern(image, "repeat");
ctx.fill();
}
}
init();