본문 바로가기

Mobile Develop/Windows Programing

StretchBlt 이미지 축소시 깨짐현상 방지

StretchBlt()를 이용할 때 기본으로 사용하면서 축소하면 엄청난 깨짐 현상이 보인다

사용자 삽입 이미지

이러한 현상을 방지하기 위해
SetStretchBltMode(hdc, iMode)로 iMode를 정의해 줘야 한다
(출처 : 데브피아 - 안영석 님)

찾아보니 StretchBlt() API를 사용할 때 SetStretchBltMode(hdc, iMode); 로 mode를 정해줄 수 있네요..
iMode 값은 다음 중 한개가 될 수 있구요.
* BLACKONWHITE : 논리 AND연산 수행/흰색배경에 검정색으로 되어있는 흑백 비트맵에 적당.
* WHITEONBLACK : 논리 OR연산 수행/흰색 배경에 검정색으로 되어있는 흑백 비트맵에 적당.
* COLORONCOLOR : 논리연산 하지 않음/컬러 비트맵에서 가장 좋은 접근 방법이라네요.^^
* HALFTONE : 반색조 형태.
저는 사진을 띄울거라서 coloroncolor을 사용했더니 바로 잘 나오네요.ㅎㅎ
ex)
pDC->SetStretchBltMode(COLORONCOLOR);  // set iMode.
pDC->StretchBlt(nX, nY, button.width, button.height, &tempDC, 0,0, BMPWIDTH, BMPHEIGHT, SRCCOPY);  // Draw


<원본사진>

사용자 삽입 이미지

<기본 설정 - 정의를 하지 않은 경우 or BLACKONWHITE 를 줬을경우>
사용자 삽입 이미지

<설정 - WHITEONBLACK를 적용>
사용자 삽입 이미지

<설정 - COLORONCOLOR>
사용자 삽입 이미지

<설정 - HALFTOME 적용>
사용자 삽입 이미지