mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
6528c7724b
!! NOT STABLE !! Initial implementation. No UI update yet. Check js/model/Piskel.js and js/model/Layer.js for an overview of the new API. Piskels can be saved on the existing service. Previous piskels cannot be loaded. This should be fixed soon.
44 lines
1.6 KiB
JavaScript
44 lines
1.6 KiB
JavaScript
(function () {
|
|
|
|
var ns = $.namespace("pskl.rendering");
|
|
|
|
ns.SpritesheetRenderer = function (piskelController) {
|
|
this.piskelController = piskelController;
|
|
};
|
|
|
|
ns.SpritesheetRenderer.prototype.renderAsImageDataSpritesheetPNG = function () {
|
|
var canvas = this.createCanvas_();
|
|
for (var i = 0 ; i < this.piskelController.getFrameCount() ; i++) {
|
|
var frame = this.piskelController.getFrameAt(i);
|
|
this.drawFrameInCanvas_(frame, canvas, i * this.piskelController.getWidth(), 0);
|
|
}
|
|
return canvas.toDataURL("image/png");
|
|
};
|
|
|
|
/**
|
|
* TODO(juliandescottes): Mutualize with code already present in FrameRenderer
|
|
*/
|
|
ns.SpritesheetRenderer.prototype.drawFrameInCanvas_ = function (frame, canvas, offsetWidth, offsetHeight) {
|
|
var context = canvas.getContext('2d');
|
|
for(var col = 0, width = frame.getWidth(); col < width; col++) {
|
|
for(var row = 0, height = frame.getHeight(); row < height; row++) {
|
|
var color = frame.getPixel(col, row);
|
|
if(color != Constants.TRANSPARENT_COLOR) {
|
|
context.fillStyle = color;
|
|
context.fillRect(col + offsetWidth, row + offsetHeight, 1, 1);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
ns.SpritesheetRenderer.prototype.createCanvas_ = function () {
|
|
var frameCount = this.piskelController.getFrameCount();
|
|
if (frameCount > 0){
|
|
var width = frameCount * this.piskelController.getWidth();
|
|
var height = this.piskelController.getHeight();
|
|
return pskl.CanvasUtils.createCanvas(width, height);
|
|
} else {
|
|
throw "Cannot render empty Spritesheet";
|
|
}
|
|
};
|
|
})(); |