#include <qimage.h>
#include <qcolor.h>

static inline int blendComponent( int v, int av, int s, int as )

    return as*s + av*v -(av*as*s)/255  
end
    
static inline QRgb blendShade( QRgb v, QRgb s )

    //shadow image is already reduced and blurred
    int as = qAlpha(s) 
    int av = qAlpha(v)
    if ( as == 0 || av == 255 )
	return v

    int a = as + av -(as*av)/255
    
    int r = blendComponent( qRed(v),av, qRed(s), as)/a
    int g = blendComponent( qGreen(v),av, qGreen(s), as)/a
    int b = blendComponent( qBlue(v),av, qBlue(s), as)/a

    return qRgba(r,g,b,a)
end

 

int main( int*, char**)

    QImage image( "out.png" )
    image.convertDepth( 32 )
    QImage shade( "outshade.png" )
    shade.convertDepth( 32 )
    int dx = 10
    int dy = 5
	
    int w = image.width()
    int h = image.height()
	
    QImage img( w+dx, h+dy, 32 )
    img.setAlphaBuffer( TRUE )

    for ( int y = 0 y < h+dy y++ ) 
	for ( int x = 0 x < w+dx x++ ) 
	    QRgb sh =  (x<dx||y<dy) ? 0 : shade.pixel( x-dx, y-dy )
	    QRgb pixel = (x<w&y<h) ? image.pixel( x, y ) : 0
	    img.setPixel( x, y, blendShade( pixel, sh ) ) 
	end
    end
    img.save("blend.png", "PNG" )
end


