Modified reference blending algorithm.
git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@519 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
parent
4128461aee
commit
fb1ca482a7
|
@ -312,12 +312,27 @@ void Image::Blend( const Image &image, int transparency ) const
|
||||||
{
|
{
|
||||||
assert( width == image.width && height == image.height && colours == image.colours );
|
assert( width == image.width && height == image.height && colours == image.colours );
|
||||||
|
|
||||||
|
if ( !blend_buffer )
|
||||||
|
{
|
||||||
|
blend_buffer = new unsigned int[size];
|
||||||
|
|
||||||
|
unsigned int *pb = blend_buffer;
|
||||||
|
JSAMPLE *p = buffer;
|
||||||
|
|
||||||
|
while( p < (buffer+size) )
|
||||||
|
{
|
||||||
|
*pb++ = (unsigned int)((*p++)<<8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
JSAMPLE *psrc = image.buffer;
|
JSAMPLE *psrc = image.buffer;
|
||||||
JSAMPLE *pdest = buffer;
|
JSAMPLE *pdest = buffer;
|
||||||
|
unsigned int *pblend = blend_buffer;
|
||||||
|
|
||||||
while( pdest < (buffer+size) )
|
while( pdest < (buffer+size) )
|
||||||
{
|
{
|
||||||
*pdest++ = (JSAMPLE)(((*pdest * (100-transparency))+(*psrc++ * transparency))/100);
|
*pblend = (unsigned int)(((*pblend * (100-transparency))+(((*psrc++)<<8) * transparency))/100);
|
||||||
|
*pdest++ = (JSAMPLE)((*pblend++)>>8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,11 +61,15 @@ protected:
|
||||||
JSAMPLE *buffer;
|
JSAMPLE *buffer;
|
||||||
bool our_buffer;
|
bool our_buffer;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
mutable unsigned int *blend_buffer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Image( const char *filename )
|
Image( const char *filename )
|
||||||
{
|
{
|
||||||
ReadJpeg( filename );
|
ReadJpeg( filename );
|
||||||
our_buffer = true;
|
our_buffer = true;
|
||||||
|
blend_buffer = 0;
|
||||||
}
|
}
|
||||||
Image( int p_width, int p_height, int p_colours, JSAMPLE *p_buffer=0 )
|
Image( int p_width, int p_height, int p_colours, JSAMPLE *p_buffer=0 )
|
||||||
{
|
{
|
||||||
|
@ -84,6 +88,7 @@ public:
|
||||||
our_buffer = false;
|
our_buffer = false;
|
||||||
buffer = p_buffer;
|
buffer = p_buffer;
|
||||||
}
|
}
|
||||||
|
blend_buffer = 0;
|
||||||
}
|
}
|
||||||
Image( const Image &p_image )
|
Image( const Image &p_image )
|
||||||
{
|
{
|
||||||
|
@ -94,6 +99,7 @@ public:
|
||||||
buffer = new JSAMPLE[size];
|
buffer = new JSAMPLE[size];
|
||||||
memcpy( buffer, p_image.buffer, size );
|
memcpy( buffer, p_image.buffer, size );
|
||||||
our_buffer = true;
|
our_buffer = true;
|
||||||
|
blend_buffer = 0;
|
||||||
}
|
}
|
||||||
~Image()
|
~Image()
|
||||||
{
|
{
|
||||||
|
@ -101,6 +107,7 @@ public:
|
||||||
{
|
{
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
}
|
}
|
||||||
|
delete[] blend_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int Width() { return( width ); }
|
inline int Width() { return( width ); }
|
||||||
|
|
Loading…
Reference in New Issue