6월11일
2010. 6. 11. 13:49ㆍ2010년/6월
#include<Windows.h>
#include"vfw.h"
#include <math.h>
#include <iostream>
#pragma comment(lib, "vfw32.lib") //vfw32 라이브러리 포함
#define WIDTH4(width) ((width+3)>>2)<<2 //가장중요(폭을 4배수로 맞추는것이다.
#define ID_BCAPTURE 101
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK FramInfo(HWND, LPVIDEOHDR); // 콜백 함수
TCHAR str[10]; //정수데이터값 확인을 위한 버퍼
unsigned char Menuflag; //인터페이스 선택
HINSTANCE g_hInst;
HWND hWndMain;
HWND hVFW;
HWND Hwndmain;
HBITMAP hBit;
BITMAPINFO Bm; //비트맵 정보를 가짐
HDC Hdc;
//비트맵의 정보
BYTE *imageData,*Dataimage,*byteimage;
BITMAPFILEHEADER *bmfh;
BITMAPFILEHEADER *bmfh8;
BITMAPINFO *binfo;
BITMAPINFO *binfo8;
//영상 메모리
int Action;
LONG width;
LONG height;
LONG width4;
LONG width5;
LPCTSTR lpszClass = TEXT("VFW 기본 예제");
char lpstrFile[MAX_PATH]; //충반한 길이의 버퍼제공하기위해 입력받는 파일명을 MAX_PATH(260)크기만큼선언
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCndParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW|CS_VREDRAW;
RegisterClass(&WndClass);
//영상을 보여줄 윈도우 생성
hWnd = CreateWindow(lpszClass, lpszClass,WS_OVERLAPPEDWINDOW|WS_CAPTION,200,200,
300, 300, NULL, (HMENU)NULL, hInstance, NULL);
hWndMain = hWnd;
ShowWindow(hWnd, SW_SHOW);
while(GetMessage(&Message, 0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
FILE * file ;
int check=4;
int i;
int j=0;
int coutn;
int R,G,B;
LONG abc,def;
switch(iMessage)
{
case WM_CREATE:
file=fopen("test.bmp","rb");
bmfh=(BITMAPFILEHEADER *)malloc(sizeof(BITMAPFILEHEADER));
fread(bmfh,sizeof(BITMAPFILEHEADER),1,file);
binfo=(BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256);
fread(binfo,sizeof(BITMAPINFOHEADER),1,file);
imageData=(BYTE *)malloc(binfo->bmiHeader.biSizeImage);
fread(imageData,sizeof(BYTE),binfo->bmiHeader.biSizeImage,file);
binfo8=(BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256);
width4=binfo->bmiHeader.biWidth*3;
width4=WIDTH4(width4);
binfo8->bmiHeader.biBitCount=24;
binfo8->bmiHeader.biClrImportant=0;
binfo8->bmiHeader.biClrUsed=0;
binfo8->bmiHeader.biCompression=0;
binfo8->bmiHeader.biHeight=binfo->bmiHeader.biHeight/(check/2);
binfo8->bmiHeader.biWidth=binfo->bmiHeader.biWidth/(check/2);
// binfo8->bmiHeader.biWidth=width4/(check/2);
binfo8->bmiHeader.biPlanes=1;
binfo8->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
binfo8->bmiHeader.biSizeImage=binfo8->bmiHeader.biHeight*binfo8->bmiHeader.biWidth;
binfo8->bmiHeader.biXPelsPerMeter=0;
binfo8->bmiHeader.biYPelsPerMeter=0;
width5=binfo8->bmiHeader.biWidth*3;
width5=WIDTH4(width5);
Dataimage=(BYTE *)malloc(binfo->bmiHeader.biSizeImage); //복사받을
for(width=0;width<binfo8->bmiHeader.biWidth;width++)
{
for(height=0;height<binfo8->bmiHeader.biHeight;height++)
{
R=0;
G=0;
B=0;
for(i=0;i<(check/2);i++)
{
for(j=0;j<(check/2);j++)
{
R+=imageData[((height*(check/2)+i)*width4)+(width*(check/2)+j)*3];
G+=imageData[((height*(check/2)+i)*width4)+(width*(check/2)+j)*3+1];
B+=imageData[((height*(check/2)+i)*width4)+(width*(check/2)+j)*3+2];
}
}
R=R/check;
G=G/check;
B=B/check;
Dataimage[(height*width5)+width*3]=R;
Dataimage[(height*width5)+width*3+1]=G;
Dataimage[(height*width5)+width*3+2]=B;
}
}
/* fwrite(bmfh8,sizeof(BITMAPFILEHEADER),1,fp);
fwrite(binfo8,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256,1,fp);
fwrite(byteimage,sizeof(BYTE),binfo8->bmiHeader.biSizeImage,fp);
*/
// fclose(fp);
fclose(file);
return 0;
case WM_COMMAND:
return 0;
case WM_LBUTTONDOWN:
Hdc =GetDC(hWnd);
width=binfo->bmiHeader.biWidth;
height=binfo->bmiHeader.biHeight;
MoveWindow(hWnd,200,200,(int)width*2+10,(int)height+33,TRUE);
SetDIBitsToDevice(Hdc,0,0,width,height,NULL,NULL,NULL,height,imageData,binfo,DIB_RGB_COLORS);
SetDIBitsToDevice(Hdc,width+5,0,width*2+20,height,NULL,NULL,NULL,height,Dataimage,binfo8,DIB_RGB_COLORS);
ReleaseDC(hWnd,Hdc);
return 0;
case WM_DESTROY:
free(imageData);
free(Dataimage);
free(binfo);
free(binfo8);
free(bmfh);
// free(byteimage);
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}
'2010년 > 6월' 카테고리의 다른 글
6월15일 영상처리(흑백 크기축소확대) (0) | 2010.06.16 |
---|---|
6월14일 영상처리(선형보간 영상 축소/확대) (0) | 2010.06.14 |
6월10일 RFID(프로젝트) 영상처리(흑백영상) (0) | 2010.06.10 |
6월9일 RFID( 프로젝트) 영상처리(영상뒤집기) (0) | 2010.06.09 |
6월8일 RFID(프로젝트),영상처리(fread) (0) | 2010.06.08 |