zoukankan      html  css  js  c++  java
  • .net图像处理

    以下为引用:

    反相
    public static bool Invert(Bitmap b)
    {
             BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), 
             ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
    int stride = bmData.Stride; 
    System.IntPtr Scan0 = bmData.Scan0; 
    unsafe 

    byte * p = (byte *)(void *)Scan0;
    int nOffset = stride - b.Width*3; 
    int nWidth = b.Width * 3;
    for(int y=0;y < b.Height;++y)
             {
             for(int x=0; x < nWidth; ++x screen.width/2)this.width=screen.width/2" vspace=2 border=0>
             {
    p[0] = (byte)(255-p[0]);
    ++p;
    }
    p += nOffset;
    }
    }

    b.UnlockBits(bmData);
    return true;
    }


    public static bool Grayscale(Bitmap b)
    {
    //变成黑白
    BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), 
    ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
    int stride = bmData.Stride; 
    System.IntPtr Scan0 = bmData.Scan0; 
    unsafe
    {
    byte * p = (byte *)(void *)Scan0;
    int nOffset = stride - b.Width*3;
    byte red, green, blue;
    for(int y=0;y < b.Height;++y)
    {
    for(int x=0; x < b.Width; ++x screen.width/2)this.width=screen.width/2" vspace=2 border=0>
    {
    blue = p[0];
    green = p[1];
    red = p[2];
    p[0] = p[1] = p[2] = (byte)(.299 * red 
    + .587 * green 
    + .114 * blue);
    p += 3;
    }
    p += nOffset;
    }
    }
    b.UnlockBits(bmData);
    return true;
    }

    亮度
    public static bool Brightness(Bitmap b,int nBrightness)
    {
    BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), 
    ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
    int stride = bmData.Stride; 
    System.IntPtr Scan0 = bmData.Scan0; 
    unsafe 

    byte * p = (byte *)(void *)Scan0;
    int nOffset = stride - b.Width*3; 
    int nWidth = b.Width * 3;
    for(int y=0;y<b.Height;++y)
    {
    for (int x = 0;  x < nWidth; ++x)
    {
    int nVal = (int) (p[0] + nBrightness);
    if (nVal < 0) nVal = 0;
    if (nVal > 255) nVal = 255;
    p[0] = (byte)nVal;
    ++p;
    }
    p += nOffset;
    }
    }
    b.UnlockBits(bmData);
    return true;
    }

    对比度
    public static bool Contrast(Bitmap b,int nContrast)
    {
    if (nContrast < -100) return false;
    if (nContrast >  100) return false;
    double pixel = 0, contrast = (100.0+nContrast)/100.0;
    contrast *= contrast;
    BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), 
    ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
    int stride = bmData.Stride; 
    System.IntPtr Scan0 = bmData.Scan0; 
    unsafe 

    byte * p = (byte *)(void *)Scan0;
    int nOffset = stride - b.Width*3; 
    int nWidth = b.Width * 3;
    for(int y=0;y<b.Height;++y)
    {
    for (int x = 0;  x < nWidth;++x)
    {
             byte color = p[0];    
    pixel = color/255.0;
    pixel -= 0.5;
    pixel *= contrast;
    pixel += 0.5;
    pixel *= 255;
    if (pixel < 0) pixel = 0;
    if (pixel > 255) pixel = 255;
    p[0] = (byte) pixel;
    ++p;
    }
    p += nOffset;
    }
    }
    b.UnlockBits(bmData);
    return true;
    }


    public static bool Gamma(Bitmap b)
    {
    BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), 
    ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
    int stride = bmData.Stride; 
    System.IntPtr Scan0 = bmData.Scan0; 

    byte [] redGamma = new byte [256];
    byte [] greenGamma = new byte [256];
    byte [] blueGamma = new byte [256];

    for (int i = 0; i < 256; ++i)
    {
    redGamma[i] = (byte)Math.Min(255, (int)(( 255.0 
          * Math.Pow(i/255.0, 1.0/5)) + 0.5));//其中1.0/5里的5是红色Gamma值。
    greenGamma[i] = (byte)Math.Min(255, (int)(( 255.0 
          * Math.Pow(i/255.0, 1.0/5)) + 0.5));
    blueGamma[i] = (byte)Math.Min(255, (int)(( 255.0 
    * Math.Pow(i/255.0, 1.0/5)) + 0.5));
    }

    unsafe 

    byte * p = (byte *)(void *)Scan0;
    int nOffset = stride - b.Width*3; 
    int nWidth = b.Width * 3;

    byte red, green, blue;
    for(int y=0;y<b.Height;++y)
    {
    for (int x = 0;  x < b.Width;++x)
    {
    blue = p[0];
    green = p[1];
    red = p[2];

    p[0]=(byte)blueGamma[(int)blue];
    p[1]=(byte)greenGamma[(int)green];
    p[2]=(byte)redGamma[(int)red];
    p+=3;
    }
    p += nOffset;
    }
    }

    b.UnlockBits(bmData);
    return true;
    }

    通道
    public static bool Channel(Bitmap b,char rgb)

    BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), 
    ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
    int stride = bmData.Stride; 
    System.IntPtr Scan0 = bmData.Scan0; 

    unsafe 

    byte * p = (byte *)(void *)Scan0;
    int nOffset = stride - b.Width*3; 
    int nWidth = b.Width * 3;

    byte red, green, blue;
    for(int y=0;y<b.Height;++y)
    {
    for (int x = 0;  x < b.Width;++x)
    {
    switch(rgb)
    {
    case 'r':
               p[0]=(byte)0;
    p[1]=(byte)0;
    break;
    case 'g':
    p[0]=(byte)0;
    p[2]=(byte)0;
    break;
    case 'b':
    p[2]=(byte)0;
    p[1]=(byte)0;
    break;
    }
    p+=3;
    }
    p += nOffset;
    }
         }

    b.UnlockBits(bmData);

    return true;
    }
  • 相关阅读:
    2016——3——16 kmp 7题
    bzoj3942——2016——3——15
    bzoj1355——2016——3——15
    poj 3641 ——2016——3——15
    KMP之我见
    转自他人——————TLE之前,没有一个节点叫失败!!!
    省选必知
    bzoj1449————2016——3——14
    bzoj1070————2016——3——14
    bzoj1562[NOI2009]变换序列——2016——3——12
  • 原文地址:https://www.cnblogs.com/gergro/p/462838.html
Copyright © 2011-2022 走看看