亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mainframe.cpp

?? 基于IEEE 1394總線的圖像采集及處理系統軟件技術研究
?? CPP
字號:
// MainFrame.cpp : implementation file
//

#include "stdafx.h"
#include "test1394show.h"
#include "MainFrame.h"
#include "DisplayDlg.h"
#include "DeviceDlg.h"
#include "Configure1394Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define WINDOW_WIDTH    640
#define WINDOW_HEIGHT   480
#define SCREEN_BPP      8

#define BLOCKSIZE      1024//2048			//當總線速度為400Kb/S,每個異步包的有效數據塊大小
#define IMAGESIZE      101376//307200		//圖像字節數


/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

CMainFrame::CMainFrame()
{
	LoadFrame(IDR_MAINFRAME);
	m_bWindowed = TRUE;
	m_nDisplayOrSave = 0;
	m_bStop = FALSE;
	m_bOpen = FALSE;
	char cTemp[200];
	::GetCurrentDirectory(200,cTemp);
	m_strImagePath = cTemp;
	m_strImagePath += "\\";	
	m_strImageName = "image";
	m_strImageExt = "raw";
}

CMainFrame::~CMainFrame()
{
	FreeDirectDraw();
}


BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_COMMAND(ID_START, OnStart)
	ON_COMMAND(ID_STOP, OnStop)
	ON_UPDATE_COMMAND_UI(ID_START, OnUpdateStart)
	ON_UPDATE_COMMAND_UI(ID_STOP, OnUpdateStop)
	ON_COMMAND(ID_CONFIGURE_1394, OnConfigure1394)
	ON_COMMAND(ID_CONFIGURE_DISPLAY, OnConfigureDisplay)
	ON_COMMAND(ID_GET_1394DEVICE, OnGet1394device)
	ON_WM_CREATE()
	ON_COMMAND(ID_FULL_SCREEN, OnFullScreen)
	ON_WM_CHAR()
	ON_WM_MOVE()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
