模拟Photo的直方图,不过只是显示;
有对图像四角的密度和反差进行补偿,这是现在LDD(LCD+LED)数码裁放机上常用的补偿方法!
主要还是对GDI+的应用,大家不妨看看原码!
http://www.nxxn.net/soft/dreign.rar
//图像处理--------------------------------------------------------------------------------------
using System;
using System.Drawing;
using System.Drawing.Imaging;
namespace zft
{
public class BitmapFilter
{
public static bool modu1(Bitmap image,int r,int g,int b)
{
if(r==0) r=1;
if(g==0) g=1;
if(b==0) b=1;
BitmapData bmData = image.LockBits(new Rectangle(0, 0,image.Width , image.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - image.Width*3;
int nWidth=image.Width;
int nHeight=image.Height;
int red,green,blue;
int w0=(int)(nWidth/2);
int h0=(int)(nHeight/2);
int r0,t1,t2,kr=r,kg=g,kb=b;
double z,z0;
int k1r=r,k1g=g,k1b=b,
k2r=r,k2g=g,k2b=b,
k3r=r,k3g=g,k3b=b,
k4r=r,k4g=g,k4b=b;
if(w0>h0)
r0=w0;
else
r0=h0;
z0=Math.Sqrt(w0*w0+h0*h0);
z0=z0/1.5;
for(int y=0;y<nHeight;++y)
{
for(int x=0; x < nWidth; ++x )
{
red=p[2];
green=p[1];
blue=p[0];
t1=x-w0;
t2=y-h0;
if(t1<0) t1=0-t1;
if(t2<0) t2=0-t2;
z=Math.Sqrt(t1*t1+t2*t2);
if(z<z0)
{
z=z0;
kr=0;
kg=0;
kb=0;
}
else
{
double xx=(z-z0)/z;
kr=(int)(15*r*xx*xx);
kg=(int)(15*g*xx*xx);
kb=(int)(15*b*xx*xx);
}
red+=kr;
green+=kg;
blue+=kb;
if(red>255) red=255;
if(red<0) red=0;
if(green>255) green=255;
if(green<0) green=0;
if(blue>255) blue=255;
if(blue<0) blue=0;
p[2]=(byte)red;
p[1]=(byte)green;
p[0]=(byte)blue;
p+=3;
}
p += nOffset;
}
}
image.UnlockBits(bmData);
return true;
}
/// <summary>
/// 反差圆补偿
/// </summary>
/// <param name="image">图像</param>
/// <param name="con">反差系数</param>
/// <param name="k">圆半径系数</param>
/// <returns></returns>
public static bool ccon(Bitmap image,float con,float k)
{
BitmapData bmData = image.LockBits(new Rectangle(0, 0,image.Width , image.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - image.Width*3;
int nWidth=image.Width;
int nHeight=image.Height;
int red,green,blue;
int w0=(int)(nWidth/2);
int h0=(int)(nHeight/2);
int r0,t1,t2;
double z,z0,pixel,contrast;
if(w0>h0)
r0=w0;
else
r0=h0;
z0=Math.Sqrt(w0*w0+h0*h0);
z0=z0/k;
for(int y=0;y<nHeight;++y)
{
for(int x=0; x < nWidth; ++x )
{
red=p[2];
green=p[1];
blue=p[0];
t1=x-w0;
t2=y-h0;
if(t1<0) t1=0-t1;
if(t2<0) t2=0-t2;
z=Math.Sqrt(t1*t1+t2*t2);
if(z>z0)
{
contrast = (z-z0)/z * con ;
pixel = red-(127-red) * contrast;
if (pixel < 0) pixel = 0;
if (pixel > 255) pixel = 255;
p[2] = (byte) pixel;
pixel = green-(127-green) * contrast;
if (pixel < 0) pixel = 0;
if (pixel > 255) pixel = 255;
p[1] = (byte) pixel;
pixel = blue-(127-blue) * contrast;
if (pixel < 0) pixel = 0;
if (pixel > 255) pixel = 255;
p[0] = (byte) pixel;
}
p+=3;
}
p += nOffset;
}
}
image.UnlockBits(bmData);
return true;
}
/// <summary>
/// 基本反差调整
/// </summary>
/// <param name="b"></param>
/// <param name="nContrast"></param>
/// <returns></returns>
public static bool Contrast(Bitmap b, int nContrast)
{
if (nContrast < -100) return false;
if (nContrast > 100) return false;
double pixel = 0, contrast = (100.0+nContrast)/100.0;
contrast *= contrast;
int red, green, blue;
// GDI+ still lies to us - the return format is BGR, NOT RGB.
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
int h=b.Height,w=b.Width;
unsafe
{
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - b.Width*3;
for(int y=0;y<h;++y)
{
for(int x=0; x < w; ++x )
{
blue = p[0];
green = p[1];
red = p[2];
pixel = red/255.0;
pixel -= 0.5;
pixel *= contrast;
pixel += 0.5;
pixel *= 255;
if (pixel < 0) pixel = 0;
if (pixel > 255) pixel = 255;
p[2] = (byte) pixel;
pixel = green/255.0;
pixel -= 0.5;
pixel *= contrast;
pixel += 0.5;
pixel *= 255;
if (pixel < 0) pixel = 0;
if (pixel > 255) pixel = 255;
p[1] = (byte) pixel;
pixel = blue/255.0;
pixel -= 0.5;
pixel *= contrast;
pixel += 0.5;
pixel *= 255;
if (pixel < 0) pixel = 0;
if (pixel > 255) pixel = 255;
p[0] = (byte) pixel;
p += 3;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
return true;
}
public static bool zft(Bitmap b,out int[] all,out int[] rhow, out int[] ghow,out int[] bhow)
{
int [] gray=new int[256];
int [] rr = new int[256];
int [] gg = new int[256];
int [] bb = new int[256];
int tt=0;
foreach(int i in gray)
{
gray[i]=0;
}
foreach(int i in rr)
{
rr[i]=0;
}
foreach(int i in gg)
{
gg[i]=0;
}
foreach(int i in bb)
{
bb[i]=0;
}
// GDI+ still lies to us - the return format is BGR, NOT RGB.
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - b.Width*3;
byte red, green, blue;
int nWidth = b.Width;
int nHeight= b.Height;
for(int y=0;y<nHeight;++y)
{
for(int x=0; x < nWidth; ++x )
{
blue = p[0];
green = p[1];
red = p[2];
tt = (byte)(.299 * red + .587 * green + .114 * blue);
#region rr
switch(red)
{
case 0:
rr[0]++;
break;
case 1:
rr[1]++;
break;
case 2:
rr[2]++;
break;
case 3:
rr[3]++;
break;
case 4:
rr[4]++;
break;
case 5:
rr[5]++;
break;
case 6:
rr[6]++;
break;
case 7:
rr[7]++;
break;
case 8:
rr[8]++;
break;
case 9:
rr[9]++;
break;
case 10:
rr[10]++;
break;
case 11:
rr[11]++;
break;
case 12:
rr[12]++;
break;
case 13:
rr[13]++;
break;
case 14:
rr[14]++;
break;
case 15:
rr[15]++;
break;
case 16:
rr[16]++;
break;
case 17:
rr[17]++;
break;
case 18:
rr[18]++;
break;
case 19:
rr[19]++;
break;
case 20:
rr[20]++;
break;
case 21:
rr[21]++;
break;
case 22:
rr[22]++;
break;
case 23:
rr[23]++;
break;
case 24:
rr[24]++;
break;
case 25:
rr[25]++;
break;
case 26:
rr[26]++;
break;
case 27:
rr[27]++;
break;
case 28:
rr[28]++;
break;
case 29:
rr[29]++;
break;
case 30:
rr[30]++;
break;
case 31:
rr[31]++;
break;
case 32:
rr[32]++;
break;
case 33:
rr[33]++;
break;
case 34:
rr[34]++;
break;
case 35:
rr[35]++;
break;
case 36:
rr[36]++;
break;
case 37:
rr[37]++;
break;
case 38:
rr[38]++;
break;
case 39:
rr[39]++;
break;
case 40:
rr[40]++;
break;
case 41:
rr[41]++;
break;
case 42:
rr[42]++;
break;
case 43:
rr[43]++;
break;
case 44:
rr[44]++;
break;
case 45:
rr[45]++;
break;
case 46:
rr[46]++;
break;
case 47:
rr[47]++;
break;
case 48:
rr[48]++;
break;
case 49:
rr[49]++;
break;
case 50:
rr[50]++;
break;
case 51:
rr[51]++;
break;
case 52:
rr[52]++;
break;
case 53:
rr[53]++;
break;
case 54:
rr[54]++;
break;
case 55:
rr[55]++;
break;
case 56:
rr[56]++;
break;
case 57:
rr[57]++;
break;
case 58:
rr[58]++;
break;
case 59:
rr[59]++;
break;
case 60:
rr[60]++;
break;
case 61:
rr[61]++;
break;
case 62:
rr[62]++;
break;
case 63:
rr[63]++;
break;
case 64:
rr[64]++;
break;
case 65:
rr[65]++;
break;
case 66:
rr[66]++;
break;
case 67:
rr[67]++;
break;
case 68:
rr[68]++;
break;
case 69:
rr[69]++;
break;
case 70:
rr[70]++;
break;
case 71:
rr[71]++;
break;
case 72:
rr[72]++;
break;
case 73:
rr[73]++;
break;
case 74:
rr[74]++;
break;
case 75:
rr[75]++;
break;
case 76:
rr[76]++;
break;
case 77:
rr[77]++;
break;
case 78:
rr[78]++;
break;
case 79:
rr[79]++;
break;
case 80:
rr[80]++;
break;
case 81:
rr[81]++;
break;
case 82:
rr[82]++;
break;
case 83:
rr[83]++;
break;
case 84:
rr[84]++;
break;
case 85:
rr[85]++;
break;
case 86:
rr[86]++;
break;
case 87:
rr[87]++;
break;
case 88:
rr[88]++;
break;
case 89:
rr[89]++;
break;
case 90:
rr[90]++;
break;
case 91:
rr[91]++;
break;
case 92:
rr[92]++;
break;
case 93:
rr[93]++;
break;
case 94:
rr[94]++;
break;
case 95:
rr[95]++;
break;
case 96:
rr[96]++;
break;
case 97:
rr[97]++;
break;
case 98:
rr[98]++;
break;
case 99:
rr[99]++;
break;
case 100:
rr[100]++;
break;
//=-----------------------------------------------------------------------------
case 101:
rr[101]++;
break;
case 102:
rr[102]++;
break;
case 103:
rr[103]++;
break;
case 104:
rr[104]++;
break;
case 105:
rr[105]++;
break;
case 106:
rr[106]++;
break;
case 107:
rr[107]++;
break;
case 108:
rr[108]++;
break;
case 109:
rr[109]++;
break;
case 110:
rr[110]++;
break;
case 111:
rr[111]++;
break;
case 112:
rr[112]++;
break;
case 113:
rr[113]++;
break;
case 114:
rr[114]++;
break;
case 115:
rr[115]++;
break;
case 116:
rr[116]++;
break;
case 117:
rr[117]++;
break;
case 118:
rr[118]++;
break;
case 119:
rr[119]++;
break;
case 120:
rr[120]++;
break;
case 121:
rr[121]++;
break;
case 122:
rr[122]++;
break;
case 123:
rr[123]++;
break;
case 124:
rr[124]++;
break;
case 125:
rr[125]++;
break;
case 126:
rr[126]++;
break;
case 127:
rr[127]++;
break;
case 128:
rr[128]++;
break;
case 129:
rr[129]++;
break;
case 130:
rr[130]++;
break;
case 131:
rr[131]++;
break;
case 132:
rr[132]++;
break;
case 133:
rr[133]++;
break;
case 134:
rr[134]++;
break;
case 135:
rr[135]++;
break;
case 136:
rr[136]++;
break;
case 137:
rr[137]++;
break;
case 138:
rr[138]++;
break;
case 139:
rr[139]++;
break;
case 140:
rr[140]++;
break;
case 141:
rr[141]++;
break;
case 142:
rr[142]++;
break;
case 143:
rr[143]++;
break;
case 144:
rr[144]++;
break;
case 145:
rr[145]++;
break;
case 146:
rr[146]++;
break;
case 147:
rr[147]++;
break;
case 148:
rr[148]++;
break;
case 149:
rr[149]++;
break;
case 150:
rr[150]++;
break;
case 151:
rr[151]++;
break;
case 152:
rr[152]++;
break;
case 153:
rr[153]++;
break;
case 154:
rr[154]++;
break;
case 155:
rr[155]++;
break;
case 156:
rr[156]++;
break;
case 157:
rr[157]++;
break;
case 158:
rr[158]++;
break;
case 159:
rr[159]++;
break;
case 160:
rr[160]++;
break;
case 161:
rr[161]++;
break;
case 162:
rr[162]++;
break;
case 163:
rr[163]++;
break;
case 164:
rr[164]++;
break;
case 165:
rr[165]++;
break;
case 166:
rr[166]++;
break;
case 167:
rr[167]++;
break;
case 168:
rr[168]++;
break;
case 169:
rr[169]++;
break;
case 170:
rr[170]++;
break;
case 171:
rr[171]++;
break;
case 172:
rr[172]++;
break;
case 173:
rr[173]++;
break;
case 174:
rr[174]++;
break;
case 175:
rr[175]++;
break;
case 176:
rr[176]++;
break;
case 177:
rr[177]++;
break;
case 178:
rr[178]++;
break;
case 179:
rr[179]++;
break;
case 180:
rr[180]++;
break;
case 181:
rr[181]++;
break;
case 182:
rr[182]++;
break;
case 183:
rr[183]++;
break;
case 184:
rr[184]++;
break;
case 185:
rr[185]++;
break;
case 186:
rr[186]++;
break;
case 187:
rr[187]++;
break;
case 188:
rr[188]++;
break;
case 189:
rr[189]++;
break;
case 190:
rr[190]++;
break;
case 191:
rr[191]++;
break;
case 192:
rr[192]++;
break;
case 193:
rr[193]++;
break;
case 194:
rr[194]++;
break;
case 195:
rr[195]++;
break;
case 196:
rr[196]++;
break;
case 197:
rr[197]++;
break;
case 198:
rr[198]++;
break;
case 199:
rr[199]++;
break;
case 200:
rr[200]++;
break;
//-----------------------------------------------------------------
case 201:
rr[201]++;
break;
case 202:
rr[202]++;
break;
case 203:
rr[203]++;
break;
case 204:
rr[204]++;
break;
case 205:
rr[205]++;
break;
case 206:
rr[206]++;
break;
case 207:
rr[207]++;
break;
case 208:
rr[208]++;
break;
case 209:
rr[209]++;
break;
case 210:
rr[210]++;
break;
case 211:
rr[211]++;
break;
case 212:
rr[212]++;
break;
case 213:
rr[213]++;
break;
case 214:
rr[214]++;
break;
case 215:
rr[215]++;
break;
case 216:
rr[216]++;
break;
case 217:
rr[217]++;
break;
case 218:
rr[218]++;
break;
case 219:
rr[219]++;
break;
case 220:
rr[220]++;
break;
case 221:
rr[221]++;
break;
case 222:
rr[222]++;
break;
case 223:
rr[223]++;
break;
case 224:
rr[224]++;
break;
case 225:
rr[225]++;
break;
case 226:
rr[226]++;
break;
case 227:
rr[227]++;
break;
case 228:
rr[228]++;
break;
case 229:
rr[229]++;
break;
case 230:
rr[230]++;
break;
case 231:
rr[231]++;
break;
case 232:
rr[232]++;
break;
case 233:
rr[233]++;
break;
case 234:
rr[234]++;
break;
case 235:
rr[235]++;
break;
case 236:
rr[236]++;
break;
case 237:
rr[237]++;
break;
case 238:
rr[238]++;
break;
case 239:
rr[239]++;
break;
case 240:
rr[240]++;
break;
case 241:
rr[241]++;
break;
case 242:
rr[242]++;
break;
case 243:
rr[243]++;
break;
case 244:
rr[244]++;
break;
case 245:
rr[245]++;
break;
case 246:
rr[246]++;
break;
case 247:
rr[247]++;
break;
case 248:
rr[248]++;
break;
case 249:
rr[249]++;
break;
case 250:
rr[250]++;
break;
case 251:
rr[251]++;
break;
case 252:
rr[252]++;
break;
case 253:
rr[253]++;
break;
case 254:
rr[254]++;
break;
case 255:
rr[255]++;
break;
}
#endregion
#region gg
switch(green)
{
case 0:
gg[0]++;
break;
case 1:
gg[1]++;
break;
case 2:
gg[2]++;
break;
case 3:
gg[3]++;
break;
case 4:
gg[4]++;
break;
case 5:
gg[5]++;
break;
case 6:
gg[6]++;
break;
case 7:
gg[7]++;
break;
case 8:
gg[8]++;
break;
case 9:
gg[9]++;
break;
case 10:
gg[10]++;
break;
case 11:
gg[11]++;
break;
case 12:
gg[12]++;
break;
case 13:
gg[13]++;
break;
case 14:
gg[14]++;
break;
case 15:
gg[15]++;
break;
case 16:
gg[16]++;
break;
case 17:
gg[17]++;
break;
case 18:
gg[18]++;
break;
case 19:
gg[19]++;
break;
case 20:
gg[20]++;
break;
case 21:
gg[21]++;
break;
case 22:
gg[22]++;
break;
case 23:
gg[23]++;
break;
case 24:
gg[24]++;
break;
case 25:
gg[25]++;
break;
case 26:
gg[26]++;
break;
case 27:
gg[27]++;
break;
case 28:
gg[28]++;
break;
case 29:
gg[29]++;
break;
case 30:
gg[30]++;
break;
case 31:
gg[31]++;
break;
case 32:
gg[32]++;
break;
case 33:
gg[33]++;
break;
case 34:
gg[34]++;
break;
case 35:
gg[35]++;
break;
case 36:
gg[36]++;
break;
case 37:
gg[37]++;
break;
case 38:
gg[38]++;
break;
case 39:
gg[39]++;
break;
case 40:
gg[40]++;
break;
case 41:
gg[41]++;
break;
case 42:
gg[42]++;
break;
case 43:
gg[43]++;
break;
case 44:
gg[44]++;
break;
case 45:
gg[45]++;
break;
case 46:
gg[46]++;
break;
case 47:
gg[47]++;
break;
case 48:
gg[48]++;
break;
case 49:
gg[49]++;
break;
case 50:
gg[50]++;
break;
case 51:
gg[51]++;
break;
case 52:
gg[52]++;
break;
case 53:
gg[53]++;
break;
case 54:
gg[54]++;
break;
case 55:
gg[55]++;
break;
case 56:
gg[56]++;
break;
case 57:
gg[57]++;
break;
case 58:
gg[58]++;
break;
case 59:
gg[59]++;
break;
case 60:
gg[60]++;
break;
case 61:
gg[61]++;
break;
case 62:
gg[62]++;
break;
case 63:
gg[63]++;
break;
case 64:
gg[64]++;
break;
case 65:
gg[65]++;
break;
case 66:
gg[66]++;
break;
case 67:
gg[67]++;
break;
case 68:
gg[68]++;
break;
case 69:
gg[69]++;
break;
case 70:
gg[70]++;
break;
case 71:
gg[71]++;
break;
case 72:
gg[72]++;
break;
case 73:
gg[73]++;
break;
case 74:
gg[74]++;
break;
case 75:
gg[75]++;
break;
case 76:
gg[76]++;
break;
case 77:
gg[77]++;
break;
case 78:
gg[78]++;
break;
case 79:
gg[79]++;
break;
case 80:
gg[80]++;
break;
case 81:
gg[81]++;
break;
case 82:
gg[82]++;
break;
case 83:
gg[83]++;
break;
case 84:
gg[84]++;
break;
case 85:
gg[85]++;
break;
case 86:
gg[86]++;
break;
case 87:
gg[87]++;
break;
case 88:
gg[88]++;
break;
case 89:
gg[89]++;
break;
case 90:
gg[90]++;
break;
case 91:
gg[91]++;
break;
case 92:
gg[92]++;
break;
case 93:
gg[93]++;
break;
case 94:
gg[94]++;
break;
case 95:
gg[95]++;
break;
case 96:
gg[96]++;
break;
case 97:
gg[97]++;
break;
case 98:
gg[98]++;
break;
case 99:
gg[99]++;
break;
case 100:
gg[100]++;
break;
//=-----------------------------------------------------------------------------
case 101:
gg[101]++;
break;
case 102:
gg[102]++;
break;
case 103:
gg[103]++;
break;
case 104:
gg[104]++;
break;
case 105:
gg[105]++;
break;
case 106:
gg[106]++;
break;
case 107:
gg[107]++;
break;
case 108:
gg[108]++;
break;
case 109:
gg[109]++;
break;
case 110:
gg[110]++;
break;
case 111:
gg[111]++;
break;
case 112:
gg[112]++;
break;
case 113:
gg[113]++;
break;
case 114:
gg[114]++;
break;
case 115:
gg[115]++;
break;
case 116:
gg[116]++;
break;
case 117:
gg[117]++;
break;
case 118:
gg[118]++;
break;
case 119:
gg[119]++;
break;
case 120:
gg[120]++;
break;
case 121:
gg[121]++;
break;
case 122:
gg[122]++;
break;
case 123:
gg[123]++;
break;
case 124:
gg[124]++;
break;
case 125:
gg[125]++;
break;
case 126:
gg[126]++;
break;
case 127:
gg[127]++;
break;
case 128:
gg[128]++;
break;
case 129:
gg[129]++;
break;
case 130:
gg[130]++;
break;
case 131:
gg[131]++;
break;
case 132:
gg[132]++;
break;
case 133:
gg[133]++;
break;
case 134:
gg[134]++;
break;
case 135:
gg[135]++;
break;
case 136:
gg[136]++;
break;
case 137:
gg[137]++;
break;
case 138:
gg[138]++;
break;
case 139:
gg[139]++;
break;
case 140:
gg[140]++;
break;
case 141:
gg[141]++;
break;
case 142:
gg[142]++;
break;
case 143:
gg[143]++;
break;
case 144:
gg[144]++;
break;
case 145:
gg[145]++;
break;
case 146:
gg[146]++;
break;
case 147:
gg[147]++;
break;
case 148:
gg[148]++;
break;
case 149:
gg[149]++;
break;
case 150:
gg[150]++;
break;
case 151:
gg[151]++;
break;
case 152:
gg[152]++;
break;
case 153:
gg[153]++;
break;
case 154:
gg[154]++;
break;
case 155:
gg[155]++;
break;
case 156:
gg[156]++;
break;
case 157:
gg[157]++;
break;
case 158:
gg[158]++;
break;
case 159:
gg[159]++;
break;
case 160:
gg[160]++;
break;
case 161:
gg[161]++;
break;
case 162:
gg[162]++;
break;
case 163:
gg[163]++;
break;
case 164:
gg[164]++;
break;
case 165:
gg[165]++;
break;
case 166:
gg[166]++;
break;
case 167:
gg[167]++;
break;
case 168:
gg[168]++;
break;
case 169:
gg[169]++;
break;
case 170:
gg[170]++;
break;
case 171:
gg[171]++;
break;
case 172:
gg[172]++;
break;
case 173:
gg[173]++;
break;
case 174:
gg[174]++;
break;
case 175:
gg[175]++;
break;
case 176:
gg[176]++;
break;
case 177:
gg[177]++;
break;
case 178:
gg[178]++;
break;
case 179:
gg[179]++;
break;
case 180:
gg[180]++;
break;
case 181:
gg[181]++;
break;
case 182:
gg[182]++;
break;
case 183:
gg[183]++;
break;
case 184:
gg[184]++;
break;
case 185:
gg[185]++;
break;
case 186:
gg[186]++;
break;
case 187:
gg[187]++;
break;
case 188:
gg[188]++;
break;
case 189:
gg[189]++;
break;
case 190:
gg[190]++;
break;
case 191:
gg[191]++;
break;
case 192:
gg[192]++;
break;
case 193:
gg[193]++;
break;
case 194:
gg[194]++;
break;
case 195:
gg[195]++;
break;
case 196:
gg[196]++;
break;
case 197:
gg[197]++;
break;
case 198:
gg[198]++;
break;
case 199:
gg[199]++;
break;
case 200:
gg[200]++;
break;
//-----------------------------------------------------------------
case 201:
gg[201]++;
break;
case 202:
gg[202]++;
break;
case 203:
gg[203]++;
break;
case 204:
gg[204]++;
break;
case 205:
gg[205]++;
break;
case 206:
gg[206]++;
break;
case 207:
gg[207]++;
break;
case 208:
gg[208]++;
break;
case 209:
gg[209]++;
break;
case 210:
gg[210]++;
break;
case 211:
gg[211]++;
break;
case 212:
gg[212]++;
break;
case 213:
gg[213]++;
break;
case 214:
gg[214]++;
break;
case 215:
gg[215]++;
break;
case 216:
gg[216]++;
break;
case 217:
gg[217]++;
break;
case 218:
gg[218]++;
break;
case 219:
gg[219]++;
break;
case 220:
gg[220]++;
break;
case 221:
gg[221]++;
break;
case 222:
gg[222]++;
break;
case 223:
gg[223]++;
break;
case 224:
gg[224]++;
break;
case 225:
gg[225]++;
break;
case 226:
gg[226]++;
break;
case 227:
gg[227]++;
break;
case 228:
gg[228]++;
break;
case 229:
gg[229]++;
break;
case 230:
gg[230]++;
break;
case 231:
gg[231]++;
break;
case 232:
gg[232]++;
break;
case 233:
gg[233]++;
break;
case 234:
gg[234]++;
break;
case 235:
gg[235]++;
break;
case 236:
gg[236]++;
break;
case 237:
gg[237]++;
break;
case 238:
gg[238]++;
break;
case 239:
gg[239]++;
break;
case 240:
gg[240]++;
break;
case 241:
gg[241]++;
break;
case 242:
gg[242]++;
break;
case 243:
gg[243]++;
break;
case 244:
gg[244]++;
break;
case 245:
gg[245]++;
break;
case 246:
gg[246]++;
break;
case 247:
gg[247]++;
break;
case 248:
gg[248]++;
break;
case 249:
gg[249]++;
break;
case 250:
gg[250]++;
break;
case 251:
gg[251]++;
break;
case 252:
gg[252]++;
break;
case 253:
gg[253]++;
break;
case 254:
gg[254]++;
break;
case 255:
gg[255]++;
break;
}
#endregion
#region bb
switch(blue)
{
case 0:
bb[0]++;
break;
case 1:
bb[1]++;
break;
case 2:
bb[2]++;
break;
case 3:
bb[3]++;
break;
case 4:
bb[4]++;
break;
case 5:
bb[5]++;
break;
case 6:
bb[6]++;
break;
case 7:
bb[7]++;
break;
case 8:
bb[8]++;
break;
case 9:
bb[9]++;
break;
case 10:
bb[10]++;
break;
case 11:
bb[11]++;
break;
case 12:
bb[12]++;
break;
case 13:
bb[13]++;
break;
case 14:
bb[14]++;
break;
case 15:
bb[15]++;
break;
case 16:
bb[16]++;
break;
case 17:
bb[17]++;
break;
case 18:
bb[18]++;
break;
case 19:
bb[19]++;
break;
case 20:
bb[20]++;
break;
case 21:
bb[21]++;
break;
case 22:
bb[22]++;
break;
case 23:
bb[23]++;
break;
case 24:
bb[24]++;
break;
case 25:
bb[25]++;
break;
case 26:
bb[26]++;
break;
case 27:
bb[27]++;
break;
case 28:
bb[28]++;
break;
case 29:
bb[29]++;
break;
case 30:
bb[30]++;
break;
case 31:
bb[31]++;
break;
case 32:
bb[32]++;
break;
case 33:
bb[33]++;
break;
case 34:
bb[34]++;
break;
case 35:
bb[35]++;
break;
case 36:
bb[36]++;
break;
case 37:
bb[37]++;
break;
case 38:
bb[38]++;
break;
case 39:
bb[39]++;
break;
case 40:
bb[40]++;
break;
case 41:
bb[41]++;
break;
case 42:
bb[42]++;
break;
case 43:
bb[43]++;
break;
case 44:
bb[44]++;
break;
case 45:
bb[45]++;
break;
case 46:
bb[46]++;
break;
case 47:
bb[47]++;
break;
case 48:
bb[48]++;
break;
case 49:
bb[49]++;
break;
case 50:
bb[50]++;
break;
case 51:
bb[51]++;
break;
case 52:
bb[52]++;
break;
case 53:
bb[53]++;
break;
case 54:
bb[54]++;
break;
case 55:
bb[55]++;
break;
case 56:
bb[56]++;
break;
case 57:
bb[57]++;
break;
case 58:
bb[58]++;
break;
case 59:
bb[59]++;
break;
case 60:
bb[60]++;
break;
case 61:
bb[61]++;
break;
case 62:
bb[62]++;
break;
case 63:
bb[63]++;
break;
case 64:
bb[64]++;
break;
case 65:
bb[65]++;
break;
case 66:
bb[66]++;
break;
case 67:
bb[67]++;
break;
case 68:
bb[68]++;
break;
case 69:
bb[69]++;
break;
case 70:
bb[70]++;
break;
case 71:
bb[71]++;
break;
case 72:
bb[72]++;
break;
case 73:
bb[73]++;
break;
case 74:
bb[74]++;
break;
case 75:
bb[75]++;
break;
case 76:
bb[76]++;
break;
case 77:
bb[77]++;
break;
case 78:
bb[78]++;
break;
case 79:
bb[79]++;
break;
case 80:
bb[80]++;
break;
case 81:
bb[81]++;
break;
case 82:
bb[82]++;
break;
case 83:
bb[83]++;
break;
case 84:
bb[84]++;
break;
case 85:
bb[85]++;
break;
case 86:
bb[86]++;
break;
case 87:
bb[87]++;
break;
case 88:
bb[88]++;
break;
case 89:
bb[89]++;
break;
case 90:
bb[90]++;
break;
case 91:
bb[91]++;
break;
case 92:
bb[92]++;
break;
case 93:
bb[93]++;
break;
case 94:
bb[94]++;
break;
case 95:
bb[95]++;
break;
case 96:
bb[96]++;
break;
case 97:
bb[97]++;
break;
case 98:
bb[98]++;
break;
case 99:
bb[99]++;
break;
case 100:
bb[100]++;
break;
//=-----------------------------------------------------------------------------
case 101:
bb[101]++;
break;
case 102:
bb[102]++;
break;
case 103:
bb[103]++;
break;
case 104:
bb[104]++;
break;
case 105:
bb[105]++;
break;
case 106:
bb[106]++;
break;
case 107:
bb[107]++;
break;
case 108:
bb[108]++;
break;
case 109:
bb[109]++;
break;
case 110:
bb[110]++;
break;
case 111:
bb[111]++;
break;
case 112:
bb[112]++;
break;
case 113:
bb[113]++;
break;
case 114:
bb[114]++;
break;
case 115:
bb[115]++;
break;
case 116:
bb[116]++;
break;
case 117:
bb[117]++;
break;
case 118:
bb[118]++;
break;
case 119:
bb[119]++;
break;
case 120:
bb[120]++;
break;
case 121:
bb[121]++;
break;
case 122:
bb[122]++;
break;
case 123:
bb[123]++;
break;
case 124:
bb[124]++;
break;
case 125:
bb[125]++;
break;
case 126:
bb[126]++;
break;
case 127:
bb[127]++;
break;
case 128:
bb[128]++;
break;
case 129:
bb[129]++;
break;
case 130:
bb[130]++;
break;
case 131:
bb[131]++;
break;
case 132:
bb[132]++;
break;
case 133:
bb[133]++;
break;
case 134:
bb[134]++;
break;
case 135:
bb[135]++;
break;
case 136:
bb[136]++;
break;
case 137:
bb[137]++;
break;
case 138:
bb[138]++;
break;
case 139:
bb[139]++;
break;
case 140:
bb[140]++;
break;
case 141:
bb[141]++;
break;
case 142:
bb[142]++;
break;
case 143:
bb[143]++;
break;
case 144:
bb[144]++;
break;
case 145:
bb[145]++;
break;
case 146:
bb[146]++;
break;
case 147:
bb[147]++;
break;
case 148:
bb[148]++;
break;
case 149:
bb[149]++;
break;
case 150:
bb[150]++;
break;
case 151:
bb[151]++;
break;
case 152:
bb[152]++;
break;
case 153:
bb[153]++;
break;
case 154:
bb[154]++;
break;
case 155:
bb[155]++;
break;
case 156:
bb[156]++;
break;
case 157:
bb[157]++;
break;
case 158:
bb[158]++;
break;
case 159:
bb[159]++;
break;
case 160:
bb[160]++;
break;
case 161:
bb[161]++;
break;
case 162:
bb[162]++;
break;
case 163:
bb[163]++;
break;
case 164:
bb[164]++;
break;
case 165:
bb[165]++;
break;
case 166:
bb[166]++;
break;
case 167:
bb[167]++;
break;
case 168:
bb[168]++;
break;
case 169:
bb[169]++;
break;
case 170:
bb[170]++;
break;
case 171:
bb[171]++;
break;
case 172:
bb[172]++;
break;
case 173:
bb[173]++;
break;
case 174:
bb[174]++;
break;
case 175:
bb[175]++;
break;
case 176:
bb[176]++;
break;
case 177:
bb[177]++;
break;
case 178:
bb[178]++;
break;
case 179:
bb[179]++;
break;
case 180:
bb[180]++;
break;
case 181:
bb[181]++;
break;
case 182:
bb[182]++;
break;
case 183:
bb[183]++;
break;
case 184:
bb[184]++;
break;
case 185:
bb[185]++;
break;
case 186:
bb[186]++;
break;
case 187:
bb[187]++;
break;
case 188:
bb[188]++;
break;
case 189:
bb[189]++;
break;
case 190:
bb[190]++;
break;
case 191:
bb[191]++;
break;
case 192:
bb[192]++;
break;
case 193:
bb[193]++;
break;
case 194:
bb[194]++;
break;
case 195:
bb[195]++;
break;
case 196:
bb[196]++;
break;
case 197:
bb[197]++;
break;
case 198:
bb[198]++;
break;
case 199:
bb[199]++;
break;
case 200:
bb[200]++;
break;
//-----------------------------------------------------------------
case 201:
bb[201]++;
break;
case 202:
bb[202]++;
break;
case 203:
bb[203]++;
break;
case 204:
bb[204]++;
break;
case 205:
bb[205]++;
break;
case 206:
bb[206]++;
break;
case 207:
bb[207]++;
break;
case 208:
bb[208]++;
break;
case 209:
bb[209]++;
break;
case 210:
bb[210]++;
break;
case 211:
bb[211]++;
break;
case 212:
bb[212]++;
break;
case 213:
bb[213]++;
break;
case 214:
bb[214]++;
break;
case 215:
bb[215]++;
break;
case 216:
bb[216]++;
break;
case 217:
bb[217]++;
break;
case 218:
bb[218]++;
break;
case 219:
bb[219]++;
break;
case 220:
bb[220]++;
break;
case 221:
bb[221]++;
break;
case 222:
bb[222]++;
break;
case 223:
bb[223]++;
break;
case 224:
bb[224]++;
break;
case 225:
bb[225]++;
break;
case 226:
bb[226]++;
break;
case 227:
bb[227]++;
break;
case 228:
bb[228]++;
break;
case 229:
bb[229]++;
break;
case 230:
bb[230]++;
break;
case 231:
bb[231]++;
break;
case 232:
bb[232]++;
break;
case 233:
bb[233]++;
break;
case 234:
bb[234]++;
break;
case 235:
bb[235]++;
break;
case 236:
bb[236]++;
break;
case 237:
bb[237]++;
break;
case 238:
bb[238]++;
break;
case 239:
bb[239]++;
break;
case 240:
bb[240]++;
break;
case 241:
bb[241]++;
break;
case 242:
bb[242]++;
break;
case 243:
bb[243]++;
break;
case 244:
bb[244]++;
break;
case 245:
bb[245]++;
break;
case 246:
bb[246]++;
break;
case 247:
bb[247]++;
break;
case 248:
bb[248]++;
break;
case 249:
bb[249]++;
break;
case 250:
bb[250]++;
break;
case 251:
bb[251]++;
break;
case 252:
bb[252]++;
break;
case 253:
bb[253]++;
break;
case 254:
bb[254]++;
break;
case 255:
bb[255]++;
break;
}
#endregion
#region gray
switch(tt)
{
case 0:
gray[0]++;
break;
case 1:
gray[1]++;
break;
case 2:
gray[2]++;
break;
case 3:
gray[3]++;
break;
case 4:
gray[4]++;
break;
case 5:
gray[5]++;
break;
case 6:
gray[6]++;
break;
case 7:
gray[7]++;
break;
case 8:
gray[8]++;
break;
case 9:
gray[9]++;
break;
case 10:
gray[10]++;
break;
case 11:
gray[11]++;
break;
case 12:
gray[12]++;
break;
case 13:
gray[13]++;
break;
case 14:
gray[14]++;
break;
case 15:
gray[15]++;
break;
case 16:
gray[16]++;
break;
case 17:
gray[17]++;
break;
case 18:
gray[18]++;
break;
case 19:
gray[19]++;
break;
case 20:
gray[20]++;
break;
case 21:
gray[21]++;
break;
case 22:
gray[22]++;
break;
case 23:
gray[23]++;
break;
case 24:
gray[24]++;
break;
case 25:
gray[25]++;
break;
case 26:
gray[26]++;
break;
case 27:
gray[27]++;
break;
case 28:
gray[28]++;
break;
case 29:
gray[29]++;
break;
case 30:
gray[30]++;
break;
case 31:
gray[31]++;
break;
case 32:
gray[32]++;
break;
case 33:
gray[33]++;
break;
case 34:
gray[34]++;
break;
case 35:
gray[35]++;
break;
case 36:
gray[36]++;
break;
case 37:
gray[37]++;
break;
case 38:
gray[38]++;
break;
case 39:
gray[39]++;
break;
case 40:
gray[40]++;
break;
case 41:
gray[41]++;
break;
case 42:
gray[42]++;
break;
case 43:
gray[43]++;
break;
case 44:
gray[44]++;
break;
case 45:
gray[45]++;
break;
case 46:
gray[46]++;
break;
case 47:
gray[47]++;
break;
case 48:
gray[48]++;
break;
case 49:
gray[49]++;
break;
case 50:
gray[50]++;
break;
case 51:
gray[51]++;
break;
case 52:
gray[52]++;
break;
case 53:
gray[53]++;
break;
case 54:
gray[54]++;
break;
case 55:
gray[55]++;
break;
case 56:
gray[56]++;
break;
case 57:
gray[57]++;
break;
case 58:
gray[58]++;
break;
case 59:
gray[59]++;
break;
case 60:
gray[60]++;
break;
case 61:
gray[61]++;
break;
case 62:
gray[62]++;
break;
case 63:
gray[63]++;
break;
case 64:
gray[64]++;
break;
case 65:
gray[65]++;
break;
case 66:
gray[66]++;
break;
case 67:
gray[67]++;
break;
case 68:
gray[68]++;
break;
case 69:
gray[69]++;
break;
case 70:
gray[70]++;
break;
case 71:
gray[71]++;
break;
case 72:
gray[72]++;
break;
case 73:
gray[73]++;
break;
case 74:
gray[74]++;
break;
case 75:
gray[75]++;
break;
case 76:
gray[76]++;
break;
case 77:
gray[77]++;
break;
case 78:
gray[78]++;
break;
case 79:
gray[79]++;
break;
case 80:
gray[80]++;
break;
case 81:
gray[81]++;
break;
case 82:
gray[82]++;
break;
case 83:
gray[83]++;
break;
case 84:
gray[84]++;
break;
case 85:
gray[85]++;
break;
case 86:
gray[86]++;
break;
case 87:
gray[87]++;
break;
case 88:
gray[88]++;
break;
case 89:
gray[89]++;
break;
case 90:
gray[90]++;
break;
case 91:
gray[91]++;
break;
case 92:
gray[92]++;
break;
case 93:
gray[93]++;
break;
case 94:
gray[94]++;
break;
case 95:
gray[95]++;
break;
case 96:
gray[96]++;
break;
case 97:
gray[97]++;
break;
case 98:
gray[98]++;
break;
case 99:
gray[99]++;
break;
case 100:
gray[100]++;
break;
//=-----------------------------------------------------------------------------
case 101:
gray[101]++;
break;
case 102:
gray[102]++;
break;
case 103:
gray[103]++;
break;
case 104:
gray[104]++;
break;
case 105:
gray[105]++;
break;
case 106:
gray[106]++;
break;
case 107:
gray[107]++;
break;
case 108:
gray[108]++;
break;
case 109:
gray[109]++;
break;
case 110:
gray[110]++;
break;
case 111:
gray[111]++;
break;
case 112:
gray[112]++;
break;
case 113:
gray[113]++;
break;
case 114:
gray[114]++;
break;
case 115:
gray[115]++;
break;
case 116:
gray[116]++;
break;
case 117:
gray[117]++;
break;
case 118:
gray[118]++;
break;
case 119:
gray[119]++;
break;
case 120:
gray[120]++;
break;
case 121:
gray[121]++;
break;
case 122:
gray[122]++;
break;
case 123:
gray[123]++;
break;
case 124:
gray[124]++;
break;
case 125:
gray[125]++;
break;
case 126:
gray[126]++;
break;
case 127:
gray[127]++;
break;
case 128:
gray[128]++;
break;
case 129:
gray[129]++;
break;
case 130:
gray[130]++;
break;
case 131:
gray[131]++;
break;
case 132:
gray[132]++;
break;
case 133:
gray[133]++;
break;
case 134:
gray[134]++;
break;
case 135:
gray[135]++;
break;
case 136:
gray[136]++;
break;
case 137:
gray[137]++;
break;
case 138:
gray[138]++;
break;
case 139:
gray[139]++;
break;
case 140:
gray[140]++;
break;
case 141:
gray[141]++;
break;
case 142:
gray[142]++;
break;
case 143:
gray[143]++;
break;
case 144:
gray[144]++;
break;
case 145:
gray[145]++;
break;
case 146:
gray[146]++;
break;
case 147:
gray[147]++;
break;
case 148:
gray[148]++;
break;
case 149:
gray[149]++;
break;
case 150:
gray[150]++;
break;
case 151:
gray[151]++;
break;
case 152:
gray[152]++;
break;
case 153:
gray[153]++;
break;
case 154:
gray[154]++;
break;
case 155:
gray[155]++;
break;
case 156:
gray[156]++;
break;
case 157:
gray[157]++;
break;
case 158:
gray[158]++;
break;
case 159:
gray[159]++;
break;
case 160:
gray[160]++;
break;
case 161:
gray[161]++;
break;
case 162:
gray[162]++;
break;
case 163:
gray[163]++;
break;
case 164:
gray[164]++;
break;
case 165:
gray[165]++;
break;
case 166:
gray[166]++;
break;
case 167:
gray[167]++;
break;
case 168:
gray[168]++;
break;
case 169:
gray[169]++;
break;
case 170:
gray[170]++;
break;
case 171:
gray[171]++;
break;
case 172:
gray[172]++;
break;
case 173:
gray[173]++;
break;
case 174:
gray[174]++;
break;
case 175:
gray[175]++;
break;
case 176:
gray[176]++;
break;
case 177:
gray[177]++;
break;
case 178:
gray[178]++;
break;
case 179:
gray[179]++;
break;
case 180:
gray[180]++;
break;
case 181:
gray[181]++;
break;
case 182:
gray[182]++;
break;
case 183:
gray[183]++;
break;
case 184:
gray[184]++;
break;
case 185:
gray[185]++;
break;
case 186:
gray[186]++;
break;
case 187:
gray[187]++;
break;
case 188:
gray[188]++;
break;
case 189:
gray[189]++;
break;
case 190:
gray[190]++;
break;
case 191:
gray[191]++;
break;
case 192:
gray[192]++;
break;
case 193:
gray[193]++;
break;
case 194:
gray[194]++;
break;
case 195:
gray[195]++;
break;
case 196:
gray[196]++;
break;
case 197:
gray[197]++;
break;
case 198:
gray[198]++;
break;
case 199:
gray[199]++;
break;
case 200:
gray[200]++;
break;
//-----------------------------------------------------------------
case 201:
gray[201]++;
break;
case 202:
gray[202]++;
break;
case 203:
gray[203]++;
break;
case 204:
gray[204]++;
break;
case 205:
gray[205]++;
break;
case 206:
gray[206]++;
break;
case 207:
gray[207]++;
break;
case 208:
gray[208]++;
break;
case 209:
gray[209]++;
break;
case 210:
gray[210]++;
break;
case 211:
gray[211]++;
break;
case 212:
gray[212]++;
break;
case 213:
gray[213]++;
break;
case 214:
gray[214]++;
break;
case 215:
gray[215]++;
break;
case 216:
gray[216]++;
break;
case 217:
gray[217]++;
break;
case 218:
gray[218]++;
break;
case 219:
gray[219]++;
break;
case 220:
gray[220]++;
break;
case 221:
gray[221]++;
break;
case 222:
gray[222]++;
break;
case 223:
gray[223]++;
break;
case 224:
gray[224]++;
break;
case 225:
gray[225]++;
break;
case 226:
gray[226]++;
break;
case 227:
gray[227]++;
break;
case 228:
gray[228]++;
break;
case 229:
gray[229]++;
break;
case 230:
gray[230]++;
break;
case 231:
gray[231]++;
break;
case 232:
gray[232]++;
break;
case 233:
gray[233]++;
break;
case 234:
gray[234]++;
break;
case 235:
gray[235]++;
break;
case 236:
gray[236]++;
break;
case 237:
gray[237]++;
break;
case 238:
gray[238]++;
break;
case 239:
gray[239]++;
break;
case 240:
gray[240]++;
break;
case 241:
gray[241]++;
break;
case 242:
gray[242]++;
break;
case 243:
gray[243]++;
break;
case 244:
gray[244]++;
break;
case 245:
gray[245]++;
break;
case 246:
gray[246]++;
break;
case 247:
gray[247]++;
break;
case 248:
gray[248]++;
break;
case 249:
gray[249]++;
break;
case 250:
gray[250]++;
break;
case 251:
gray[251]++;
break;
case 252:
gray[252]++;
break;
case 253:
gray[253]++;
break;
case 254:
gray[254]++;
break;
case 255:
gray[255]++;
break;
}
#endregion
p += 3;
}
p += nOffset;
}
}
all=gray;
rhow=rr;
ghow=gg;
bhow=bb;
b.UnlockBits(bmData);
return true;
}
}
}
//直方图--------------------------------------------------------------------------
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
namespace zft
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private System.Windows.Forms.Button button1;
int [] gray=new int[256];
int [] rr = new int[256];
int [] gg = new int[256];
int [] bb = new int[256];
public Bitmap a=new Bitmap(500,500);
public Bitmap b=new Bitmap(500,500);
Pen pen1=new Pen(Color.Black);
int flag=0;
float count ;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.Label l_sejie;
private System.Windows.Forms.Label l_pinjun;
private System.Windows.Forms.Label l_pixel;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox3;
float [] gl=new float[256];
private System.Windows.Forms.Label l_bfb;
private System.Windows.Forms.Label l_how;
private bool aline=false;
private System.Windows.Forms.Label lcolor;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.GroupBox groupBox4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button undo;
private System.Windows.Forms.Button refresh;
int xx=-1;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.button5 = new System.Windows.Forms.Button();
this.l_pinjun = new System.Windows.Forms.Label();
this.l_pixel = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.label11 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.lcolor = new System.Windows.Forms.Label();
this.textBox3 = new System.Windows.Forms.TextBox();
this.l_how = new System.Windows.Forms.Label();
this.l_bfb = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.l_sejie = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.undo = new System.Windows.Forms.Button();
this.refresh = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(276, 56);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(64, 28);
this.button1.TabIndex = 0;
this.button1.Text = "灰度";
this.button1.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(276, 92);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(64, 28);
this.button2.TabIndex = 1;
this.button2.Text = "红";
this.button2.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(276, 124);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(64, 28);
this.button3.TabIndex = 2;
this.button3.Text = "绿";
this.button3.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// button4
//
this.button4.Location = new System.Drawing.Point(276, 156);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(64, 28);
this.button4.TabIndex = 3;
this.button4.Text = "蓝";
this.button4.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// label1
//
this.label1.BackColor = System.Drawing.Color.White;
this.label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label1.Cursor = System.Windows.Forms.Cursors.Cross;
this.label1.Location = new System.Drawing.Point(12, 56);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(258, 129);
this.label1.TabIndex = 4;
this.label1.Paint += new System.Windows.Forms.PaintEventHandler(this.label1_Paint);
this.label1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.label1_MouseUp);
this.label1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.label1_MouseMove);
this.label1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label1_MouseDown);
//
// groupBox1
//
this.groupBox1.Controls.Add(this.button5);
this.groupBox1.Controls.Add(this.l_pinjun);
this.groupBox1.Controls.Add(this.l_pixel);
this.groupBox1.Controls.Add(this.textBox1);
this.groupBox1.Controls.Add(this.groupBox4);
this.groupBox1.Controls.Add(this.groupBox2);
this.groupBox1.Controls.Add(this.label11);
this.groupBox1.Controls.Add(this.label6);
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.lcolor);
this.groupBox1.Controls.Add(this.textBox3);
this.groupBox1.Controls.Add(this.l_how);
this.groupBox1.Controls.Add(this.l_bfb);
this.groupBox1.Controls.Add(this.label10);
this.groupBox1.Controls.Add(this.label9);
this.groupBox1.Controls.Add(this.label8);
this.groupBox1.Controls.Add(this.label7);
this.groupBox1.Controls.Add(this.l_sejie);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.button2);
this.groupBox1.Controls.Add(this.button3);
this.groupBox1.Controls.Add(this.button1);
this.groupBox1.Controls.Add(this.button4);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Font = new System.Drawing.Font("宋体", 12F);
this.groupBox1.Location = new System.Drawing.Point(8, 4);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(352, 340);
this.groupBox1.TabIndex = 5;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "直方图";
this.groupBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.groupBox1_Paint);
//
// button5
//
this.button5.Location = new System.Drawing.Point(276, 224);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(64, 24);
this.button5.TabIndex = 26;
this.button5.Text = "ok";
this.button5.Click += new System.EventHandler(this.button5_Click);
//
// l_pinjun
//
this.l_pinjun.Location = new System.Drawing.Point(76, 292);
this.l_pinjun.Name = "l_pinjun";
this.l_pinjun.Size = new System.Drawing.Size(88, 20);
this.l_pinjun.TabIndex = 8;
this.l_pinjun.Text = "0";
this.l_pinjun.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// l_pixel
//
this.l_pixel.Location = new System.Drawing.Point(76, 272);
this.l_pixel.Name = "l_pixel";
this.l_pixel.Size = new System.Drawing.Size(88, 20);
this.l_pixel.TabIndex = 9;
this.l_pixel.Text = "0";
this.l_pixel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(124, 224);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(48, 26);
this.textBox1.TabIndex = 16;
this.textBox1.Text = "0";
//
// groupBox4
//
this.groupBox4.Location = new System.Drawing.Point(176, 228);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(44, 8);
this.groupBox4.TabIndex = 25;
this.groupBox4.TabStop = false;
//
// groupBox2
//
this.groupBox2.Location = new System.Drawing.Point(176, 32);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(40, 8);
this.groupBox2.TabIndex = 24;
this.groupBox2.TabStop = false;
//
// label11
//
this.label11.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label11.Location = new System.Drawing.Point(220, 28);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(52, 23);
this.label11.TabIndex = 23;
this.label11.Text = "255";
this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label6
//
this.label6.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label6.Location = new System.Drawing.Point(124, 28);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(48, 23);
this.label6.TabIndex = 22;
this.label6.Text = "0";
this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label5
//
this.label5.Location = new System.Drawing.Point(8, 224);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(116, 23);
this.label5.TabIndex = 21;
this.label5.Text = "输出色阶范围:";
//
// lcolor
//
this.lcolor.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.lcolor.Location = new System.Drawing.Point(12, 192);
this.lcolor.Name = "lcolor";
this.lcolor.Size = new System.Drawing.Size(260, 12);
this.lcolor.TabIndex = 19;
this.lcolor.Paint += new System.Windows.Forms.PaintEventHandler(this.lcolor_Paint);
//
// textBox3
//
this.textBox3.Location = new System.Drawing.Point(224, 224);
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(48, 26);
this.textBox3.TabIndex = 18;
this.textBox3.Text = "255";
//
// l_how
//
this.l_how.Location = new System.Drawing.Point(212, 292);
this.l_how.Name = "l_how";
this.l_how.Size = new System.Drawing.Size(120, 20);
this.l_how.TabIndex = 15;
this.l_how.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// l_bfb
//
this.l_bfb.Location = new System.Drawing.Point(208, 312);
this.l_bfb.Name = "l_bfb";
this.l_bfb.Size = new System.Drawing.Size(124, 20);
this.l_bfb.TabIndex = 14;
this.l_bfb.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label10
//
this.label10.Location = new System.Drawing.Point(144, 312);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(68, 20);
this.label10.TabIndex = 13;
this.label10.Text = "百分比:";
this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label9
//
this.label9.Location = new System.Drawing.Point(16, 28);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(84, 23);
this.label9.TabIndex = 12;
this.label9.Text = "色阶范围:";
//
// label8
//
this.label8.Location = new System.Drawing.Point(4, 292);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(68, 20);
this.label8.TabIndex = 11;
this.label8.Text = "平均值:";
this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label7
//
this.label7.Location = new System.Drawing.Point(144, 272);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(68, 20);
this.label7.TabIndex = 10;
this.label7.Text = "色阶:";
this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// l_sejie
//
this.l_sejie.Location = new System.Drawing.Point(212, 272);
this.l_sejie.Name = "l_sejie";
this.l_sejie.Size = new System.Drawing.Size(120, 20);
this.l_sejie.TabIndex = 7;
this.l_sejie.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label3
//
this.label3.Location = new System.Drawing.Point(152, 292);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(60, 20);
this.label3.TabIndex = 6;
this.label3.Text = "数量:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label2
//
this.label2.Location = new System.Drawing.Point(16, 272);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(56, 20);
this.label2.TabIndex = 5;
this.label2.Text = "像素:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// undo
//
this.undo.Location = new System.Drawing.Point(368, 16);
this.undo.Name = "undo";
this.undo.TabIndex = 6;
this.undo.Text = "undo";
this.undo.Click += new System.EventHandler(this.undo_Click);
//
// refresh
//
this.refresh.Location = new System.Drawing.Point(368, 48);
this.refresh.Name = "refresh";
this.refresh.TabIndex = 7;
this.refresh.Text = "refresh";
this.refresh.Click += new System.EventHandler(this.refresh_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(450, 350);
this.Controls.Add(this.refresh);
this.Controls.Add(this.undo);
this.Controls.Add(this.groupBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Form1";
this.Text = "色阶和直方图";
this.Load += new System.EventHandler(this.Form1_Load);
this.groupBox1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private void Form1_Load(object sender, System.EventArgs e)
{
this.TopMost=true;
this.Left=800;
BitmapFilter.zft(a,out gray,out rr,out gg, out bb);
graydo();
this.Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
Graphics g=e.Graphics;
}
private void button1_Click(object sender, System.EventArgs e)
{
graydo();
}
private void graydo()
{
this.flag=1;
count = a.Width * a.Height;
gl=new float[256];
for(int i=0;i<256; i++)
gl[i]= gray[i]/count *10000;
pen1=Pens.Black;
this.label1.Invalidate();
this.lcolor.Invalidate();
}
private void button2_Click(object sender, System.EventArgs e)
{
this.flag=2;
count = a.Width * a.Height;
gl=new float[256];
for(int i=0;i<256; i++)
gl[i]= rr[i]/count *10000;
pen1=Pens.Red;
this.label1.Invalidate();
this.lcolor.Invalidate();
}
private void button3_Click(object sender, System.EventArgs e)
{
this.flag=3;
count = a.Width * a.Height;
gl=new float[256];
for(int i=0;i<256; i++)
gl[i]= gg[i]/count *10000;
pen1=Pens.Green;
this.label1.Invalidate();
this.lcolor.Invalidate();
}
private void button4_Click(object sender, System.EventArgs e)
{
this.flag=4;
count = a.Width * a.Height;
gl=new float[256];
for(int i=0;i<256; i++)
gl[i]= bb[i]/count *10000;
pen1=Pens.Blue;
this.label1.Invalidate();
this.lcolor.Invalidate();
}
private void label1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g=e.Graphics;
int p;
p= a.Width*a.Height;
this.l_pixel.Text=p.ToString();
int height =this.label1.Height;
for(int j=0;j<256;j++)
{
if(gl[j]>height)
gl[j]=height;
g.DrawLine(pen1,j,height,j,height-gl[j]);
}
if(aline)
{
g.DrawLine(Pens.OrangeRed,xx,0,xx,height);
}
if(xx!=-1)
{
this.l_sejie.Text =xx.ToString();
this.l_how.Text =this.gray[xx].ToString();
this.l_bfb.Text =this.gl[xx].ToString();
}
else
{
this.l_sejie.Text=" ";
this.l_how.Text =" ";
this.l_bfb.Text =" ";
}
}
private void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
xx=e.X;
if(xx>255)
xx=255;
if(xx<=0)
xx=0;
aline=true;
this.label1.Invalidate();
}
private void label1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
/*
if((e.X>255)&&(e.X<0)&&(e.Y<0)&&(e.Y>127))
{
this.xx=-1;
}
else
{
this.xx=e.X;
}
this.label4.Text=e.X.ToString()+" "+e.Y.ToString();
*/
Point p=new Point(e.X,e.Y);
if(new Rectangle(0,0,256,127).Contains(p))
{
this.xx=e.X;
}
else
{
this.xx=-1;
}
this.label1.Invalidate();
}
private void label1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
aline=false;
}
private void lcolor_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
int width=this.lcolor.Width;
int height=this.lcolor.Height;
int j;
Color c;
Graphics g=e.Graphics;
switch(flag)
{
case 1:
{
for(int i=width;i>=0;i--)
{
j=i;
if(j>255) j=255;
c=Color.FromArgb(j,j,j);
Pen pen2=new Pen(c,1);
g.DrawLine(pen2,i,0,i,height);
}
break;
}
case 2:
{
for(int i=width;i>=0;i--)
{
j=i;
if(j>255) j=255;
c=Color.FromArgb(j,0,0);
Pen pen2=new Pen(c,1);
g.DrawLine(pen2,i,0,i,height);
}
break;
}
case 3:
{
for(int i=width;i>=0;i--)
{
j=i;
if(j>255) j=255;
c=Color.FromArgb(0,j,0);
Pen pen2=new Pen(c,1);
g.DrawLine(pen2,i,0,i,height);
}
break;
}
case 4:
{
for(int i=width;i>=0;i--)
{
j=i;
if(j>255) j=255;
c=Color.FromArgb(0,0,j);
Pen pen2=new Pen(c,1);
g.DrawLine(pen2,i,0,i,height);
}
break;
}
default:
break;
}
}
private void groupBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g=e.Graphics;
int x=this.lcolor.Left;
int y=this.lcolor.Top;
int w=this.lcolor.Width;
int h=this.lcolor.Height;
PointF [] pp=new PointF [4];
pp[0]=new PointF(x ,y+h+5);
pp[1]=new PointF(x-5 ,y+h+15);
pp[2]=new PointF(x+5 ,y+h+15);
pp[3]=new PointF(x ,y+h+5);
g.FillPolygon(Brushes.Black,pp);
x+=w/2;
pp[0]=new PointF(x ,y+h+5);
pp[1]=new PointF(x-5 ,y+h+15);
pp[2]=new PointF(x+5 ,y+h+15);
pp[3]=new PointF(x ,y+h+5);
g.FillPolygon(Brushes.Gray,pp);
x+=w/2;
pp[0]=new PointF(x ,y+h+5);
pp[1]=new PointF(x-5 ,y+h+15);
pp[2]=new PointF(x+5 ,y+h+15);
pp[3]=new PointF(x ,y+h+5);
g.FillPolygon(Brushes.Black,pp);
}
private void button5_Click(object sender, System.EventArgs e)
{
int a1=Convert.ToInt32(this.textBox1.Text);
int a2=Convert.ToInt32(this.textBox3.Text);
}
private void undo_Click(object sender, System.EventArgs e)
{
this.a=(Bitmap)this.b.Clone();
}
private void refresh_Click(object sender, System.EventArgs e)
{
doing();
}
public void doing()
{
BitmapFilter.zft(a,out gray,out rr,out gg, out bb);
graydo();
this.Invalidate();
}
}
}
//有点累,呵呵!