안녕하세요. 천리안 프로그래머포럼 C++Builder 담당자 임펠리테리입니다.
아래에 무념님이 친절하게 잘 설명해주셨군요.
무념님이 설명하신 내용은 그레이스케일링이죠. 질문하신 내용중 '갈색톤으로..'에
해당하는 것입니다.
컬러 이미지를 '흑백'(그레이스케일이 아닌)으로 바꾸려면, 디더링이라는 과정을
거쳐서 일정 영역마다 흰색과 검은색의 픽셀 조합으로 바꿔주어야 합니다.
하지만.. 썩 좋은 것은 아니지만, 그럭저럭 볼만한 디더링을 해주는 루틴은 vcl 내에
있습니다. TBitmap::Monochrome 속성을 true로 세팅하면 제깍~ 디더링이 됩니다.
흑백으로 바뀌는 거죠.
폼위에 있는 이미지를 대상으로 한다면...
Image1.Picture.Bitmap.Monochrome := true; 이렇게 해주면 되죠.
TBitmap을 대상으로 한것이긴 하지만, jpeg나 emf등등, TGraphic을 상속받는 모든
그래픽 객체에서 사용할 수 있는 방법입니다. TGraphic 객체는 그것이 원래 무엇이었
든 관계없이, 메모리에 로드되면 TBitmap과 메모리를 공유하니까요. 아참, 아이콘은
아마 안될겁니다.
그럼 도움되시길...
독립문에서 임펠리테리였습니다.
(cbuilder, cbuilder@thrunet.com)
p.s. 깜빡했는데.. 일반적인 그레이스케일링은, r g b 값에 따라 가중치(?)가
있습니다. 똑같이 더해서 /3 하는 것이 아니구요.
원래 이미지에 가장 가까운 그레이스케일 이미지를 얻으려면, 제 기억으로는
b 값에 가장 큰 가중치를, r값이 그 다음, g가 가장 낮은 비율로 곱해졌던거
같은데.. 정확한 값은 기억이 안나네요.
|