//圖像大小已經改為640*480,2004.2.11,王沛改
void CMainFrame::OnStart() 
{
	//顯示已知的圖像序列
	if( m_nDisplayOrSave == 1 )
	{
		if( m_ImageNameExtList.IsEmpty() )
		{
			MessageBox("請設定需要顯示的圖像序列!");
			return;
		}
		CString strAllName,str;
		POSITION pos = m_ImageNameExtList.GetHeadPosition();
		for (int i=0;i < m_ImageNameExtList.GetCount();i++)
		{
		   if( TRUE == m_bStop )
			   break;
		   str = m_ImageNameExtList.GetNext(pos);
		   strAllName = m_strImagePath + str;
		   if(FAILED( m_pDisplay->CreateSurfaceFromFile(&m_pLogoSurface,strAllName.GetBuffer(strAllName.GetLength()),0,0,m_strImageExt)))
			{
				MessageBox("顯示圖像失敗");
				return;
			}
			DisplayFrame();
			SAFE_DELETE( m_pLogoSurface );
		}
	}
	//采集圖像并顯示、存儲
	//開始從1394設備讀取數據并顯示
	//讀取數據
	//顯示
	if( m_nDisplayOrSave == 0 )
	{
		/*
		time_t ltimeLa;
		_tzset();
		time( &ltimeLa );
		*/
		//先判斷1394設備是否打開
		if( !m_bOpen )   
			return;
		//得到設定的將要保存的圖像的路徑、名稱、擴展名(文件類型)
		//設置循環,每次得到一幀圖像,存儲并顯示
		DWORD Status;
		//定義ASYNC_READ
		ASYNC_READ      asyncRead;			
		//自動得到Generation次數
		asyncRead.bGetGeneration = TRUE;			
		asyncRead.ulGeneration = 0;
		//地址
		asyncRead.DestinationAddress.IA_Destination_Offset.Off_High = 0;
		asyncRead.DestinationAddress.IA_Destination_Offset.Off_Low = 0;
		//讀取的字節數
		asyncRead.nNumberOfBytesToRead = BLOCKSIZE;
		asyncRead.nBlockSize = 0;
		asyncRead.fulFlags = 0;
		/*
		asyncRead.fulFlags  |= ASYNC_FLAGS_NONINCREMENTING;
		asyncRead.fulFlags |= ASYNC_FLAGS_PING;			
		*/
		//開辟傳給驅動的存儲空間
		ULONG           ulBufferSize;
		PASYNC_READ     pAsyncRead = NULL;
		
		ulBufferSize = sizeof(ASYNC_READ) + asyncRead.nNumberOfBytesToRead;//字節為單位
		pAsyncRead = (PASYNC_READ)LocalAlloc(LPTR, ulBufferSize);
		FillMemory(pAsyncRead, ulBufferSize, 0);//開辟的每一個字節都為零
		*pAsyncRead = asyncRead;

		int nFrame;nFrame = 0;
		int nTime,nRow,nLine;
		char byteFrame[IMAGESIZE];//存儲采集的一幀圖像
		ZeroMemory(byteFrame,IMAGESIZE);
//		ZeroMemory(byteFrame,35);
		while( nFrame < m_nFrameNumber )//采集的幀數
		{
			if( TRUE == m_bStop )
			   break;
			nRow = nLine = 0;
			//采集一幀的數據,然后存儲到文件,并將裸圖轉換為位圖
			for( nTime = 0;nTime < (IMAGESIZE/BLOCKSIZE-1);nTime++ )
			//for( nTime = 0;nTime < IMAGESIZE/BLOCKSIZE;nTime++ )//640*480 = 2048*150 = 307200
			{
				Status = g_CurrentDev.AsyncRead(pAsyncRead,ulBufferSize);//調驅動,讀BLOCKSIZE個字節

				if ( Status == STATUS_SUCCESS ) 
				{
					//輸出讀入的數據到byteFrame
					CopyMemory(&byteFrame[nTime*(BLOCKSIZE-4)],pAsyncRead->Data,(BLOCKSIZE-4));//hyb 改,為了去除黑點,只取前1020字節,04-11-08
					//CopyMemory(&byteFrame[nTime*BLOCKSIZE],pAsyncRead->Data,BLOCKSIZE);//每次拷貝BLOCKSIZE字節,直到考完BLOCKSIZE*150字節
	 			}
				else 
				{
					Status = GetLastError();
				//	PrintOut(NL"AsyncRead failed"NL);
				//	PrintError(Status);
					MessageBox("AsyncRead failed");
					break;
				}
			}
			if( NULL != pAsyncRead )
				LocalFree(pAsyncRead);
			//保存byteFrame中的一幀數據到文件中
			SaveImageToFile(byteFrame,nFrame);
			//在內存中創建圖像
			if(FAILED( m_pDisplay->CreateSurfaceFromImage(&m_pLogoSurface,byteFrame,0,0) ))
			{
				MessageBox("顯示圖像失敗");
					return;
			}
			//顯示內存中的一幀圖像
			DisplayFrame();
			SAFE_DELETE( m_pLogoSurface );
			nFrame++;
		}
		// close device
		g_CurrentDev.Close();
	//	MessageBox("采集圖像結束!");
	}
}

void CMainFrame::OnStop() 
{
	//停止讀取數據和顯示
	m_bStop = TRUE;
}

