MyClass.h
#pragma once
class MyClass
{
public:
MyClass();
~MyClass();
private:
BITMAPINFO bitMapInfo;
BYTE* imgData;
DWORD imgSize;
public:
BOOL LoadBMPFile(const TCHAR* fileName);
void Render(HDC hdc);
};
MyClass.cpp
#include "framework.h"
#include "MyClass.h"
#include <stdio.h>
MyClass::MyClass()
{
bitMapInfo = { 0 };
imgData = nullptr;
imgSize = 0;
}
MyClass::~MyClass()
{
if (imgData != nullptr)
delete imgData;
}
BOOL MyClass::LoadBMPFile(const TCHAR* fileName)
{
FILE* pf;
if (_tfopen_s(&pf, fileName, TEXT("rb")) != 0)
return FALSE;
// 파일헤더 읽기
BITMAPFILEHEADER bmfh;
fread_s(&bmfh, sizeof(BITMAPFILEHEADER), sizeof(BITMAPFILEHEADER), 1, pf);
// bm 확인
if (bmfh.bfType != 0x4D42)
{
fclose(pf);
return FALSE;
}
// bitmap정보헤더 읽기
fread_s(&bitMapInfo.bmiHeader, sizeof(BITMAPINFOHEADER), sizeof(BITMAPINFOHEADER), 1, pf);
// 이미지 크기 계산해서 메모리할당
LONG width = bitMapInfo.bmiHeader.biWidth;
LONG height = bitMapInfo.bmiHeader.biHeight;
WORD bitCnt = bitMapInfo.bmiHeader.biBitCount;
DWORD pitch = (DWORD)((width * (bitCnt >> 3) + 3) & ~3);
imgSize = pitch * height;
imgData = new BYTE[imgSize];
// 파일에서 이미지데이터 읽기
fread_s(imgData, imgSize, imgSize, 1, pf);
fclose(pf);
return TRUE;
}
void MyClass::Render(HDC hdc)
{
StretchDIBits(hdc,
0, 0, bitMapInfo.bmiHeader.biWidth * 30, bitMapInfo.bmiHeader.biHeight * 30,
0, 0, bitMapInfo.bmiHeader.biWidth, bitMapInfo.bmiHeader.biHeight,
imgData,
&bitMapInfo,
DIB_RGB_COLORS, SRCCOPY);
}
반응형
'공부' 카테고리의 다른 글
20200901 공부 (0) | 2020.09.02 |
---|---|
20200831 공부 (0) | 2020.09.01 |
VirtualAlloc 함수를 이용한 Dynamic Array Design (0) | 2020.08.15 |
쓰레드 동기화 인터락 함수 (0) | 2020.08.06 |
쓰레드 동기화, 임계영역 접근 동기화 (0) | 2020.08.06 |