2015-03-31 2 views
0

Привет, у меня есть этот холст и изображение, но мне нужно сделать так, чтобы холст обертывал изображение, связанное с его размером. Сейчас я поставил тестовое изображение и установил размер. Я хочу, когда я положил и изобразил холст, чтобы обернуть его 100% шириной 100% высоты изображения.Как поместить холст, чтобы обернуть размер изображения

var canvas=document.getElementById("canvas"); 
var ctx=canvas.getContext("2d"); 
var cw=canvas.width; 
var ch=canvas.height; 

var boxWidth=100; 
var boxHeight=100; 
var boxRows=Math.ceil(865/boxHeight); 
var boxCols=Math.ceil(1152/boxWidth); 
var boxes=new Array(boxRows*boxCols); 
for(var i=0;i<boxes.length;i++){boxes[i]=false;} 

var img=new Image(); 
img.onload=start; 
img.crossOrigin='anonymous'; 
img.src="http://i.imgur.com/RrHayx8.png?1"; 
function start(){ 

ctx.drawImage(img,0,0); 

var d=ctx.getImageData(0,0,cw,ch).data; 

for(var i=0;i<d.length;i+=4){ 
if(d[i+3]>200){ 
    var px=parseInt(i/4); 
    var pixelY=parseInt(px/cw); 
    var pixelX=px-pixelY*cw; 
    var boxX=parseInt(pixelX/boxWidth); 
    var boxY=parseInt(pixelY/boxHeight); 
    boxes[boxY*boxCols+boxX]=true; 
} 
    } 

ctx.globalAlpha=0.25; 
ctx.fillStyle='red'; 

for(var i=0;i<boxes.length;i++){ 
var y=parseInt(i/boxCols); 
var x=i-y*boxCols; 
if(boxes[i]==true){ 
    ctx.fillRect(x*boxWidth,y*boxHeight,boxWidth,boxHeight);   
} 
} 

ctx.globalAlpha=1.00; 
ctx.fillStyle='black'; 

}

https://jsfiddle.net/kdichev/Lmqdrkp2/

ответ

2

Если вы всегда загружать изображение в положение (0,0), то вы можете установить размер холста до размера загруженного изображения путем добавления

canvas.width = img.width; 
    canvas.height = img.height; 
    ctx=canvas.getContext("2d"); 

до самого начала вашего start() функция. Первые две строки изменяют размер холста. После изменения размера контекст должен быть обновлен, чтобы он работал правильно.

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