Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- bitcoin
- Golang
- File
- http
- json
- JavaScript
- GO 언어
- install
- tcp
- go
- go언어
- C
- write
- range
- mutex
- package
- Sync
- 리뷰
- Callback
- channel
- Linux
- windows
- 영화
- c++
- Close
- window
- API
- Python
- FOR
- 책
Archives
- Today
- Total
Code Habit
API ) StretchDIBits 이미지 출력하기 본문
StretchDIBits 함수를 사용하여 이미지 파일을 화면상(윈도우)에 출력할 수 있다.
VOID CTestCtrl::OnPaint( HDC /*hDC*/ )
{
CPaintDC dc( m_hWnd ); // 함수 종료시 지가 알아서 release 함
CDC mDC;
CBitmap mBitmap;
CBitmap mBitmap_old;
CRect rect;
GetClientRect(&rect);
mDC.CreateCompatibleDC(dc);
mBitmap.CreateCompatibleBitmap(dc, rect.right, rect.bottom);
mBitmap_old = mDC.SelectBitmap(mBitmap);
int width = rect.Width();
int height = rect.Height();
if( NULL != m_pBuffer ) {
mDC.FillSolidRect(rect, RGB(0, 0, 0));
// BITMAPINFO
BITMAPINFO bInfo;
bInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bInfo.bmiHeader.biPlanes = 1;
bInfo.bmiHeader.biBitCount = 32;
bInfo.bmiHeader.biCompression = BI_RGB;
bInfo.bmiHeader.biWidth = m_nimgW;
bInfo.bmiHeader.biHeight = -m_nimgH;
bInfo.bmiHeader.biSizeImage = m_nimgW * m_nimgH * 4;
SetStretchBltMode(mDC, COLORONCOLOR); // set iMode.
mDC.StretchDIBits(0, 0, rect.Width(), rect.Height(), 0, 0, m_nimgW, m_nimgH, m_pBuffer, &bInfo, DIB_RGB_COLORS, SRCCOPY); // m_pBuffer : 이미지 버퍼
} else {
mDC.FillSolidRect(rect, RGB(0, 0, 0));
}
dc.BitBlt(0, 0, rect.Width(), rect.Height(), mDC, 0, 0, SRCCOPY);
mDC.SelectBitmap(mBitmap_old);
mBitmap.DeleteObject();
mDC.DeleteDC();
return;
}
StretchDIBits 함수 원형
int StretchDIBits(
HDC hdc, // 출력 대상의 DC 핸들
int XDest, // 출력 대상의 x 좌표 ( left )
int YDest, // 출력 대상의 y 좌표 ( top )
int nDestWidth, // 출력 대상의 넓이
int nDestHeight, // 출력 대상의 높이
int XSrc, // DIB 원본의 x 좌표 ( left )
int YSrc, // DIB 원본의 y 좌표 ( top )
int nSrcWidth, // DIB 원본 사각형 넓이
int nSrcHeight, // DIB 원본 사각형 높이
CONST VOID *lpBits, // 픽셀 데이터 시작 주소
CONST BITMAPINFO *lpBitsInfo, // BITMAPINFO 구조체 시작 주소
UINT iUsage, // RGB 또는 색상 테이블 인덱스
DWORD dwRop // 래스터 연산 코드
);
StretchDIBits 함수는 원본 그대로 출력하는 것이 아니라 크기를 늘이거나 줄일 수 있는데 이때 화면이 깨지게 된다. 이를 방지하기 위해 다음 함수를 사용할 수 있다.
int SetStretchBltMode(
HDC hdc,
int iStretchMode // 늘이기 모드
);
iStretchMode : COLORONCOLOR로 지정해 주어야 깔끔한 영상 출력이 가능하다.