改进代码
刚开始因为偷懒,所以代码写的很随意,我的NumberUpDown控件和TrackBar控件使用的相当的糟糕
private void greenNumericUpDown_ValueChanged(object sender, EventArgs e) { int numericUpDownValue = (int)greenNumericUpDown.Value; if (greenTrackBar.Value != numericUpDownValue) { greenTrackBar.Value = numericUpDownValue; ChangePreviewPicture(); } } private void blueNumericUpDown_ValueChanged(object sender, EventArgs e) { int numericUpDownValue = (int)blueNumericUpDown.Value; if (blueTrackBar.Value != numericUpDownValue) { blueTrackBar.Value = numericUpDownValue; ChangePreviewPicture(); } }
private void lightTrackBar_Scroll(object sender, EventArgs e) { int numericUpDownValue = (int)lightNumericUpDown.Value; if (lightTrackBar.Value != numericUpDownValue) { lightNumericUpDown.Value = lightTrackBar.Value; pictureBox1.Image = ColorBalance (CopyBitmap((Bitmap)_changeImage), lightTrackBar.Value, lightTrackBar.Value, lightTrackBar.Value); } }
基本就是这么用的,哈哈,失望吧。
经过观察,其实也算不了观察了,可以吧这个封装成一个控件,做成普通的UserControl就成。主要曝露5个属性:Text,FontColor, Value,MaxValue,MinValue;暂时就想到这么多。
一个事件:ValueChanged;
以下面这段程序为例,主要每次都是划线地方不同,如果把这段抽出成一个委托不就好了。
BitmapData data = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, b.PixelFormat); //Bytes Per Pixel int BPP = 4; unsafe { byte* p = (byte*)data.Scan0; int offset = data.Stride - width * BPP; int pixel; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) {for (int i = 0; i < 3; i++) { pixel = histogram + (p[i] - histogram) * deep / 100; if (pixel < 0) pixel = 0; if (pixel > 255) pixel = 255; p[i] = (byte)pixel; }p += BPP; } p += offset; } b.UnlockBits(data); return b; }
分层抽出来做,意思明确
把每一部分单独的做成一个UserControl,然后做一个图像处理的类库。前端只是参数的传递,和图像的赋值。
怎么把UserControl控件拖到Form里也花了老半天,真的老了,什么都忘了。加上似乎VS的BUG?
我把UserControl拖到工具箱里先,然后不显示,要RetToolbox才出现不知道怎么搞的。