模拟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(); } } } //有点累,呵呵! 
|