void CMainFrame::OnUpdateStart(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

void CMainFrame::OnUpdateStop(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}


//對于1394設備的屬性和顯示屬性,在程序啟動時默認設置,用戶可在Setting菜單下修改
void CMainFrame::OnConfigure1394() 
{
	//獲得和設置1394設備的屬性
	CConfigure1394Dlg dlg;
	if( IDOK != dlg.DoModal() )
		return;
	else
	{
	}
}

void CMainFrame::OnConfigureDisplay() 
{
	//獲得和設置顯示屬性
	CDisplayDlg DisplayDlg;
	if( IDOK != DisplayDlg.DoModal() )
		return;
	else
	{
		m_nDisplayOrSave = DisplayDlg.m_nDisplayOrSave;//顯示或存儲
		m_strImagePath = DisplayDlg.m_strImagePath;//路徑
		m_strImageName = DisplayDlg.m_strImageName;//圖像名稱
		m_strImageExt = DisplayDlg.m_strImageExt;//擴展名
		if( m_nDisplayOrSave == 1 )
		{
			//得到預顯示的圖像的名稱
			m_ImageNameExtList.RemoveAll();		
			CString str;
			POSITION pos = DisplayDlg.m_FileNameExtList.GetHeadPosition();
			for (int i=0;i < DisplayDlg.m_FileNameExtList.GetCount();i++)
			{
			   str = DisplayDlg.m_FileNameExtList.GetNext(pos);
			   m_ImageNameExtList.AddTail(str);
			}
		}		
	}	
}

HRESULT CMainFrame::InitDirectDraw()
{
	LPDIRECTDRAWPALETTE pDDPal = NULL; 
    HRESULT	hr;
//    int     iSprite;

	//創建DirectDraw對象,窗口模式
    m_pDisplay = new C1394Display();
	HWND hWnd = m_hWnd;
	if( m_bWindowed )
	{
		if( FAILED( hr = m_pDisplay->CreateWindowedDisplay( hWnd, WINDOW_WIDTH, WINDOW_HEIGHT ) ) )
		{
			MessageBox( "建立DirectDraw對象失敗" );
			return hr;
		}
	}
	else if( FAILED( hr = m_pDisplay->CreateFullScreenDisplay( hWnd, WINDOW_WIDTH, WINDOW_HEIGHT, SCREEN_BPP ) ) )
	{
        MessageBox( "建立DirectDraw對象失敗" );
		return hr;
	}
/*    //創建調色板
    // Create and set the palette when in palettized color
    if( FAILED( hr = m_pDisplay->CreatePaletteFromBitmap( &pDDPal, MAKEINTRESOURCE( IDB_DIRECTX ) ) ) )
        return hr;

    m_pDisplay->SetPalette( pDDPal );

    SAFE_RELEASE( pDDPal );
*/	//創建表面
    // Create a surface, and draw a bitmap resource on it.  
/*    if( FAILED( hr = m_pDisplay->CreateSurfaceFromBitmap( &m_pLogoSurface, MAKEINTRESOURCE( IDB_DIRECTX ), 
                                                          SPRITE_DIAMETER, SPRITE_DIAMETER ) ) )
        return hr;
*/
//	if (FAILED(hr = m_pDisplay->CreateSurfaceFromBitmap
  //                 (&m_pLogoSurface,"F:\\wx\\Motion1.bmp",0,0)))
/*
    // Create a surface, and draw text to it.  
    if( FAILED( hr = m_pDisplay->CreateSurfaceFromText( &m_pTextSurface, NULL, HELPTEXT, 
                                                        RGB(0,0,0), RGB(255, 255, 0) ) ) )
        return hr;
*/
    // Set the color key for the logo sprite to black
//    if( FAILED( hr = m_pLogoSurface->SetColorKey( 0 ) ) )
//        return hr;
	return S_OK;
}

void CMainFrame::FreeDirectDraw()
{
//	SAFE_DELETE( m_pLogoSurface );
/*	for( int i=0;i<10;i++ )
		SAFE_DELETE( m_pLogoSurface );
*/
//	SAFE_DELETE( m_pTextSurface );
    SAFE_DELETE( m_pDisplay );
}

void CMainFrame::OnGet1394device() 
{
	// 查詢所有的1394設備,并打開其中一個
	CDeviceDlg dlg;
	if( IDOK != dlg.DoModal() )
		return;
	else
	{
		m_nFrameNumber = dlg.m_nFrameNumber;
		m_bOpen = dlg.m_bOpen;
	}
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	InitDirectDraw();/*
	//
	CString strName = "F:\\wx\\計算機視覺圖片資料1\\\\Motion";
	CString strBack = ".bmp";
	CString strNum,strAllName;
	for( int i=0;i<10;i++ )
	{
		strNum.Empty();
		strNum.Format("%d",i+1);
		strAllName = strName + strNum + strBack;
		if(FAILED( m_pDisplay->CreateSurfaceFromFile(&m_pLogoSurface[i],strAllName.GetBuffer(strAllName.GetLength()),0,0)))
		{
			MessageBox("顯示圖像失敗");
			return -1;
		}
	//	DisplayFrame();
//		SAFE_DELETE( m_pLogoSurface );
	}
	//*/
	
	return 0;
}

HRESULT CMainFrame::DisplayFrame()
{
	HRESULT hr;

    // Fill the back buffer with black, ignoring errors until the flip
    m_pDisplay->Clear( 0 );//清空 DisplaySurface

    // Blt the help text on the backbuffer, ignoring errors until the flip
//    m_pDisplay->Blt( 10, 10, m_pTextSurface, NULL );//用 Blt() 描繪圖象

    // Blt all the sprites onto the back buffer using color keying,
    // ignoring errors until the last blt. Note that all of these sprites 
    // use the same DirectDraw surface.
    m_pDisplay->Blt( 0, 0, m_pLogoSurface, NULL );
    
    // We are in windowed mode so perform a blt from the backbuffer 
    // to the primary, returning any errors like DDERR_SURFACELOST
    if( FAILED( hr = m_pDisplay->Present() ) )//用 Present() 換幀
        return hr;

    return S_OK;	
}

HRESULT CMainFrame::DisplayFrame(int i)
{
	HRESULT hr;

    // Fill the back buffer with black, ignoring errors until the flip
 //   m_pDisplay->Clear( 0 );//清空 DisplaySurface

    // Blt the help text on the backbuffer, ignoring errors until the flip
//    m_pDisplay->Blt( 10, 10, m_pTextSurface, NULL );//用 Blt() 描繪圖象

    // Blt all the sprites onto the back buffer using color keying,
    // ignoring errors until the last blt. Note that all of these sprites 
    // use the same DirectDraw surface.
    m_pDisplay->Blt( 0, 0, m_pLogoSurfaceMul[i], NULL );
    
    // We are in windowed mode so perform a blt from the backbuffer 
    // to the primary, returning any errors like DDERR_SURFACELOST
    if( FAILED( hr = m_pDisplay->Present() ) )//用 Present() 換幀
        return hr;

    return S_OK;	
}

void CMainFrame::OnFullScreen() 
{
	
}

void CMainFrame::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if( nChar== VK_ESCAPE )      //判斷是否按下 Esc 鍵
		PostMessage(WM_CLOSE );  //傳送WM_CLOSE信息
	if( nChar== VK_SPACE )      //判斷是否按下 空格 鍵
		OnStart();
	CFrameWnd::OnChar(nChar, nRepCnt, nFlags);
}

