2012-11-08 4 views
0

난 난 숫자에서 이해하기 위해 노력하고있어 이미 어쨌든만들기 감각

:) 나는 매우 편안하지 않다 낮은 수준에서 스캔 응용 프로그램에서 일하고 있어요 점점. 여기

우리가 간다 :

    200 DPI, B/ W
  1. 해상도와
  2. 스캔 Letter 크기의 문서를 제공 최대
  3. 1700x2200에 내가 1700x2200 = 3740000 비트 또는 467,500 바이트를 계산
  4. I BITMAPINFOHEADER를 얻으면 biSizeImage = 475200이됩니다. 왜?
  5. BITMAP을 사용하여 바이트 배열을 반환하는 데 사용하는 코드 조각은 475248 바이트 (48 바이트 더 있음)를 반환합니다. 그러나 biSize는 40이라고 말합니다. 따라서 헤더가 40 일 경우 이미지 데이터 앞에 48 바이트가 표시됩니까?

기본적으로 BITMAPHEADER에있는 계산 된 467500과 475200의 차이점을 이해하지 못합니까?

헤더가 40 바이트라고 말하는 이유도 모르지만 실제로는 48 바이트입니까? 색상 정보가 8 바이트라고 추측하고 있습니까? 이미지는 2 색 (B/W)이므로 각 색마다 4 바이트를 사용합니까?

enter image description here

내가 생각 나는 그것을 얻을 : 여기

편집

는 정보입니다. 스캔 한 라인을 메모리에 저장할 때 4 바이트의 팩을 사용해야합니다. 그래서, 내 계산에 따르면 1700 비트는 212.5 바이트이고 내가 보는 것에 따르면 216 바이트를 사용합니다. 그래서 일종의 의미가 있습니다.

+0

이미지를 파일 공유 서비스에 게시하여 모든 사람이 가정을 확인할 수있게하십시오. –

답변

1

BITMAPINFOHEADER의 크기는 실제로 40 바이트입니다. 비트 맵은 BITMAPINFO 구조체가 아니라 BITMAPINFOHEADER 구조체로 표시됩니다. BITMAPINFO에는 BITMAPINFOHEADER 구조체 다음에 선택적 RGBQUAD 색상 표가 포함되어 있습니다.

1700x2200은 비트 맵이 1 비트 픽셀을 사용함에 따라 467500 바이트를 차지합니다. 즉, 흑백 비트 맵입니다. 비트 맵에는 헤더와 픽셀 데이터 사이에 8 바이트가 추가로 포함되며, 색상 표에 2 RGBQUAD 값이 포함되므로 단색 비트 맵과 일치합니다. BITMAPINFOHEADER::biBitCount 필드를 고려해야하는데 실제로 픽셀 당 얼마나 많은 비트가 사용되고 색상 팔레트가 사용되는지 알려줍니다.

추가 바이트는 DWORD 경계에 맞추기 위해 마지막에 채워지는 각 주사선에 의해 계산됩니다. biSizeImage은 다음과 같이 계산됩니다.

biWidth = 1700 
biCount = 1 
biHeight = 2200 
biSizeImage = ((((((biWidth * biCount) + 31)/32) * 32)/8) * biHeight) = 475200 
+0

예,이 부분은 분명합니다. 단색 이미지입니다. 하지만 biSizeImage가 우리가 계산 한 것과 같이 475200이 아니라 467500이라고 말하는 이유는 무엇입니까? 그림 픽셀 행으로 옮겨 가면 212.5 바이트가되고 실제 크기는 216 바이트가됩니다 – katit

+0

'BITMAPINFOHEADER'의 다른 값을 모두 표시 할 수 있습니까? –

+0

더 자세히 자세히 편집 됨 – katit

관련 문제