Priceless
[CV] Visual Studio를 통한 비트맵 출력 프로그램 생성 본문
Visual Studio 2022 기준
Visual Studio를 열고
새 프로젝트 생성을 누른다
Windows 데스크톱 애플리케이션 선택
솔루션 및 프로젝트를 같은 디렉토리에 배치 항목을 체크한 후
원하는 디렉토리에 프로젝트 생성
아래와 같이 실행할 수 있는 프로그램의 기본 구조를 포함한 코드가 작성되어 있다
BmpShow.cpp
이대로 실행하면 아무 화면 구성 요소가 없는 프로그램이 나타난다
프로그램 요소 중 마우스 왼쪽 버튼을 클릭했을 때 반응을 추가하기 위해
cpp 파일의 switch 문 내에 아래 코드를 추가한다
파일 제일 상단에 파일을 입출력하기 위해
#include<stdio.h>
를 추가한다
cat.bmp 파일을 출력하기 위해
같은 프로젝트 폴더 내에 cat.bmp 파일을 추가한다
case WM_LBUTTONDOWN: {
// 직접 작성
FILE* fp = NULL;
fopen_s(&fp, "cat.bmp", "rb");
if (!fp)
break;
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
LONG nWidth = bmih.biWidth;
LONG nHeight = bmih.biHeight;
WORD nBitCount = bmih.biBitCount;
DWORD dwWidthStep = (DWORD)((nWidth * nBitCount / 8 + 3) & ~3);
DWORD dwSizeImage = nHeight * dwWidthStep;
DWORD dwDibSize;
if (nBitCount == 24)
dwDibSize = sizeof(BITMAPINFOHEADER) + dwSizeImage;
else
dwDibSize = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * (1 << nBitCount) + dwSizeImage;
BYTE* pDib = new BYTE[dwDibSize];
fseek(fp, sizeof(BITMAPFILEHEADER), SEEK_SET);
fread(pDib, sizeof(BYTE), dwDibSize, fp);
LPVOID lpvBits;
if (nBitCount == 24)
lpvBits = pDib + sizeof(BITMAPINFOHEADER);
else
lpvBits = pDib + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * (1 << nBitCount);
HDC hdc = GetDC(hWnd);
int x = LOWORD(lParam);
int y = HIWORD(lParam);
::SetDIBitsToDevice(hdc, x, y, nWidth, nHeight, 0, 0, 0, nHeight, lpvBits,
(BITMAPINFO*)pDib, DIB_RGB_COLORS);
ReleaseDC(hWnd, hdc);
delete[] pDib;
fclose(fp);
}
break;
cat.bmp
그리고 코드를 실행한 결과
마우스 왼쪽을 클릭하면 비트맵 파일이 나타나는 프로그램이 실행된다
창의 크기를 변경하는 경우 프로그램 내의 이미지가 모두 사라지는데
이를 수정하기 위해서는 switch 문 내의
case WM_PAINT:
에 코드를 추가하면 해결할 수 있다
'ComputerVision > OpenCV' 카테고리의 다른 글
[OpenCV] Mat 클래스 (0) | 2023.10.23 |
---|---|
[OpenCV] Windows에서 OpenCV 설치, 설정 및 사용하기 (0) | 2023.10.22 |
[OpenCV]OpenCV 클래스 (0) | 2023.10.22 |
[OpenCV] OpenCV 모듈 (0) | 2023.10.22 |
[Vision] BMP 파일(비트맵 파일) (0) | 2023.10.21 |