2010-07-20 4 views
1

다음 중 하나가 대비 수준을 조정하는 것이 가장 좋다고 생각합니까? 사실, 나는 Photoshop에서 발견되는 대비를 조정하기 위해 동일하거나 가까운 퍼포먼스를 얻고 싶습니다.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

기본적으로 아니요. Get 및 Set 픽셀은 정말 느립니다. 이 라인을 따라 뭔가를 시도하십시오 this. Bitmap의 픽셀을 메모리에 고정한 다음 대비 알고리즘을 사용하여 해당 메모리 영역을 직접 조작합니다. 안전하지 않은 코드가 필요하지만 솔루션에서 어떤 종류의 성능을 원한다면 그렇게해야합니다.

또는 기본 제공되는 행렬 조작을 사용하여 기본적으로 동일한 작업을 수행 할 수 있습니다. 특히 때로는 완벽한 효과를 내기가 어렵 기 때문에 사용하지 않는 것이 좋습니다. 그러나 그들은 당신의 경우에 가장 쉬운 것일 수 있습니다. Link.

+0

정말 고마워요. 모든 프로젝트에서이 코드를 (링크 별) 사용 해본 적이 있습니까? Colormatrix를 사용하면 이전에 대비를 조정할 때 좋은 결과를 얻지 못했습니다. – Hoque

+0

나는 실제로 첫 번째 링크에서 언급 된 코드를 작성했다. (몇 년 전, 여전히 적용 가능하다.) 말했듯이 일반적으로 Color Matrix 클래스에 의존하지는 않지만 작동해야합니다. 두 번째 링크에 대한 기사를 읽었습니까? 그 사이트의 조언에 문제가 없었습니다. – colithium

관련 문제