bitmap 공식
Scanline = bitCount * width + (4-((bitCount * width)%4));
스캔라인 = 비트수 * 비트맵이가지고 있는 가로넓이 + (4-(비트수*넓이)%4)
위에 4-... 라는 것이 만들어진것은 비트맵 자체가 저장이 될때 4바이트 단위(DWORD)로 저장이 되기때문이다.
예를 들어서 24비트, 가로99, 세로 10의 사이즈를 가진다고 하면, 99 * 10 * 3(24/8한값임)의 바이트수를 가지는 값일거라 생각들 하지만, 실제로는 그렇게 가지지 않는다는것을 알수 있다.
가로99는 4단위로 저장을 한다고 가정을 하면, 4로 나누어서 딱 떨어지는 값이 나오질 않기때문에 이렇게 표현을 할수가 있다.
99 = 4 * 24 + 3
말 그대로 4바이트 단위로 저장을 했을때, 24번 저장이 되고, 3바이트가 남는다는것이다. 4바이트단위로 저장된다고 해서 3바이트를 버릴수는 없으니, 4* 24 + (3+1) 이 되어 버리고 필요없는 1바이트값이 더 생기는 것이다.
그래서 총 사이즈는 필요 없는 값 1바이트가 더 붙었으므로 1 * h 만큼 더 늘어나게 된다. 위의 공식에 잠시 대입을 해보자면...
3*99 + (4-((3*99)%4) = 297 + (4-1) = 300
한 라인이 가지는 실제 크기는 300 바이트가 되는것이다.
여기에 높이값만 곱해주면 실제 사이즈가 된다.
(같은 비트와 같은 높이라면 가로가 99나 100이나 같다는 소리다)
TotalSize = Scanline * height;
프로그래밍
2010/04/26 09:40





댓글을 달아 주세요