调整Photoshop中对比度级别的最佳方法是什么?

时间:2010-07-20 02:51:36

标签: c# asp.net system.drawing

您认为以下哪一项最适合调整对比度?事实上,我想获得相同/近距离的性能来调整Photoshop中的对比度。

public static Bitmap AdjustContrast(Bitmap Image, float Value)
{
    Value = (100.0f + Value) / 100.0f;
    Value *= Value;
    System.Drawing.Bitmap NewBitmap = Image;

    for (int x = 0; x < NewBitmap.Width; ++x)
    {
        for (int y = 0; y < NewBitmap.Height; ++y)
        {
            Color Pixel = NewBitmap.GetPixel(x, y);
            float Red = Pixel.R / 255.0f;
            float Green = Pixel.G / 255.0f;
            float Blue = Pixel.B / 255.0f;
            Red = (((Red - 0.5f) * Value) + 0.5f) * 255.0f;
            Green = (((Green - 0.5f) * Value) + 0.5f) * 255.0f;
            Blue = (((Blue - 0.5f) * Value) + 0.5f) * 255.0f;
            NewBitmap.SetPixel(x, y, Color.FromArgb(Clamp((int)Red, 255, 0), Clamp((int)Green, 255, 0), Clamp((int)Blue, 255, 0)));
        }
    }

    return NewBitmap;
}

public static T Clamp<T>(T Value, T Max, T Min)
     where T : System.IComparable<T>
{
    if (Value.CompareTo(Max) > 0)
        return Max;
    if (Value.CompareTo(Min) < 0)
        return Min;
    return Value;
}

上面的代码不是我的,我忘记了代码的来源。

1 个答案:

答案 0 :(得分:1)

基本上没有。获取和设置像素真的很慢。尝试this这一行。它将Bitmap的像素锁定在内存中,然后使用对比度算法直接操作该内存区域。它确实需要不安全的代码,但如果你想从你的解决方案中获得任何性能,那就是你必须要去的方式。

或者,您可以使用内置矩阵操作来完成基本相同的操作。我并不特别喜欢使用它们,因为有时很难获得完美的效果。但在你的情况下,它们可能是最容易的事情。 Link