如题,有没有好一点的对比度算法(c#)的?

解决方案 »

  1.   

    以下是一个能用的函数,至于算法好不好,lz自己看吧。 public static bool Contrast(Bitmap b, sbyte nContrast)
    {
    if (nContrast < -100) return false;
    if (nContrast >  100) return false; double pixel = 0, contrast = (100.0+nContrast)/100.0; contrast *= contrast; int red, green, blue;

    // GDI+ still lies to us - the return format is BGR, NOT 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; 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];

    pixel = red/255.0;
    pixel -= 0.5;
    pixel *= contrast;
    pixel += 0.5;
    pixel *= 255;
    if (pixel < 0) pixel = 0;
    if (pixel > 255) pixel = 255;
    p[2] = (byte) pixel; pixel = green/255.0;
    pixel -= 0.5;
    pixel *= contrast;
    pixel += 0.5;
    pixel *= 255;
    if (pixel < 0) pixel = 0;
    if (pixel > 255) pixel = 255;
    p[1] = (byte) pixel; pixel = blue/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 += 3;
    }
    p += nOffset;
    }
    } b.UnlockBits(bmData); return true;
    }
      

  2.   

    我有一个算法,用过,还可以,你如果想要的话加我的MSN:[email protected]