您认为以下哪种方法最适合调整对比度水平?实际上,我想获得与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;
}


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

最佳答案

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

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

关于c# - 在Photoshop中调整图像对比度级别的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3286670/

10-13 08:34