//display info
CString str;
if(pDoc->m_pDib->m_lpBMIH->biBitCount==8 ){
int hist[256]={0};
int min=255;
int max=0;
int total=0;
int num=(pDoc->EndPoint.x-pDoc->StartPoint.x+1)*(pDoc->EndPoint.y-pDoc->StartPoint.y+1);
for (int i = pDoc->StartPoint.y; i <=pDoc->EndPoint.y; i ++){
unsigned char* lpSrc =(unsigned char *)pDoc->m_pDib->m_lpImage+ lLineBytes* (lHeight-1-i) + pDoc->StartPoint.x-1;
for (int j =pDoc->StartPoint.x; j <=pDoc->EndPoint.x; j ++){
lpSrc++;//
hist[*lpSrc]++;
if(*lpSrc<min) min=*lpSrc;
if(*lpSrc>max) max=*lpSrc;
total+=*lpSrc;
}
}
if(num<1) num=1;
int mean=(int)(total/num);
int v=0;
int k_1=0,k_10=0,k_90=255,k_99=255;
for(int i=0;i<256;i++)
{
v+=hist[i];
if(v<num/100)
k_1=i;
if(v<num/10)
k_10=i;
if(v<num*9/10)
k_90=i;
if(v<num*99/100)
k_99=i;
}
if(num>20){
str.Format(L"\npDoc->StartPoint(%d ,%d)---pDoc->EndPoint(%d ,%d)\n Size(%dx%d)\n min=%d,max=%d,mean=%d\n\nratio\tgray\n0.01\t%d \n0.1 \t%d\n0.9 \t%d\n0.99\t%d\n",
pDoc->StartPoint.x,pDoc->StartPoint.y,pDoc->EndPoint.x,pDoc->EndPoint.y,pDoc->EndPoint.x-pDoc->StartPoint.x+1,pDoc->EndPoint.y-pDoc->StartPoint.y+1,
min,max,mean,
k_1,k_10,k_90,k_99);
//TRACE(str);
if(pDoc->EndPoint.x-pDoc->StartPoint.x+1<16 && pDoc->EndPoint.y-pDoc->StartPoint.y+1<16){
CString tmpstr;
str.Format(L"Data Size(%d x %d):\n",pDoc->EndPoint.x-pDoc->StartPoint.x+1,pDoc->EndPoint.y-pDoc->StartPoint.y+1);
for (int i = pDoc->StartPoint.y; i <=pDoc->EndPoint.y; i ++){
str+="\n";
unsigned char* lpSrc =(unsigned char *)pDoc->m_pDib->m_lpImage+ lLineBytes* (lHeight-1-i) + pDoc->StartPoint.x-1;
for (int j =pDoc->StartPoint.x; j <=pDoc->EndPoint.x; j ++){
lpSrc++;//
if(m_bTwoValue) tmpstr.Format(L"%d ",*lpSrc);
else{
if(*lpSrc<10) tmpstr.Format(L"00%d ",*lpSrc);
else if(*lpSrc<100) tmpstr.Format(L"0%d ",*lpSrc);
else tmpstr.Format(L"%d ",*lpSrc);
}
str+=tmpstr;
}
}
tmpstr.Format(L"\n\n min=%d,max=%d,mean=%d\nColor=%d\n",min,max,mean,pDoc->m_pDib->m_lpBMIH->biBitCount);
str+=tmpstr;
}
MessageBox(str);
}
}
else{//color
unsigned char* lpSrc;
int mingray=255;
int maxgray=0;
RGB minRgb;
RGB maxRgb;
HSI minHsi;
HSI maxHsi;
long int totalgray=0;
long int totalrgb_r=0;
long int totalrgb_g=0;
long int totalrgb_b=0;
double totalHsi_Hue=0.0;
double totalHsi_Saturation=0.0;
double totalHsi_Intensity=0.0;
minRgb.b=minRgb.g=minRgb.r=255;
maxRgb.b=maxRgb.g=maxRgb.r=0;
minHsi.Hue=360.0;
minHsi.Saturation=minHsi.Intensity=1.0;
maxHsi.Hue=maxHsi.Saturation=maxHsi.Intensity=0.0;
for (int i = pDoc->StartPoint.y; i <=pDoc->EndPoint.y; i ++)
for (int j =pDoc->StartPoint.x; j <=pDoc->EndPoint.x; j ++)
{
lpSrc=(unsigned char*)pDoc->m_pDib->m_lpImage + lLineBytes*(lHeight - 1 -i) + j*3;
RGB rgb;
HSI Hsi;
rgb.b=*lpSrc;rgb.g=*(lpSrc+1);rgb.r=*(lpSrc+2);
RgbtoHsi(&rgb, &Hsi);
int gray=(int)(0.114*rgb.r+0.587*rgb.g+0.299*rgb.b);
if(gray<mingray) mingray=gray;
if(gray>maxgray) maxgray=gray;
totalgray+=gray;
if(rgb.r<minRgb.r) minRgb.r=rgb.r;
if(rgb.r>maxRgb.r) maxRgb.r=rgb.r;
totalrgb_r+=rgb.r;
if(rgb.g<minRgb.g) minRgb.g=rgb.g;
if(rgb.g>maxRgb.g) maxRgb.g=rgb.g;
totalrgb_g+=rgb.g;
if(rgb.b<minRgb.b) minRgb.b=rgb.b;
if(rgb.b>maxRgb.b) maxRgb.b=rgb.b;
totalrgb_b+=rgb.b;
if(Hsi.Hue<minHsi.Hue) minHsi.Hue=Hsi.Hue;
if(Hsi.Hue>maxHsi.Hue) maxHsi.Hue=Hsi.Hue;
totalHsi_Hue+=Hsi.Hue;
if(Hsi.Saturation<minHsi.Saturation) minHsi.Saturation=Hsi.Saturation;
if(Hsi.Saturation>maxHsi.Saturation) maxHsi.Saturation=Hsi.Saturation;
totalHsi_Saturation+=Hsi.Saturation;
if(Hsi.Intensity<minHsi.Intensity) minHsi.Intensity=Hsi.Intensity;
if(Hsi.Intensity>maxHsi.Intensity) maxHsi.Intensity=Hsi.Intensity;
totalHsi_Intensity+=Hsi.Intensity;
}
long int num=(long(pDoc->EndPoint.x-pDoc->StartPoint.x+1))*(pDoc->EndPoint.y-pDoc->StartPoint.y+1);
if(num>20){
CString tmpStr;
str.Format(L"pDoc->StartPoint(%d ,%d)---pDoc->EndPoint(%d ,%d)\n Size(%d x %d)\nColor=%d\n",
pDoc->StartPoint.x,pDoc->StartPoint.y,pDoc->EndPoint.x,pDoc->EndPoint.y,pDoc->EndPoint.x-pDoc->StartPoint.x+1,
pDoc->EndPoint.y-pDoc->StartPoint.y+1,pDoc->m_pDib->m_lpBMIH->biBitCount);
tmpStr.Format(L"\n \tmin \tmax \tmean\n");
str+=tmpStr;
tmpStr.Format(L"R\t%d \t%d \t%d\n",minRgb.r,maxRgb.r,(int)(totalrgb_r/num));
str+=tmpStr;
tmpStr.Format(L"G\t%d \t%d \t%d\n",minRgb.g,maxRgb.g,(int)(totalrgb_g/num));
str+=tmpStr;
tmpStr.Format(L"B\t%d \t%d \t%d\n",minRgb.b,maxRgb.b,(int)(totalrgb_b/num));
str+=tmpStr;
tmpStr.Format(L"H\t%3.2f \t%3.2f \t%3.2f\n",minHsi.Hue,maxHsi.Hue,totalHsi_Hue/num);
str+=tmpStr;
tmpStr.Format(L"S\t%3.2f \t%3.2f \t%3.2f\n",minHsi.Saturation,maxHsi.Saturation,totalHsi_Saturation/num);
str+=tmpStr;
tmpStr.Format(L"I\t%3.2f \t%3.2f \t%3.2f\n",minHsi.Intensity,maxHsi.Intensity,totalHsi_Intensity/num);
str+=tmpStr;
tmpStr.Format(L"\nGray\t%d \t%d \t%d\n",mingray,maxgray,(int)(totalgray/num));
str+=tmpStr;
//TRACE(str);
MessageBox(str);
}
}