比如进行高斯滤波
高斯滤波我懂,我想知道的是,如何用C#操作bmp图片,jpg图片
比如用个什么函数把图片里的数据都读到一个矩阵里
然后我就可以进行操作了
然后再从这个矩阵写回去
生成一个新的图片文件多谢!!!

解决方案 »

  1.   

     Bitmap _Bitmap = (Bitmap)Image.FromFile(@"c:\1.BMP");            BitmapData _BitmapData = _Bitmap.LockBits(new Rectangle(0, 0, _Bitmap.Width, _Bitmap.Height), ImageLockMode.ReadWrite, _Bitmap.PixelFormat);
                byte[] _Value = new byte[_BitmapData.Stride * _BitmapData.Height];            Marshal.Copy(_BitmapData.Scan0, _Value, 0, _Value.Length);写回去还是用 Marshal.Copy
      

  2.   

     你好, Bitmap类是在哪里定义的?
      

  3.   

    嗯~ 谢谢~ 
    我也找到了
    不过, 刚才我在一个console程序里试了一下, 
    好像console程序里不能够使用System.Drawing这个名字空间
      

  4.   


    我直接写的全名:  System.Drawing.Bitmap
      

  5.   

    不是在代码中using的问题,而是在项目中添加引用。
      

  6.   

    如果是在命令行用csc直接编译的话,加上/r:System.Drawing.dll。
    在VS中就在右边的解决方案资源管理器中的“引用”上点右键,添加引用。
      

  7.   

    哦, 多谢!我按照1楼说的方法对放置图片数据的byte数组 _Value[]进行了操作之后, 如何将改变后的_Value写回图片?
    我当前要处理的文件首先在一个PictureBox中显示了出来, 如何动态的更新该PictureBox显示的图片(也就是说, 我每一步进行的图形处理的结果都会实时的显示出来)?
      

  8.   

    我目前的按一个按钮, 进行图像处理, 并更新PictureBox控件的代码如下, 当然, 现在这段代码无法实现我说的上面我想要的效果:private void btnProcess_Click(object sender, EventArgs e)
            {
                _Bitmap = new Bitmap(pbx1.Image);            _BitmapData = _Bitmap.LockBits(new Rectangle(0, 0, _Bitmap.Width, _Bitmap.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, _Bitmap.PixelFormat);
                byte[] _Value = new byte[_BitmapData.Stride * _BitmapData.Height];            System.Runtime.InteropServices.Marshal.Copy(_BitmapData.Scan0, _Value, 0, _Value.Length);            for (int i = 0; i < _BitmapData.Height; i++)
                {
                    for (int j = 0; j < _BitmapData.Stride; j++)
                    {
                        _Value[i * _BitmapData.Stride + j] /= 2; 
                    }
                }            System.Runtime.InteropServices.Marshal.Copy(_Value, 0, _BitmapData.Scan0, _Value.Length);
              
                pbx1.Refresh();        }
      

  9.   

    上面代码中这句
    _Value[i * _BitmapData.Stride + j] /= 2; 
    可以换成任何对像素进行的操作...