void CMainFrame::OnMove(int x, int y) 
{
	CFrameWnd::OnMove(x, y);
	m_pDisplay->UpdateBounds();
}

void CMainFrame::SaveImageToFile(char *byteFrame, int n)
{
	//保存圖像數據到裸圖文件	
    //構造文件名為 *00.raw、*01.raw...... 
	CString strFile,strTemp;
	strTemp.Format("%d",n);
	int nLen;
	nLen = strTemp.GetLength();
	if( 1== nLen )
		strTemp = "00" + strTemp;
	if( 2== nLen )
		strTemp = "0" + strTemp;
	strFile = m_strImagePath + m_strImageName + strTemp + ".raw";
	
	HANDLE hf;                 // file handle     
    hf = CreateFile(strFile, 
                   GENERIC_READ | GENERIC_WRITE, 
                   (DWORD) 0, 
                    NULL, 
                   CREATE_ALWAYS, 
                   FILE_ATTRIBUTE_NORMAL, 
                   (HANDLE) NULL); 
    if (hf == INVALID_HANDLE_VALUE) 
	{
		DWORD dw = GetLastError();
	}
    // Copy the BITMAPFILEHEADER into the .BMP file.
	DWORD dwTmp;
    //if (!WriteFile(hf, byteFrame, IMAGESIZE, (LPDWORD) &dwTmp,  NULL)) 
	if (!WriteFile(hf, byteFrame, 99960, (LPDWORD) &dwTmp,  NULL))//1020*98=99960
    {
		DWORD dw = GetLastError();
    }


    // Close the .BMP file. 
     if (!CloseHandle(hf)) 
	 {
		 DWORD dw = GetLastError();
	 }
}

