Ocena użytkownikóww: ***** / 0
Nadesłany przez Tomasz Lubiński, 07 grudnia 2011 21:01
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
nn.js:
//Najblizsze sasiedztwo
//(c) 2011 by Tomasz Lubinski
//www.algorytm.org
/* Data of the image */
var imageData;
var width;
var height;
/* Neirest neighbour algorithm */
function neirest_neighbour(scaleX, scaleY)
{
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
// set new size
canvas.width = width * scaleX / 100.0;
canvas.height = height * scaleY / 100.0;
// perform neirest neighbour algorithm
var ratiox = (width*1.0)/(canvas.width*1.0);
var ratioy = (height*1.0)/(canvas.height*1.0);
var newImageData = ctx.createImageData(canvas.width, canvas.height);
for (var i=0; i<canvas.height; i++)
{
for (var j=0; j<canvas.width; j++)
{
var indexSrc = (Math.floor(i*ratioy)*width+Math.floor(j*ratiox))*4;
var indexDst = (i*canvas.width+j)*4;
newImageData.data[indexDst+0] = imageData.data[indexSrc+0];
newImageData.data[indexDst+1] = imageData.data[indexSrc+1];
newImageData.data[indexDst+2] = imageData.data[indexSrc+2];
newImageData.data[indexDst+3] = imageData.data[indexSrc+3];
}
}
// copy the image data back onto the canvas
ctx.putImageData(newImageData, 0, 0);
}
/* load image pointed by param_file to canvas */
function loadImage(imgSrc)
{
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
// add file:// if user specified local path
if (imgSrc.indexOf("//") == -1 && imgSrc.indexOf(".") != 0)
{
imgSrc = "file:///" + imgSrc;
}
// load file into canvas
var img = new Image();
img.onload = function(){
width = img.width;
height = img.height;
canvas.width = width;
canvas.height = height;
ctx.drawImage(img,0,0);
// get image data
try
{
imageData = ctx.getImageData(0, 0, width, height);
} catch(e)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
imageData = ctx.getImageData(0, 0, width, height);
}
}
img.src = imgSrc;
}