改进代码

刚开始因为偷懒,所以代码写的很随意,我的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;

image

以下面这段程序为例,主要每次都是划线地方不同,如果把这段抽出成一个委托不就好了。

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;
}

 

分层抽出来做,意思明确

image

把每一部分单独的做成一个UserControl,然后做一个图像处理的类库。前端只是参数的传递,和图像的赋值。

怎么把UserControl控件拖到Form里也花了老半天,真的老了,什么都忘了。加上似乎VS的BUG?

我把UserControl拖到工具箱里先,然后不显示,要RetToolbox才出现不知道怎么搞的。

posted on 2010-01-18 20:41  六道众生  阅读(230)  评论(0编辑  收藏  举报

导航