123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- var fs = require("fs"),
- path = require("path"),
- Canvas = require("../vendor/canvas"),
- queue = require("d3").queue;
-
- function drawFrames(renderer, options, cb) {
- var frameQueue = queue(10),
- canvases = [];
-
- for (var i = 0; i < 10; i++) {
- canvases.push(new Canvas(options.width, options.height));
- }
-
- for (var i = 0; i < options.numFrames; i++) {
- frameQueue.defer(drawFrame, i);
- }
-
- frameQueue.awaitAll(cb);
-
- function drawFrame(frameNumber, frameCallback) {
- var canvas = canvases.pop(),
- context = canvas.getContext("2d");
-
- renderer.drawFrame(context, {
- caption: options.caption,
- citation: options.citation,
- label: options.label,
- waveform: options.waveform[frameNumber],
- frame: frameNumber
- });
-
- canvas.toBuffer(function(err, buf) {
- if (err) {
- return cb(err);
- }
-
- fs.writeFile(
- path.join(options.frameDir, zeropad(frameNumber + 1, 6) + ".png"),
- buf,
- function(writeErr) {
- if (writeErr) {
- return frameCallback(writeErr);
- }
-
- if (options.tick) {
- options.tick();
- }
-
- canvases.push(canvas);
-
- return frameCallback(null);
- }
- );
- });
- }
- }
-
- function zeropad(str, len) {
- str = str.toString();
-
- while (str.length < len) {
- str = "0" + str;
- }
-
- return str;
- }
-
- module.exports = drawFrames;
|