@awayjs/stage
Version:
Stage for AwayJS
109 lines (108 loc) • 4.21 kB
JavaScript
var ImageUtils = /** @class */ (function () {
function ImageUtils() {
}
ImageUtils.getImageBuffer = function (img) {
var canvas = this.CANVAS || (this.CANVAS = document.createElement('canvas'));
var context = this.CONTEXT || (this.CONTEXT = canvas.getContext('2d', { willReadFrequently: true }));
if (img instanceof HTMLImageElement) {
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
}
else {
canvas.width = img.width;
canvas.height = img.height;
}
context.drawImage(img, 0, 0);
return context.getImageData(0, 0, canvas.width, canvas.height).data;
};
/**
*
*/
ImageUtils.imageToBitmapImage2D = function (img, factory, powerOfTwo) {
if (powerOfTwo === void 0) { powerOfTwo = true; }
var width;
var height;
if (img instanceof HTMLImageElement) {
width = img.naturalWidth;
height = img.naturalHeight;
}
else {
width = img.width;
height = img.height;
}
var image2D = factory.createImage2D(width, height, true, null, powerOfTwo);
image2D.addLazySymbol({
needParse: true,
definition: {
width: width,
height: height,
isPMA: true,
data: null
},
lazyParser: function () {
this.needParse = false;
this.definition.data = ImageUtils.getImageBuffer(img);
this.lazyParser = null;
return this;
}
});
return image2D;
};
ImageUtils.isImage2DValid = function (image2D) {
if (image2D == null)
return true;
return this.isDimensionValid(image2D.width, image2D.powerOfTwo)
&& this.isDimensionValid(image2D.height, image2D.powerOfTwo);
};
ImageUtils.isHTMLImageElementValid = function (image) {
if (image == null)
return true;
return this.isDimensionValid(image.width) && this.isDimensionValid(image.height);
};
ImageUtils.isDimensionValid = function (d, powerOfTwo) {
if (powerOfTwo === void 0) { powerOfTwo = true; }
return d >= 1 && d <= this.MAX_SIZE && (!powerOfTwo || this.isPowerOfTwo(d));
};
ImageUtils.isPowerOfTwo = function (value) {
return value ? ((value & -value) == value) : false;
};
ImageUtils.getBestPowerOf2 = function (value) {
var p = 1;
while (p < value)
p <<= 1;
if (p > this.MAX_SIZE)
p = this.MAX_SIZE;
return p;
};
ImageUtils.getDefaultImage2D = function () {
return this._defaultImage2D || (this._defaultImage2D = this._defaultImage2DFactory());
};
ImageUtils.getDefaultImageCube = function () {
return this._defaultImageCube || (this._defaultImageCube = this._defaultImageCubeFactory());
};
ImageUtils.getDefaultImageSampler = function () {
return this._defaultImageSampler || (this._defaultImageSampler = this._defaultImageSamplerFactory());
};
ImageUtils.registerDefaults = function (defaultImage2DFactory, defaultImageCubeFactory, defaultImageSamplerFactory, defaultFactory) {
if (defaultImage2DFactory === void 0) { defaultImage2DFactory = null; }
if (defaultImageCubeFactory === void 0) { defaultImageCubeFactory = null; }
if (defaultImageSamplerFactory === void 0) { defaultImageSamplerFactory = null; }
if (defaultFactory === void 0) { defaultFactory = null; }
if (defaultImage2DFactory) {
this._defaultImage2DFactory = defaultImage2DFactory;
}
if (defaultImageCubeFactory) {
this._defaultImageCubeFactory = defaultImageCubeFactory;
}
if (defaultImageSamplerFactory) {
this._defaultImageSamplerFactory = defaultImageSamplerFactory;
}
if (defaultFactory) {
this._defaultFactory = defaultFactory;
}
};
ImageUtils.MAX_SIZE = 8192;
return ImageUtils;
}());
export { ImageUtils };
export default ImageUtils;