background image

            height = __src.row,
            dst = 

new

 Mat(height, width, CV_RGBA),

            dData = dst.data,
            brightness = Math.max(-255, Math.min(255, __brightness || 0)),
            contrast = Math.max(-255, Math.min(255, __contrast || 0));
        
        

var

 gray = cvtColor(__src, CV_RGBA2GRAY),

            allValue = 0,
            gData = gray.data;
        

var

 y, x, c;

        
        

for

(y = height; y--;){

            

for

(x = width; x--;){

                allValue += gData[y * width + x];
            }
        }
        
        

var

 r, g, b, offset, gAverage = (allValue / (height * width)) | 0;

        
        

for

(y = height; y--;){

            

for

(x = width; x--;){

                offset = (y * width + x) * 4;
                dData[offset] = sData[offset] + brightness; 
                dData[offset + 1] = sData[offset + 1] + brightness; 
                dData[offset + 2] = sData[offset + 2] + brightness; 
            
                

if

(contrast >= 0){ 

                    

for

(c = 3; c--;){ 

                        

if

(dData[offset + c] >= gAverage){ 

                            dData[offset + c] = dData[offset + c] + (255 - gAverage) * contrast / 255; 
                        }

else

                            dData[offset + c] = dData[offset + c] - (gAverage * contrast / 255); 
                        } 
                    } 
                }

else

{

                    dData[offset] = dData[offset] + (dData[offset] - gAverage) * contrast / 255; 
                    dData[offset + 1] = dData[offset + 1] + (dData[offset + 1] - gAverage) * contrast / 
255; 
                    dData[offset + 2] = dData[offset + 2] + (dData[offset + 2] - gAverage) * contrast / 
255; 
                }
                
                dData[offset + 3] = 255;
            }