2011-02-03 4 views
3

임의의 비트 맵 데이터가 포함 된 '비트 맵'유형이 있습니다. Brightness, Color, Saturation, Hue에 대한 조정을 직접 작성하여 각 비트마다 개별적으로 작동하며 놀랄만큼 느립니다..NET에서 ColorMatrix를 사용하여 밝기, 색상, 채도, 색조를 변경하는 방법

제 연구에서 행렬을 사용하면 매우 빠르게 조정할 수 있다는 것을 알았습니다. 또한 .NET에는 DrawImage()를 사용할 때 행렬 효과를 적용 할 수있는 ColorMatrix가 있습니다.

우리는 다음 (MSDN에서 웹 사이트) 같은 외모를 설정 매트릭스 :

float[][] colorMatrixElements = { 
new float[] {2, 0, 0, 0, 0},  // red scaling factor of 2 
new float[] {0, 1, 0, 0, 0},  // green scaling factor of 1 
new float[] {0, 0, 1, 0, 0},  // blue scaling factor of 1 
new float[] {0, 0, 0, 1, 0},  // alpha scaling factor of 1 
new float[] {.2f, .2f, .2f, 0, 1}}; // three translations of 0.2 

하지만 적절한 범위 또는 정확히 어떤이 번호를 실제로 수행을 찾을 수 없어. 밝기, 색상, 채도 및 색조를 조정하는 방법을 알지 못합니다.

어떤 도움 ?? 어딘가에서 좋은 문서를 놓치고 있습니까?

감사합니다.

+0

마지막 줄은 '밝기'입니다. 현재, 나는 그것을 모두 밝기로 설정하고있다. (0 -> 1 범위) – DanTheMan

답변

4

http://www.graficaobscura.com/matrix/index.html에 일부 세부 사항이 있지만 다른 코드를 게시하고 싶을 수 있습니다. 픽셀 단위로 작업을 수행하는 것은 매우 일반적이며 이러한 유형의 작업에서는 일반적으로 성능 문제가 발생하지 않습니다. .NET의 Bitmap.SetPixel은 악명이 높습니다. 더 빠른 방법을 보여주는 codeproject에서 좋은 C# image processing series가 있습니다. 나는 C++에 대한 경험이 없다. 그러나 나는 한 번 살펴볼 것이다.

+0

참고를 보내 주셔서 감사합니다. 나는 내가 행렬을 사용할 수 있다고 생각했던 것보다 더 많은 것을 할 수 있었다. 내가 (대조적으로) 할 수없는 유일한 (필수) 것이지만, C# 예제는 바로 그것을 고정 시켰습니다. 나는 약간의 테스트를했고, 네, 대부분 느린 'SetPixel'이었습니다. _ 몇 시간에 걸쳐 코드가 느려졌습니다. – DanTheMan

1

컬러 매트릭스로 수행 할 수있는 작업에는 제한이 있습니다.

기본적으로 제공하는 매트릭스는 사실상 동질적인 4 차원 변환입니다. 큰 단어로, 색상의 다른 채널 (R G B A)을 회전, 크기 조정 및 변환 할 수 있습니다.

자세한 내용은 Transformation Matrix을 참조하십시오.

+0

밝기는 스케일링에 해당하고 색조 변경은 회전에 해당합니다. 채도는 원점으로부터 멀리 떨어진 점에 상대적으로 비율을 조절하는 것과 같습니다. 이는 스케일링과 번역에 의해 표현 될 수도 있습니다. –

관련 문제