C#图像镜像

C#水平垂直图像镜像---C#数字图像处理算法典型实例.赵春江
原理:
变换前
灰度图像--->像素序号=c+r*w(当前列+当前行*列数)
彩色图像--->像素序号=0+c*3+r*w*3
像素序号=1+c*3+r*w*3

像素序号=2+c*3+r*w*3

变换后参考代码

private void start_Click(object sender, EventArgs e) { Rectangle rect= new Rectangle(0,0,_bmp.Width,_bmp.Height); BitmapData bmpdata = https://www.it610.com/article/_bmp.LockBits(rect, ImageLockMode.ReadWrite, _bmp.PixelFormat); IntPtr ptr = bmpdata.Scan0; int bytes=0; if(_bmp.PixelFormat==PixelFormat.Format8bppIndexed)//判断是灰度色图像还是彩色图像,给相应的大小 { bytes=_bmp.Width*_bmp.Height; } else if(_bmp.PixelFormat==PixelFormat.Format24bppRgb) { bytes = _bmp.Width * _bmp.Height * 3; }byte[] pixelValues=new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, pixelValues, 0, bytes); //内存法,从内存中将像素复制到pixelValues数组int halfWidth = _bmp.Width / 2; int halfheigth= _bmp.Height/2; byte temp; byte temp1; byte temp2; //灰度图像 if (_bmp.PixelFormat==PixelFormat.Format8bppIndexed) { if (HorV) { for (int r = 0; r < _bmp.Height; r++) for (int c = 0; c < halfWidth; c++) { temp = pixelValues[r * _bmp.Width + c]; pixelValues[r * _bmp.Width + c] = pixelValues[(r + 1) * _bmp.Width - c - 1]; pixelValues[(r + 1) * _bmp.Width - c - 1] = temp; } } else { for (int c = 0; c < _bmp.Width; c++) { for (int r = 0; r < halfheigth; r++) { temp = pixelValues[r * _bmp.Width + c]; pixelValues[r * _bmp.Width + c] = pixelValues[(_bmp.Height - r - 1) * _bmp.Width + c]; pixelValues[(_bmp.Height - r - 1) * _bmp.Width + c] = temp; } } } } else if (_bmp.PixelFormat == PixelFormat.Format24bppRgb)//彩色图像 { if (HorV) { for (int r = 0; r < _bmp.Height; r++) for (int c = 0; c < halfWidth; c++) { temp= pixelValues[0 + r * _bmp.Width * 3 + c * 3]; temp1 = pixelValues[1 + r * _bmp.Width * 3 + c * 3]; temp2 = pixelValues[2 + r * _bmp.Width * 3 + c * 3]; pixelValues[0 + r * _bmp.Width * 3 + c * 3] = pixelValues[0 + (r + 1) * _bmp.Width * 3 - (c + 1) * 3]; pixelValues[1 + r * _bmp.Width * 3 + c * 3] = pixelValues[1 + (r + 1) * _bmp.Width * 3 - (c + 1) * 3]; pixelValues[2 + r * _bmp.Width * 3 + c * 3] = pixelValues[2 + (r + 1) * _bmp.Width * 3 - (c + 1) * 3]; pixelValues[0 + (r + 1) * _bmp.Width * 3 - (c + 1) * 3]=temp; pixelValues[1 + (r + 1) * _bmp.Width * 3 - (c + 1) * 3]=temp1; pixelValues[2 + (r + 1) * _bmp.Width * 3 - (c + 1) * 3] = temp2; } } else { for (int c = 0; c < _bmp.Width; c++) { for (int r = 0; r < halfheigth; r++) { temp= pixelValues[0 + r * _bmp.Width * 3 + c * 3]; temp1 = pixelValues[1 + r * _bmp.Width * 3 + c * 3]; temp2 = pixelValues[2 + r * _bmp.Width * 3 + c * 3]; pixelValues[0 + r * _bmp.Width * 3 + c * 3] = pixelValues[0 + (_bmp.Height - r - 1) * _bmp.Width * 3 + c * 3]; pixelValues[1 + r * _bmp.Width * 3 + c * 3] = pixelValues[1 + (_bmp.Height - r - 1) * _bmp.Width * 3 + c * 3]; pixelValues[2 + r * _bmp.Width * 3 + c * 3] = pixelValues[2 + (_bmp.Height - r - 1) * _bmp.Width * 3 + c * 3]; pixelValues[0 + (_bmp.Height - r - 1) * _bmp.Width * 3 + c * 3] = temp; pixelValues[1 + (_bmp.Height - r - 1) * _bmp.Width * 3 + c * 3] = temp1; pixelValues[2 + (_bmp.Height - r - 1) * _bmp.Width * 3 + c * 3] = temp2; } } } }System.Runtime.InteropServices.Marshal.Copy(pixelValues, 0, ptr, bytes); _bmp.UnlockBits(bmpdata); _pictureBox.Image = _bmp;

水平镜像效果
C#图像镜像
文章图片


垂直镜像效果
C#图像镜像
文章图片


【C#图像镜像】解决方案已上传:http://download.csdn.net/download/saw009/10169694点击打开链接

    推荐阅读