void CMainFrame::OnDestroy() 
{
	CFrameWnd::OnDestroy();
	
	// close device
	g_CurrentDev.Close();	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色大人视频| 日韩欧美区一区二| 日本人妖一区二区| 国产精品久久久久久久久果冻传媒| 欧美在线看片a免费观看| 国产酒店精品激情| 午夜私人影院久久久久| 国产精品久久久久一区二区三区共 | 91影院在线观看| 麻豆精品一区二区| 亚洲综合在线第一页| 中文字幕va一区二区三区| 91精品午夜视频| 日本韩国欧美在线| 菠萝蜜视频在线观看一区| 九九九精品视频| 亚洲成人自拍网| 亚洲免费av在线| 国产精品美女久久久久aⅴ| 精品国产一区二区国模嫣然| 欧美日韩高清一区二区三区| 99久久精品一区| 成人美女视频在线观看18| 国产最新精品免费| 另类综合日韩欧美亚洲| 日韩av午夜在线观看| 国产乱子伦视频一区二区三区| 亚洲成人动漫精品| 亚洲精品视频免费看| 久久久91精品国产一区二区精品 | 欧美高清一级片在线观看| 欧美一级理论片| 欧美夫妻性生活| 欧美日本免费一区二区三区| 一本色道综合亚洲| 91丝袜美女网| 色哟哟日韩精品| 国产99久久久国产精品免费看| 久久99日本精品| 久久爱www久久做| 久久er99精品| 韩国欧美国产1区| 国产伦理精品不卡| 国产伦精品一区二区三区免费 | 亚洲乱码精品一二三四区日韩在线| 中文字幕在线不卡一区| 中日韩免费视频中文字幕| 国产精品欧美极品| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产精品免费久久| 亚洲欧洲在线观看av| 亚洲人妖av一区二区| ㊣最新国产の精品bt伙计久久| 成人免费在线视频| 日韩美女视频19| 一区二区高清在线| 爽爽淫人综合网网站| 麻豆精品在线看| 丁香天五香天堂综合| 99免费精品视频| 欧美日韩激情一区二区| 日韩欧美在线1卡| 国产亚洲综合在线| 亚洲免费在线播放| 日韩激情av在线| 国产精品综合在线视频| 91丝袜美腿高跟国产极品老师 | 国产日韩成人精品| 1024亚洲合集| 青青草成人在线观看| 国产精品一区二区x88av| 91丨九色丨蝌蚪富婆spa| 欧美日韩免费视频| 久久中文字幕电影| 综合久久久久久久| 男女激情视频一区| av不卡免费电影| 日韩视频永久免费| 中文字幕在线不卡| 日本美女一区二区三区视频| 国产激情一区二区三区| 色丁香久综合在线久综合在线观看 | 久久精品国产免费| 99久久精品免费看国产免费软件| 欧美精品一二三| 国产欧美日韩一区二区三区在线观看| 一区二区三区鲁丝不卡| 久草中文综合在线| 欧美亚洲日本国产| 久久久激情视频| 亚洲成人动漫在线免费观看| 国产精品12区| 欧美日韩免费高清一区色橹橹| 精品国产乱码91久久久久久网站| 亚洲免费观看高清在线观看| 久久99国产乱子伦精品免费| 色综合久久综合网| 精品成人一区二区| 午夜影院在线观看欧美| 成人高清免费观看| 欧美一级日韩免费不卡| 亚洲人成网站在线| 国产不卡视频一区| 精品国产乱码久久久久久老虎| 亚洲国产美国国产综合一区二区| 粉嫩高潮美女一区二区三区| 日韩一区二区电影网| 亚洲人成亚洲人成在线观看图片 | 日韩欧美一区二区视频| 一二三四社区欧美黄| 成人精品国产一区二区4080| 日韩午夜在线影院| 亚洲电影中文字幕在线观看| 91视频在线观看| 日本一区二区三区高清不卡 | 国产成人午夜99999| 欧美一区二区三区不卡| 亚洲mv在线观看| 色一区在线观看| 亚洲色欲色欲www| 99在线精品视频| 中文在线资源观看网站视频免费不卡 | 精品国产91乱码一区二区三区 | 亚洲男人的天堂网| 成人免费观看视频| 久久亚洲春色中文字幕久久久| 蜜桃视频一区二区| 欧美日韩一区二区三区在线看| 一区二区三区中文字幕精品精品| 成人av中文字幕| 国产精品网曝门| 丁香另类激情小说| 国产精品久久毛片av大全日韩| 国产一区二三区| 国产亚洲一区字幕| 国产麻豆日韩欧美久久| 久久精品一区四区| 国产高清在线观看免费不卡| 久久九九久精品国产免费直播| 国产高清无密码一区二区三区| 国产视频一区二区在线观看| 国产ts人妖一区二区| 国产精品美女一区二区三区 | 欧美美女一区二区| 日本麻豆一区二区三区视频| 日韩久久精品一区| 国产在线一区二区| 国产亚洲一二三区| 99re热视频这里只精品| 一区二区三区在线视频观看| 精品视频一区二区不卡| 青青草国产成人99久久| 欧美成人精品高清在线播放| 国产在线不卡视频| 国产精品沙发午睡系列990531| 91天堂素人约啪| 午夜av区久久| 精品久久久久一区| 成人免费毛片嘿嘿连载视频| 亚洲欧美日韩在线| 欧美日韩国产系列| 九色综合国产一区二区三区| 欧美韩国日本不卡| 色天使色偷偷av一区二区| 日韩制服丝袜先锋影音| 久久综合九色欧美综合狠狠 | 26uuu国产日韩综合| 不卡一区二区中文字幕| 亚洲在线免费播放| 精品少妇一区二区三区在线视频 | 欧美日韩高清一区二区不卡| 久久不见久久见免费视频1| 中文字幕欧美区| 欧美色综合天天久久综合精品| 美国一区二区三区在线播放| 中文字幕乱码亚洲精品一区| 欧美在线一二三| 黄网站免费久久| 亚洲视频一区二区在线| 91精品国产手机| 波多野结衣一区二区三区| 日本美女一区二区三区视频| 国产精品网站在线观看| 欧美丰满美乳xxx高潮www| 成人综合在线视频| 日本在线不卡视频| 综合自拍亚洲综合图不卡区| 日韩欧美中文字幕制服| 色综合久久久久综合| 国产自产高清不卡| 一个色在线综合| 国产精品入口麻豆原神| 日韩视频在线一区二区| 欧洲国内综合视频| 国产精品一级在线| 天堂久久久久va久久久久| 国产精品每日更新在线播放网址| 91.com视频| 91激情五月电影| 国产成人免费在线视频|