LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
LONG h,w;
HDC hdc;
int fd, x, y, z;
PAINTSTRUCT ps;
OPENFILENAME OFN;
TCHAR str[300];
TCHAR buffer[300];
TCHAR dummy[3];
TCHAR lpstrFile[MAX_PATH] = \"\";
BITHEADER BitHeadr;
BITINFOHEADER BitInfo;
COLORREF color = RGB(0, 0, 0);
switch(iMessage)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_FILEOPEN:
{
memset(&OFN, 0, sizeof(OPENFILENAME));
OFN.lStructSize = sizeof(OPENFILENAME);
OFN.hwndOwner = hWnd;
OFN.lpstrFilter = TEXT(\"모든 파일(*.*)\\0*.*\\0비트맵(*.bmp)\\0*.bmp\\0JPG(*.jpg)\\0*.jpg\\0\");
OFN.lpstrFile = lpstrFile;
OFN.nMaxFile = MAX_PATH;
if(GetOpenFileName(&OFN) == 0)
{
return 0;
}
fd = open(OFN.lpstrFile, O_RDONLY);
read(fd, buffer, sizeof(BitHeadr));
memcpy(&BitHeadr, buffer, sizeof(BitHeadr));
lseek(fd, 0, SEEK_CUR);
read(fd, buffer, sizeof(BitInfo));
memcpy(&BitInfo, buffer, sizeof(BitInfo));
lseek(fd, BitHeadr.bfOffset, SEEK_SET); //비트맵 데이터 시작지점으로 이동
case WM_PAINT:
hdc = GetDC(hWnd);
if((BitInfo.biWidth%4) == 0)
{
for(y = BitInfo.biHeight; y >0; y--)
{
for(x = 0; x < BitInfo.biWidth; x++)
{
read(fd, buffer, 3);
color = RGB(buffer[2], buffer[1], buffer[0]);
SetPixel(hdc, x, y, color);
lseek(fd, 0, SEEK_CUR);
}
}
}
}
break;
case ID_SIZEMAX: //2배 확대
{
hdc = GetDC(hWnd);
if(BitInfo.biWidth)
{
for(y = BitInfo.biHeight; y >0; y=y-1)
{
for(x = 0; x < BitInfo.biWidth; x++)
{
read(fd, buffer, 3);
color = RGB(buffer[2], buffer[1], buffer[0]);
SetPixel(hdc, x*2, y*2, color);
SetPixel(hdc, x*2-1, y*2, color);
SetPixel(hdc, x*2, y*2-1, color);
SetPixel(hdc, x*2-1, y*2-1, color);
lseek(fd, 0, SEEK_CUR);
}
}
}
}
break;
}
break;
출력하는부분만 붙여넣은거고
이게 파일열기를 해서 정보를 저장한다음에 점찍는식인거는 보면 알거고.
사이즈조절자체는 SetPixel 이거 이용하면 되는건 암.
질문은 메뉴중에 확대 (ID_SIZEMAX)를 누르면 그림을 크게 하려는데 이런식으로 하니까
확대누르면 바로 오류남. 어떤식으로 해야할지 모르겠다. 뭐 이용하면되겠네 이런거말고 그냥 딱 어디 수정해라식으로 알려줘
댓글 0