C# 如何把 图处理成 反相呢?????????????????????????????????????????????????????????和 pHOTOSHOP 裏的 反向功能一樣

解决方案 »

  1.   

    你的图是什么格式,Bitmap?
    从原理上说,图像反色就是求R G B这3个分量与255的差,的绝对值
    R' = |255 - R|
    B' = |255 - B|
    G' = |255 - G|但是要对应到实际操作,要看具体Bitmap的颜色格式,比如是16位还是24位还是32位
    颜色空间是RGB,还是YUV还是灰度还是什么。
    如果是索引颜色(Indexed),那就更麻烦一点,要改写Palette
      

  2.   

     private void fx(Bitmap g)
            {
                for(int i=0;i<g.Width;i++)
                    for (int j = 0; j < g.Height; j++)
                    {
                        Color c = g.GetPixel(i, j);
                        Color cc=Color.FromArgb(255-c.R,255-c.G,255-c.B);
                        g.SetPixel(i,j,cc);
                    }
            
            }
      

  3.   

    謝謝樓上這是我寫的可以反相的代碼        /// <summary>
            /// 反相图片
            /// 2008-7-9
            ///  daonidedie
            /// </summary>
            public void Reverse()
            {
                BitmapData bmData = bmpobj.LockBits(new Rectangle(0, 0, bmpobj.Width, bmpobj.Height),
                   ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
                int stride = bmData.Stride;
                System.IntPtr Scan0 = bmData.Scan0;
                unsafe
                {
                    byte* p = (byte*)(void*)Scan0;
                    int nOffset = stride - bmpobj.Width * 3;
                    int nWidth = bmpobj.Width * 3;
                    for (int y = 0; y < bmpobj.Height; ++y)
                    {
                        for (int x = 0; x < nWidth; ++x)
                        {
                            p[0] = (byte)(255 - p[0]);
                            ++p;
                        }
                        p += nOffset;
                    }
                }
                bmpobj.UnlockBits(bmData);
            }