bug fixed a priori. Grid in shadows for Cblack

This commit is contained in:
jdc
2011-06-13 13:29:54 +02:00
parent 640f4142a7
commit bd2714c37c
2 changed files with 2346 additions and 2334 deletions

View File

@@ -1311,9 +1311,14 @@ black_lev[2]=raw.blacktwo;//B
black_lev[3]= raw.blackzero; black_lev[3]= raw.blackzero;
} }
for(int i=0; i<4; i++) { for(int i=0; i<4; i++) {
scale_mul[i]=scale_mu_l[i]; scale_mul[i]=scale_mu_l[i];}
if( c_black[i]+black_lev[i] >0) cblack[i]=c_black[i]+black_lev[i]; else cblack[i]=0;// adjust black level
} if( c_black[0]+black_lev[1] >0) cblacksom[0]=c_black[0]+black_lev[1]; else cblacksom[0]=0;// adjust black level
if( c_black[3]+black_lev[3] >0) cblacksom[3]=c_black[3]+black_lev[3]; else cblacksom[3]=0;// adjust black level
if( c_black[2]+black_lev[2] >0) cblacksom[2]=c_black[2]+black_lev[2]; else cblacksom[2]=0;// adjust black level
if( c_black[1]+black_lev[0] >0) cblacksom[1]=c_black[1]+black_lev[0]; else cblacksom[1]=0;// adjust black level
// this seems strange, but it works
// scale image colors // scale image colors
if( ri->isBayer() ){ if( ri->isBayer() ){
@@ -1323,21 +1328,26 @@ black_lev[3]= raw.blackzero;
int c = FC(row, col); int c = FC(row, col);
if (ri->ISGREEN(row,col)) { if (ri->ISGREEN(row,col)) {
if (row&1) { if (row&1) {
val-=cblack[1]; val-=cblacksom[1];
val *= scale_mul[1]; val *= scale_mul[1];
} }
else { else {
val-=cblack[3]; val-=cblacksom[3];
val *= scale_mul[3]; val *= scale_mul[3];
} }
} }
else { else if (ri->ISRED(row,col)) {
val-=cblack[c]; val-=cblacksom[0];
val*=scale_mul[c];} val*=scale_mul[0];}
else if (ri->ISBLUE(row,col)) {
val-=cblacksom[2];
val*=scale_mul[2];}
rawData[row][col] = (val); rawData[row][col] = (val);
} }
} }
}else{ }else{
// i don't know how it's run...
for (int row = winy; row < winy+winh; row ++){ for (int row = winy; row < winy+winh; row ++){
for (int col = winx; col < winx+winw; col++) { for (int col = winx; col < winx+winw; col++) {
float val = rawData[row][3*col+0]; float val = rawData[row][3*col+0];
@@ -1998,15 +2008,17 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU
if (ri->isBayer()) { if (ri->isBayer()) {
for (int j=start; j<end; j++) { for (int j=start; j<end; j++) {
if (ri->ISGREEN(i,j)) { if (ri->ISGREEN(i,j)) {
if(i &1) idx = CLIP((int)CurveFactory::gamma(mult*(ri->data[i][j]-cblack[0])));// green 1 if(i &1) idx = CLIP((int)CurveFactory::gamma(mult*(ri->data[i][j]-(cblacksom[1]/*+black_lev[1]*/))));// green 1
else else
idx = CLIP((int)CurveFactory::gamma(mult*(ri->data[i][j]-cblack[3])));//green 2 idx = CLIP((int)CurveFactory::gamma(mult*(ri->data[i][j]-(cblacksom[3]/*+black_lev[3]*/))));//green 2
histGreenRaw[idx>>8]++; histGreenRaw[idx>>8]++;
} else if (ri->ISRED(i,j)) { } else if (ri->ISRED(i,j)) {
idx = CLIP((int)CurveFactory::gamma(mult*(ri->data[i][j]-cblack[1]))); idx = CLIP((int)CurveFactory::gamma(mult*(ri->data[i][j]-(cblacksom[0]/*+black_lev[0]*/))));
histRedRaw[idx>>8]++; histRedRaw[idx>>8]++;
} else if (ri->ISBLUE(i,j)) { } else if (ri->ISBLUE(i,j)) {
idx = CLIP((int)CurveFactory::gamma(mult*(ri->data[i][j]-cblack[2]))); idx = CLIP((int)CurveFactory::gamma(mult*(ri->data[i][j]-(cblacksom[2]/*+black_lev[2]*/))));
histBlueRaw[idx>>8]++; histBlueRaw[idx>>8]++;
} }
} }

View File

@@ -64,7 +64,7 @@ class RawImageSource : public ImageSource {
float cblack[4];// black float cblack[4];// black
float scale_mu_l[4];// copy of scale_mul, for saturation float scale_mu_l[4];// copy of scale_mul, for saturation
float c_black[4]; // copy of cblack Dcraw for black level float c_black[4]; // copy of cblack Dcraw for black level
float cblacksom[4];
double camwb_red; double camwb_red;
double camwb_green; double camwb_green;
double camwb_blue; double camwb_blue;