제 과제물에 도움이 필요합니다.픽셀에서 RGB 색상을 비교하고 가장 가까운 색상으로 원래 색상을 변경하십시오.
- 부하에게
PictureBox
- 에 이미지 (255) 간의 차이 (최대 값)과, 각 화소의 R 값, 255 G의 차이를 계산한다 : 기본적으로, 이는 내가 원하는 무엇 값 및 B 값의 경우
- 위의 계산에서 절대 값이 가장 작 으면 픽셀의 색상이 해당 색상에 더 가깝다는 것을 나타냅니다 (예 : (255-R 값)이 절대 값이 가장 작기 때문에 픽셀이 더 가깝습니다). 해당 색상)
- 더 가까운 색상으로 픽셀 색상을 변경하십시오 (위의 예에서 빨간색으로 변경한다는 의미입니다)
- I는 그 삼원색으로 화상을 얻는 것, 출력 한 결과에 PictureBox
의 결과를 보여준다.
나는 다음과 같은 코드를 작성했습니다 :
Bitmap img = new Bitmap(InputPictureBox.Image);
byte R, G, B;
Color pixelColor;
for (int x = 0; x < img.Width; x++)
{
for (int y = 0; y < img.Height; y++)
{
pixelColor = img.GetPixel(x, y);
R = (byte) Math.Abs(pixelColor.R - 255);
G = (byte) Math.Abs(pixelColor.G - 255);
B = (byte) Math.Abs(pixelColor.B - 255);
if (R < G && R < B)
{
pixelColor = Color.Red;
}
else if (G < R && G < B)
{
pixelColor = Color.Green;
}
else if (B < R && B < G)
{
pixelColor = Color.Blue;
}
}
}
OutputPictureBox.Image = img;
문제는 컬러 이미지를 한 후 반전 할 차례이다. 그래서, 내 코드에서 무엇이 잘못 되었습니까? 나는 if
문장이 작동하지 않는다고 생각하지만 그 이유는 모른다. 내가 잘못?
내 코드와 관련된 질문이 하나 더 있는데 실제로 R/G/B 값의 차이를 계산하여 실제로 작동 할 수 있습니까? 아니면 euclidean 거리를 사용하여 절대 완료해야합니까?
이 문제를 해결하는 방법이나 코드를 작성하는 방법을 알려주십시오. 나는 아주 비슷한 질문을 읽었지 만 주어진 답은 여전히 나에게 단서를주지 못했다.
관리되는 API를 사용하여 비트 맵 데이터에 액세스하는 것은 일반적으로 너무 느립니다. 안전하지 않은 함수 포인터를 사용하여 비트 맵 데이터를 직접 읽고 조작하는 것을 고려하십시오. 여기에 내가 좋아하는 좋은 기사가있다. http://www.bobpowell.net/lockingbits.htm –
'Math.Abs (pixelColor.R - 255)'를 '255 - pixelColor.R'로 바꾸는 것이 좋다. 어쨌든 항상 긍정적 일 것입니다. –
@ByteBlast 아, 네, 당신의 의견을 남겨주세요. 안전하지 않은 모드, lockbits에 대한 몇 가지 자료를 읽었지만 지금은 위의 코드를 수정하는 방법을 알고 싶습니다. –