Вход Регистрация
Файл: Space race/bkcore/ImageData.js
Строк: 102
<?php
/*!
 * @class bkcore.ImageData
 *
 * Loads an image and gives access to pixel data.
 * 
 * @author Thibaut 'BKcore' Despoulain <http://bkcore.com>
 */

/*!
 * @package bkcore
 */
var bkcore bkcore || {};

/*!
 * Creates a new ImageData object
 * 
 * @param path String The path of the image
 * @param callback Function A callback function to be called once th eimage is loaded
 */
bkcore.ImageData = function(pathcallback)
{
    var 
self this;

    
this.image = new Image();
    
this.pixels null;
    
this.canvas null;
    
this.loaded false;

    
this.image.onload = function() {
        
self.canvas document.createElement('canvas');
        
self.canvas.width self.image.width;
        
self.canvas.height self.image.height;

        var 
context self.canvas.getContext('2d');
        
context.drawImage(self.image00);

        
self.pixels context.getImageData(00self.canvas.widthself.canvas.height);

        
self.loaded true;

        
context null;
        
self.canvas null;
        
self.image null;

        if(
callbackcallback.call(self);        
    };
    
this.image.crossOrigin "anonymous";
    
this.image.src path;
};

/*!
 * Gets pixel RGBA data at given index
 * 
 * @param x int In pixels
 * @param y int In pixels
 * @return Object{r,g,b,a}
 */
bkcore.ImageData.prototype.getPixel = function(xy)
{
    if(
this.pixels == null
        
|| 0
        
|| 0
        
|| >= this.pixels.width
        
|| >= this.pixels.height)
        return {
r0g0b0a:0};

    var 
index = (y*this.pixels.width x) * 4;

    return {
        
rthis.pixels.data[index],
        
gthis.pixels.data[index 1],
        
bthis.pixels.data[index 2],
        
athis.pixels.data[index 3]
    };
};

/*!
 * Gets pixel RGBA data at given float index using bilinear interpolation
 * 
 * @param x float In subpixels
 * @param y float In subpixels
 * @return Object{r,g,b,a}
 */
bkcore.ImageData.prototype.getPixelBilinear = function(fxfy)
{
    var 
Math.floor(fx);
    var 
Math.floor(fy);
    var 
rx fx .5;
    var 
ry fy .5;
    var 
ax Math.abs(rx);
    var 
ay Math.abs(ry);
    var 
ccxycxcycf1cf2;
    var 
dx rx ?  -1;
    var 
dy ry ? -1;
    
    
this.getPixel(xy);
    
cx this.getPixel(x+dxy);
    
cy this.getPixel(xy+dy);
    
cxy this.getPixel(x+dxy+dy);

    
cf1 = [
        (
1-ax) * c.ax cx.r,
        (
1-ax) * c.ax cx.g,
        (
1-ax) * c.ax cx.b,
        (
1-ax) * c.ax cx.a
    
];

    
cf2 = [
        (
1-ax) * cy.ax cxy.r,
        (
1-ax) * cy.ax cxy.g,
        (
1-ax) * cy.ax cxy.b,
        (
1-ax) * cy.ax cxy.a
    
];
    
    return {
        
r: (1-ay) * cf1[0] + ay cf2[0],
        
g: (1-ay) * cf1[1] + ay cf2[1],
        
b: (1-ay) * cf1[2] + ay cf2[2],
        
a: (1-ay) * cf1[3] + ay cf2[3]
    };
}

/*!
 * Gets pixel data at given index 
 * as 3-bytes integer (for floating-point textures erzats, from RGB values)
 * 
 * @param x int In pixels
 * @param y int In pixels
 * @return int (R + G*255 + B*255*255)
 */
bkcore.ImageData.prototype.getPixelF = function(xy)  

    var 
color this.getPixel(xy);
    return 
color.color.255 color.255 255
};

/*!
 * Gets pixel data at given float index using bilinear interpolationas
 * as 3-bytes integer (for floating-point textures erzats, from RGB values)
 * 
 * @param x float In subpixels
 * @param y float In subpixels
 * @return Object{r,g,b,a}
 */
bkcore.ImageData.prototype.getPixelFBilinear = function(fxfy)
{
    var 
color this.getPixelBilinear(fxfy);
    return 
color.color.255.0 color.255.0 255.0
}
?>
Онлайн: 2
Реклама