public void Display( PngEncoder surface, Color baseColor )
{
for( int y = 1; y < _height - 1; y++ )
{
int rowStart = surface.GetRowStart( y );
for( int x = 1; x < _width - 1; x++ )
{
int xoffset = _buffer1[ x - 1, y ] - _buffer1[ x + 1, y ];
int yoffset = _buffer1[ x, y - 1 ] - _buffer1[ x, y + 1 ];
int shading = ( xoffset - yoffset ) / 2;
xoffset = ( int ) ( xoffset / 35.0 );
yoffset = ( int ) ( yoffset / 35.0 );
int xnew = x + xoffset;
if( xnew < 0 )
xnew = 0;
if( xnew >= _width )
xnew = _width - 1;
int ynew = y + yoffset;
if( ynew < 0 )
ynew = 0;
if( ynew >= _height )
ynew = _height - 1;
byte tred = baseColor.R;
byte tgreen = baseColor.G;
byte tblue = baseColor.B;
if( shading < 0 )
shading = 0;
if( shading > 255 )
shading = 255;
tred = Saturate( tred + shading );
tgreen = Saturate( tgreen + shading );
tblue = Saturate( tblue + shading );
surface.SetPixelAtRowStart( x, rowStart, tred, tgreen, tblue, Saturate( shading * 12) );
}
}
}