"Kind of" slow; maybe replacing the table with rows and columns of letters would speed it up. Next phase is to read (C header file -style) X PixMaps with XmlHttpRequest and display them add a 1-D Game of Life.
Bitmap.js:
function Bitmap( sizex, sizey, root, defaultcolor)
{
this._sizeX =sizex;
this._sizeY =sizey;
this._scanline =[ ];
this._tablename = root + 'BitmapTable';
$( '#' +root).append( '<table id=\"' +this._tablename +'\"></table>');
for( var i =0; i <this._sizeY; i++)
{
this._scanline[ i] =[ ];
$( '#' +this._tablename).append( '<tr id=\"' +this._tablename +'row' +i +'\"></tr>');
for( var j =0; j <this._sizeX; j++)
{
this._scanline[ i][ j] =defaultcolor;
$( '#' +this._tablename +'row' +i).append( '<td class=\"' +root +'BitmapTableCell\" id=\"' +this._tablename +'row' +i +'col' +j +'\"></td>').css( 'background-color', defaultcolor);
}
window.status =i + ' ' + j;
}
}
Bitmap.prototype._sizeX;
Bitmap.prototype._sizeY;
Bitmap.prototype._scanline;
Bitmap.prototype._tablename;
Bitmap.prototype.getSizeX =function( )
{
return this._sizex;
}
Bitmap.prototype.getSizeY =function( )
{
return this._sizeY;
}
Bitmap.prototype.setPixel =function( x, y, color)
{
this._scanline[ y][ x] =color;
}
Bitmap.prototype.getPixel =function( x, y)
{
return this._scanline[ y][ x];
}
Bitmap.prototype.flip =function( )
{
for( var i =0; i <this._sizeY; i++)
{
for( var j =0; j <this._sizeX; j++)
{
$( '#' +this._tablename +'row' +i +'col' +j).css( 'background-color', this._scanline[ i][ j]);
}
}
}
main.js:
function time( )
{
return (new Date()).getTime();
}
$(document).ready( function() {
var w =32;
var h =32;
var tinit =time( );
var bitmap =new Bitmap( w, h, 'root', 'red');
var tmanip =time( );
for( var i =0; i <h; i++)
{
for( var j =0; j <w; j++)
{
bitmap.setPixel( j, i, ( i +j) %2 ? 'blue' :'green');
}
}
var tflip =time( );
bitmap.flip( );
var tfinal =time( );
var pixels =w *h;
alert( 'create took ' + (tmanip -tinit) + ' ms (' + ( (tmanip -tinit) /pixels) + ' ms / pixel)\n'
+'manip took ' + (tflip -tmanip) + ' ms (' + ( (tflip -tmanip) /pixels) + ' ms / pixel)\n'
+'flip took ' + (tfinal -tflip) + ' ms (' + ( (tfinal -tflip) /pixels) + ' ms / pixel)\n'
+'total ' + (tfinal -tinit) + ' ms (' + ( (tfinal -tinit) /pixels) + ' ms / pixel)\n');
// load X pixmap image
// ...
});
main.css:
body {
font-family : 'Lucida Grande', Arial, Helvetica, sans-serif;
background : #000;
color : #333;
margin : 35px;
}
#rootBitmapTable {
border : solid 4px #111;
padding : 0px;
border-spacing : 5px;
}
.rootBitmapTableCell {
min-width : 10px;
width : 10px;
max-width : 10px;
min-height : 10px;
height : 10px;
max-height : 10px;
padding : 0px;
margin : 0px;
border : solid 1px #111;
}