2011-10-11 3 views
2

.raw 이미지 (일반 100x100 이미지)를로드하고 범위 내에서 (x, y) 좌표를 선택하도록 요청하는 프로그램을 만들어야하고 seekg 함수를 사용하여 상기 픽셀에 대한 적색, 녹색 및 청색 값. 나는 픽셀에서 rgb 값을 얻는 방법을 잃어 버렸다. 나는 지금까지 살펴 봤지만 교과서의 모든 장을 읽었으며 rgb 가치를 되 찾는 것에 관해서는 아무것도 없다.사용자가 선택한 픽셀의 C++ RGB 값 seekg

범위를 벗어나는 경우 좌표를 묻고 오류 메시지를 표시하는 코드가 올바르게 작동합니다. seekg/rgb 값을 얻기위한 코드를 작성하려고 할 때만 문제가 발생합니다. 사이트에서 다른 질문을 보았습니다. 여기에 좋은 정보가 있지만 rgb 값을 얻기 위해 seekg를 사용하여 답변을 보지 못했습니다.

나를 위해 코드를 생성 할 사람이 없으므로 올바른 방향으로 약간의 안내와 밀어 넣기 만 찾고 있습니다.

loc = (y * 100 + x) * 3; // code given by professor with 100 being the width of the image 
imageRaw.seekg(loc, ios::beg); 

그리고 나서 나는 실종 상태입니다.

도움을 주시면 감사하겠습니다.

+0

seekg()를 실행 한 후 파일 읽기 포인터가 함께 사용되어 픽셀의 색상을 나타내는 3의 첫 번째 바이트에 위치하게됩니다. 당신이 할 수있는 바로 다음은 무엇입니까? –

+0

그것이 내가 잃어버린 곳입니다. 나는 그 순간 정말로 바보 같았다. 이것은 어려운 임무는 아니지만, 나는 이것을 알고있다. 그러나 어떤 것은 나를 위해 클릭하지 않는다. – dennis7474

답변

1

거기에서 빨강, 초록 및 파랑 값을 나타내는 3 바이트를 읽어야합니다. 주문에 대해 충분히 말하지 않았습니까? 녹색은 거의 항상 중간에 있지만 RGB와 BGR 모두 상당히 일반적입니다.

실용적인 견지에서,이 크기의 그림에서는 일반적으로 seekg를 사용하지 않으려 고합니다. 전체 이미지를 메모리로 읽어 들이고 데이터를 저장하는 벡터 (또는 주장하는 경우 배열)의 값을 조회합니다.

+0

나는이 대답을 계속 확대하고 싶다. 당신의 진보 된 값은 바이트 (8 비트 컬러)가 아닐 수도 있습니다. 2 비트 - 32 비트 컬러의 범위를 가질 수 있습니다. 따라서 이것을 고려해야합니다. – Kaili

+0

... 한 픽셀 만 검사한다면 메모리에 이미지를 가져 오는 것이 바람직하지 않습니다. 하지만 이미지로 실제 작업을한다면 벡터/배열 또는 Unix를 사용하는 경우 mmap을 통해 메모리로 가져옵니다. – derobert

+0

@ Shadow : 3 바이트/픽셀, 당신이 질문에 수식에서 볼 수 있습니다. 그 안에 * 3을 적어 두십시오. 그러나 당신이 말하는 것은 일반적으로 사실입니다. (그리고 나는 여기서 사실 일 수 있다고 생각하는데, 24 비트는 3 개 채널에 균등하게 퍼져 나가야 한다거나 심지어 RGB 값, YUV, HSV 등등이 가능해야한다. 그러나 그것은 악마가 될 것이다. 교수님.) – derobert