그레이 스케일 이미지에 5 가지 색상의 그래디언트 값을 그려야합니다. 밝은 픽셀은 그라디언트에서 밝은 색을 가져야하며 어두운 픽셀은 어두운 픽셀을 가져야합니다.그레이 스케일 이미지 색상 화
그라디언트가 노란색으로 시작하여 빨간색으로 끝나면 흰색 픽셀은 노란색이되고 검은 색 픽셀은 그라디언트를 따라 가운데에 모두 빨간색으로 표시됩니다.
ColorMatrix로 처리 할 수 있습니까?
그레이 스케일 이미지에 5 가지 색상의 그래디언트 값을 그려야합니다. 밝은 픽셀은 그라디언트에서 밝은 색을 가져야하며 어두운 픽셀은 어두운 픽셀을 가져야합니다.그레이 스케일 이미지 색상 화
그라디언트가 노란색으로 시작하여 빨간색으로 끝나면 흰색 픽셀은 노란색이되고 검은 색 픽셀은 그라디언트를 따라 가운데에 모두 빨간색으로 표시됩니다.
ColorMatrix로 처리 할 수 있습니까?
은 당신이 원하는 것은 간단한 경우에 3 차원에서 5 점 사이에 선형 보간이다. {r1, g1, b1}과 {r2, g2, b2} 점을 연결하는 3 차원 선 위로 걸어 가면서 두 색상 {r1, g1, b1}과 {r2, g2, b2} b2}. 회색 값이 [0,1] 간격에있을 때 회색 레벨이 0이고 {r2, g2, b2}이면 색상 {r1, g1, b1}을 원할 것입니다. 그레이 레벨 1.문제는 그 사이의 색상을 계산하는 방법입니다.
간단한 학교 벡터 분석을 생각해보십시오. c1은 점 {r1, g1, b1}이고, c2는 {r2, g2, b2}입니다.
또는 동일
outColor = (1-회색) C1 + 회색
outColor = C1 + 회색 * (C2-C1) C1에서 시작 벡터 C2-(C1)의 방향으로 이동 c2
Remenber, 회색은 [0,1] 간격에 있어야합니다. 그렇지 않으면 재조정해야합니다. 이것은 두 점 사이의 단순 선형 보간입니다. 물론 원하는만큼 많은 색상을 확장 할 수 있습니다.
5 가지 색상에 대한 접근 방식은 기본적으로 동일합니다. 여기에 5 개 무작위로 선택된 색상 : 먼저,
을 주어진 회색 값의 색상을 원한다면 :
{{0.273372, 0.112407, 0.0415183},
{0.79436, 0.696305, 0.167884},
{0.235083, 0.999163, 0.848291},
{0.295492, 0.780062, 0.246481},
{0.584883, 0.460118, 0.940826}}
두 가지 중요한 것을 당신은 알고있다 2 개의 주변 rgb- 포인트를 추출해야합니다. 예를 들어 회색 = 0.1의 색을 원하면 첫 번째 및 두 번째 RGB 점이됩니다.
은 그라디언트에서 사용하는 색상 수에 따라 회색 값을 조정해야합니다. 이미지를 보시려면 5 가지 색상을 사용하십시오. 두 가지 보간 간격이 인 4 가지 이 있습니다. 위에서 언급 한 색상 공식을 사용하려면 각 색상 간격의 회색 값을 [0,1]로 재조정해야합니다.
비고 :이 물론 C#에서 구현을위한 해결책 아닙니다,하지만 귀하의 질문에 같은 크기의 컬러 이미지를 만드는 것은 문제 아니라는 것을 제안. 각 회색 값의 색상 값 계산은 색상 지정의 핵심입니다.
그레이 스케일 이미지의 모든 픽셀을 반복하고 간단하게 LINQ를 사용하여 가장 간단하게 밝기 및 알파 값을 취할 수 있습니다. 그런 다음 원하는 색상을 취하고 색조 및 채도 및 밝기를 사용합니다.
이제 Gray.Alpha, Color.Hue, Color.Saturation 및 Gray.Brightness와 Color.Brightness의 조합을 가져 와서이 색상을 그레이 스케일 이미지의 픽셀에 적용하여 새 색상을 만듭니다.
첫 번째 까다로운 부분은 알파, 색조, 채도 및 윤곽선으로 색상을 만드는 것이지만, 간단히 this function ;-)을 사용할 수 있습니다.
마지막 까다로운 부분은 회색의 밝기와 색상을 결합하여 독자에게 운동으로 남겨 둡니다. ;-)
대단히 감사합니다! –
밝기는 HSL 색상에서 사용되는 광도와 동일하지 않습니다. – Nyerguds
당신은 "5 가지 색상"은 물론 빨간색에서 노란색까지 그라디언트를 언급했습니다.
기본 개념을 설명하기 위해 바이트 배열에서 Color 배열을 생성 할 수 있습니다. 여기서 바이트 배열은 원본 이미지의 8 비트 회색조 값을 나타냅니다.
새로운 그라데이션 색을 찾기 위해 (R, G, B는) (8 비트) 계조 값을 주어, 다음을 수행
샘플 코드로 녹색 구성 요소를 설정하는 것은 :
byte[] bytes = getImageBytes();
Color[] colors = new Color[bytes.Length];
for(int i = 0; i < bytes.Length; i++)
{
colors[i] = Color.FromArgb(255, bytes[i], 0);
}
신속하게이 작업을 수행하려면 , "잠금/잠금 해제 비트"코드를 사용하고 직접 바이트 값을 조작하십시오.
감사합니다. 그것을 줄 것이다 –
완벽! 멋진 그래프! –