6월28일 자바(예외처리
2010. 6. 28. 09:14ㆍ2010년/6월
package net.itisn;
public class Greeting {
static String greet(String name)
{
return "안녕하세요"+name+"님";
}
public static void main(String[] args) {
if(args.length==0)
{
System.out.println("usage : java Greetin<name>");
System.exit(1);
}
String msg =greet(args[0]);
System.out.println(msg);
}
}
우리가 C를 사용할때 main abc fsd 라고 할때
int main (args[])로 인해 main이 args[0]이다 하지만
자바에서는 args[0]이 바로 abc가 된다.
======================================================================
======================================================================
#include <windows.h>//API함수들의 원형과 사용하는 상수들이 정의 되어 있다.
#include <windows.h>
#include <math.h>
#include <iostream>
#include "0623.h"
#include "resource.h"
#include "soullex.h"
HWND hVFW;
HBITMAP hBit;
BITMAPINFO Bm; //비트맵 정보를 가짐
HWND Hwndmain;
HDC hdc;
LPVIDEOHDR VideoHdr;
BYTE *RevData;
BYTE *imageData;
BITMAPINFO *binfo;
char str[128];
int iSum = 0;
int a=0;
float fnum;
RECT rt;
//라벨링 시작주소알아오기
int Labeling(BYTE * Labelimage,BITMAPINFO* Labinfo,int icol)
{
int cnt=0,ict; //라벨링 갯수
int ixt;
int iyt;
LONG Lbwidth4; // 가로 길이
LONG Lwidth;
LONG Lheight;
int stt;//시작주소
int rutaddr=0;
int selc=0;
Lwidth=Labinfo->bmiHeader.biWidth; //가로
Lheight=Labinfo->bmiHeader.biHeight; //세로
Lbwidth4=((Lbwidth4+3)>>2)<<2; // 폭넓이
Lbwidth4=Lbwidth4*3;
for(iyt=0;iyt<Lheight;++iyt)
{
for(ixt=0;ixt<Lwidth;++ixt)
{
if(Labelimage[iyt*Lbwidth4+ixt*3]==0) //파란색이 0일때 (즉 빨간색)
{
Labelimage[iyt*Lbwidth4+ixt*3+2]=254; //빨간색부분에 254를 대입
stt=iyt*Lbwidth4+ixt*3; //시작주소 대입
cnt=0;
while(1)
{
ict=0;
if(Labelimage[(iyt-1)*Lbwidth4+(ixt-1)*3]==0) //왼쪽밑
{
ixt--;
iyt--;
Labelimage[(iyt)*Lbwidth4+(ixt)*3+2]=254;
cnt++;
ict++;
}
else if(Labelimage[(iyt-1)*Lbwidth4+(ixt*3)]==0) //밑
{
iyt--;
Labelimage[(iyt)*Lbwidth4+(ixt)*3+2]=254;
cnt++;
ict++;
}
else if(Labelimage[(iyt-1)*Lbwidth4+(ixt+1)*3]==0) //오른쪽밑
{
ixt++;
iyt--;
Labelimage[(iyt)*Lbwidth4+(ixt)*3+2]=254;
cnt++;
ict++;
}
else if(Labelimage[(iyt)*Lbwidth4+(ixt+1)*3]==0) //오른쪽
{
ixt++;
Labelimage[(iyt)*Lbwidth4+(ixt)*3+2]=254;
cnt++;
ict++;
}
else if(Labelimage[(iyt+1)*Lbwidth4+(ixt+1)*3]==0) //오른쪽 위
{
ixt++;
iyt++;
Labelimage[(iyt)*Lbwidth4+(ixt)*3+2]=254;
cnt++;
ict++;
}
else if(Labelimage[(iyt+1)*Lbwidth4+(ixt)*3]==0) //위
{
iyt++;
Labelimage[(iyt)*Lbwidth4+(ixt)*3+2]=254;
cnt++;
ict++;
}
else if(Labelimage[(iyt+1)*Lbwidth4+(ixt-1)*3]==0) //왼쪽위
{
ixt--;
iyt++;
Labelimage[(iyt)*Lbwidth4+(ixt)*3+2]=254;
cnt++;
ict++;
}
else if(Labelimage[(iyt)*Lbwidth4+(ixt-1)*3]==0) //왼쪽
{
ixt--;
Labelimage[(iyt)*Lbwidth4+(ixt)*3+2]=254;
cnt++;
ict++;
}
if(ict==0)
{
break;
}
}
if(cnt>selc)
{
rutaddr=stt;
selc=cnt;
}
}
}//첫번째 for문
}//두번째 for문
return rutaddr;
}
//제일큰부분 색칠하기
BYTE * Laimagedata(BITMAPINFO *Labinfo, BYTE * Laimage,int first)
{
int ict=0; //라벨링 갯수
int ixt;
int iyt;
LONG Lbwidth4; // 가로 길이
LONG Lwidth;
LONG Lheight;
// int stt;//시작주소
// int rutaddr=0;
// int selc=0;
Lwidth=Labinfo->bmiHeader.biWidth;
Lheight=Labinfo->bmiHeader.biHeight;
Lbwidth4=((Lbwidth4+3)>>2)<<2;
Lbwidth4=Lbwidth4*3;
for(iyt=0;iyt<Lheight;++iyt)
{
for(ixt=0;ixt<Lwidth;++ixt)
{
if(Laimage[iyt*Lbwidth4+ixt*3]!=0) //파란색이 0일때 (즉 빨간색)
{
Laimage[iyt*Lbwidth4+ixt*3]=255;
}
else
{
while(1)
{
ict=0;
if(Laimage[(iyt-1)*Lbwidth4+(ixt-1)*3]==0) //왼쪽밑
{
ixt--;
iyt--;
Laimage[(iyt)*Lbwidth4+(ixt)*3+2]=255;
ict++;
}
else if(Laimage[(iyt-1)*Lbwidth4+(ixt*3)]==0) //밑
{
iyt--;
Laimage[(iyt)*Lbwidth4+(ixt)*3+2]=255;
ict++;
}
else if(Laimage[(iyt-1)*Lbwidth4+(ixt+1)*3]==0) //오른쪽밑
{
ixt++;
iyt--;
Laimage[(iyt)*Lbwidth4+(ixt)*3+2]=255;
ict++;
}
else if(Laimage[(iyt)*Lbwidth4+(ixt+1)*3]==0) //오른쪽
{
ixt++;
Laimage[(iyt)*Lbwidth4+(ixt)*3+2]=255;
ict++;
}
else if(Laimage[(iyt+1)*Lbwidth4+(ixt+1)*3]==0) //오른쪽 위
{
ixt++;
iyt++;
Laimage[(iyt)*Lbwidth4+(ixt)*3+2]=255;
ict++;
}
else if(Laimage[(iyt+1)*Lbwidth4+(ixt)*3]==0) //위
{
iyt++;
Laimage[(iyt)*Lbwidth4+(ixt)*3+2]=255;
ict++;
}
else if(Laimage[(iyt+1)*Lbwidth4+(ixt-1)*3]==0) //왼쪽위
{
ixt--;
iyt++;
Laimage[(iyt)*Lbwidth4+(ixt)*3+2]=255;
ict++;
}
else if(Laimage[(iyt)*Lbwidth4+(ixt-1)*3]==0) //왼쪽
{
ixt--;
Laimage[(iyt)*Lbwidth4+(ixt)*3+2]=255;
ict++;
}
if(ict==0)
{
break;
}
}
}
}
}
return Laimage;
}
BOOL OnInitDialog(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
Hwndmain = hDlg;
hdc = GetDC(hDlg);
//캡쳐된 비디오 영상을 보여줄 윈도우 생성
hVFW = capCreateCaptureWindow(TEXT("VFW"), WS_CHILD|WS_VISIBLE,0,0,1,1,hDlg,0);
//(캡쳐될 윈도우 이름 생성, 윈도우 스타일, 시작점x좌표, 시작점y좌표, 넓이, 높이, 부모윈도우 핸들, window ID)
capDriverConnect(hVFW,0); //캡쳐윈도우와 드라이버 연결(캡쳐윈도우 핸들, 캡쳐드라이버의 인덱스)
capPreviewRate(hVFW,1); //프리뷰모드에서 보여질 프레임 속도(rate)설정
capPreview(hVFW,TRUE); //프리뷰모드 사용여부
capGetVideoFormat(hVFW, &Bm, sizeof(Bm)); //영상복사를 위해 사용, 포맷의 크기를 바이트로 전환
//(캡쳐윈도우 핸들, bitmapinfo 구조체 포인터, 구조체 크기)
hBit = CreateCompatibleBitmap(hdc, Bm.bmiHeader.biWidth, Bm.bmiHeader.biHeight);
//DC에 호환하는 비트맵을 생성하여 반환(dc의 핸들, 비트맵의가로 사이즈, 비트맵의 세로 사이즈)
SetDlgItemText(hDlg, ID_Size,"1.0");
// 비디오 프레임이 캡쳐되었을 경우 처리하기 위한 함수를 설정해주는 매크로 함수
if(capSetCallbackOnFrame(hVFW, FramInfo)==FALSE)
//(캡쳐 윈도우 핸들, 콜백함수에 의해 호출되는 함수 포인터)
{
return FALSE;
}
ReleaseDC(hDlg, hdc);
return 0;
}
BOOL OnDlgCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
switch(LOWORD(wParam))
{
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
break;
case ID_END:
EndDialog(hDlg,IDCANCEL);
break;
case ID_OK:
GetDlgItemText(hDlg,ID_Size,str,10); // 에디트박스의 값을 문자로 받아온다
fnum = atof(str);
list(hDlg);
SetRect(&rt,380,50,720,300);
InvalidateRect(hDlg,&rt,TRUE);
break;
case ID_PSS:
if(a==0)
{
MessageBox(hDlg, TEXT("에러라고 "), TEXT("사진 없다"), MB_OK);
return 0;
}
idps = 1;
break;
}
return TRUE;
}
void list(HWND hDlg)
{
if(IsDlgButtonChecked(hDlg,ID_main)==BST_CHECKED)
{
a=1;
}
if(IsDlgButtonChecked(hDlg,ID_GRAY)==BST_CHECKED)
{
a=2;
}
if(IsDlgButtonChecked(hDlg,ID_BIRNARY)==BST_CHECKED)
{
a=3;
}
if(IsDlgButtonChecked(hDlg,ID_HIS)==BST_CHECKED)
{
a=4;
SetDlgItemText(hDlg, ID_Size,"1.0");
fnum = 1.0;
}
if(IsDlgButtonChecked(hDlg,ID_R)==BST_CHECKED)
{
a=5;
SetDlgItemText(hDlg, ID_Size,"1.0");
fnum = 1.0;
}
if(IsDlgButtonChecked(hDlg,ID_G)==BST_CHECKED)
{
a=6;
SetDlgItemText(hDlg, ID_Size,"1.0");
fnum = 1.0;
}
if(IsDlgButtonChecked(hDlg,ID_B)==BST_CHECKED)
{
a=7;
SetDlgItemText(hDlg, ID_Size,"1.0");
fnum = 1.0;
}
if(IsDlgButtonChecked(hDlg,ID_RABEL)==BST_CHECKED)
{
a=8;
SetDlgItemText(hDlg, ID_Size,"1.0");
fnum = 1.0;
}
if(IsDlgButtonChecked(hDlg,ID_Rev)==BST_CHECKED)
{
iSum = 1;
}
else
{
iSum = 0;
}
}
BOOL BoolPaint(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
hdc = BeginPaint(hDlg,&ps);
EndPaint(hDlg,&ps);
return TRUE;
}
BOOL CALLBACK FramInfo(HWND hVFW, LPVIDEOHDR VideoHdr)
{
//HDC hdc;
HDC hMemDC; //메모리DC
HBITMAP OldBitmap;
LONG NOT_width;
LONG NOT_height;
int checking=1;
int firstaddr;
capPreviewRate(hVFW, 0); //프리뷰모드에서 보여질 프레임 속도를 0으로 설정함
LONG chwidth,chheight;
chwidth = Bm.bmiHeader.biWidth *ZOOMSIZE;
chheight = Bm.bmiHeader.biHeight *ZOOMSIZE;
hdc=GetDC(Hwndmain);
hMemDC = CreateCompatibleDC(hdc);
OldBitmap = (HBITMAP)SelectObject(hMemDC,hBit);
switch(a)
{
case 1:
binfo = ChangeBitmapInfo(chwidth,chheight,&Bm,24);
imageData = ReSizeImage(binfo,&Bm,VideoHdr->lpData,24);
checking = 3;
break;
case 2:
binfo = ChangeBitmapInfo(chwidth,chheight,&Bm,8);
imageData = ReSizeImage(binfo,&Bm,VideoHdr->lpData,8);
checking = 1;
break;
case 3:
binfo = ChangeBitmapInfo(chwidth,chheight,&Bm,8);
imageData = HisBir(binfo,&Bm,VideoHdr->lpData,a,fnum);//이진화,히스토그램
checking = 1;
break;
case 4:
binfo = ChangeBitmapInfo(chwidth,chheight,&Bm,8);
imageData = HisBir(binfo,&Bm,VideoHdr->lpData,a,fnum);//이진화,히스토그램
break;
case 5:
binfo = ChangeBitmapInfo(chwidth,chheight,&Bm,24);
imageData = YCrCbData(binfo,&Bm,VideoHdr->lpData,a,fnum);
break;
case 6:
binfo = ChangeBitmapInfo(chwidth,chheight,&Bm,24);
imageData = YCrCbData(binfo,&Bm,VideoHdr->lpData,a,fnum);
break;
case 7:
binfo = ChangeBitmapInfo(chwidth,chheight,&Bm,24);
imageData = YCrCbData(binfo,&Bm,VideoHdr->lpData,a,fnum);
break;
case 8: // 라벨링 적색 찾기
binfo = ChangeBitmapInfo(chwidth,chheight,&Bm,24);
imageData = YCrCbData(binfo,&Bm,VideoHdr->lpData,5,fnum);
//시작주소
firstaddr=Labeling(imageData,binfo,255);
//찍기
imageData = Laimagedata(binfo,imageData,firstaddr);
}
if((iSum == 1) && (a!=4))
{
RevData = (BYTE *)malloc(Bm.bmiHeader.biSizeImage);
width4 = binfo->bmiHeader.biWidth*checking;
width4 = WIDTH4(width4);
NOT_height = binfo->bmiHeader.biHeight;
NOT_width = binfo->bmiHeader.biWidth;
for(height = 0;height < NOT_height;height++)
{
for(width = 0;width < NOT_width ;width++)
{
RevData[(height*(width4))+width*checking+0] = imageData[((NOT_height-height)*(width4))+(NOT_width-width)*checking+0];
RevData[(height*(width4))+width*checking+1] = imageData[((NOT_height-height)*(width4))+(NOT_width-width)*checking+1];
RevData[(height*(width4))+width*checking+2] = imageData[((NOT_height-height)*(width4))+(NOT_width-width)*checking+2];
}
}
}
height = Bm.bmiHeader.biHeight; //캡쳐영상의 세로
width = Bm.bmiHeader.biWidth; //캡쳐영상의 가로
SetDIBitsToDevice(hdc,50,50,width,height,NULL,NULL,NULL,height,VideoHdr->lpData,&Bm,DIB_RGB_COLORS);
if(a != 0)
{
if(a == 4)
{
SetDIBitsToDevice(hdc,width+110,50,256,height,NULL,NULL,NULL,height,imageData,binfo,DIB_RGB_COLORS);
}
else
{
if(iSum == 1)
{
SetDIBitsToDevice(hdc,width+73,50,width,height,NULL,NULL,NULL,height,RevData,binfo,DIB_RGB_COLORS);
}
else
{
SetDIBitsToDevice(hdc,width+73,50,width,height,NULL,NULL,NULL,height,imageData,binfo,DIB_RGB_COLORS);
}
}
if(a == 8)
{
SetDIBitsToDevice(hdc,width+73,50,width,height,NULL,NULL,NULL,height,imageData,binfo,DIB_RGB_COLORS);
}
}
if(iSum == 1)
{
CapTure(binfo,RevData);
}
else
{
CapTure(binfo,imageData);
}
SelectObject(hMemDC, OldBitmap);
DeleteDC(hMemDC);
ReleaseDC(Hwndmain, hdc);
capPreviewRate(hVFW,1); //다음 프레임에는 다시 영상처리를 시작 하게 된다.
if(RevData!=NULL)
{
free(RevData);
RevData =NULL;
}
return 0;
}
void CapTure(BITMAPINFO *binfo,const BYTE* imageData)
{
BITMAPFILEHEADER *bmfh;
FILE *file;
if((idps == 1)&&(a != 0))
{
bmfh=(BITMAPFILEHEADER *)malloc(sizeof(BITMAPFILEHEADER));
bmfh->bfType = 0x4D42;
bmfh->bfReserved1 = 0;
bmfh->bfReserved2 = 0;
bmfh->bfSize = binfo->bmiHeader.biSizeImage+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
if((a >= 2)&&(a <= 4))
{
bmfh->bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256;
}
else
{
bmfh->bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
}
file = fopen("test.bmp","wb");
fwrite(bmfh,sizeof(BITMAPFILEHEADER),1,file);
if((a >= 2)&&(a <= 4))
{
fwrite(binfo,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256,1,file);
}
else
{
fwrite(binfo,sizeof(BITMAPINFOHEADER),1,file);
}
fwrite(imageData,sizeof(BYTE),binfo->bmiHeader.biSizeImage,file);
if(bmfh !=NULL)
{
free(bmfh);
bmfh =NULL;
}
fclose(file);
idps = 0;
}
}
'2010년 > 6월' 카테고리의 다른 글
6월30일 JAVA(static의 메소드) (0) | 2010.06.30 |
---|---|
6월29일 자바(객체와 클래스,소문자대문자,j->X로) (0) | 2010.06.29 |
6월 25일 자바(오버라이딩 생성자 tostring) (0) | 2010.06.25 |
6월24일 자바(클래스) 영상처리(프로젝트) (0) | 2010.06.24 |
6월23일 영상처리(프로젝트시작 ) RFID(Scanner) (0) | 2010.06.23 |