📄 imageopendlg.cpp
字号:
// IMageOpenDlg.cpp : implementation file
//
#include "stdafx.h"
#include "IMageOpen.h"
#include "IMageOpenDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define IOCTL_CAM_CONT CTL_CODE( FILE_DEVICE_VIDEO, 4, METHOD_NEITHER,FILE_ANY_ACCESS)
#define IOCTL_CAM_STOP CTL_CODE( FILE_DEVICE_VIDEO, 5, METHOD_NEITHER,FILE_ANY_ACCESS)
#define CAM_IOCTL_SAMSUNG_CAM_PR 0x522
#define QCIF_XSIZE (600)
#define QCIF_YSIZE (400)
/////////////////////////////////////////////////////////////////////////////
// CIMageOpenDlg dialog
CIMageOpenDlg::CIMageOpenDlg(CWnd* pParent /*=NULL*/)
: CDialog(CIMageOpenDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CIMageOpenDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CIMageOpenDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIMageOpenDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CIMageOpenDlg, CDialog)
//{{AFX_MSG_MAP(CIMageOpenDlg)
ON_WM_HELPINFO()
ON_BN_CLICKED(IDC_BUTTON1, OnOpenImage)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BUTTON9, OnButton9File)
ON_BN_CLICKED(IDC_Exit, OnExit)
ON_BN_CLICKED(IDC_BUTTON10, OnOpenCamera)
ON_BN_CLICKED(IDC_BUTTON11, OnCatchPicture)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIMageOpenDlg message handlers
BOOL CIMageOpenDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
this->ShowWindow(SW_SHOWMAXIMIZED);
GetDlgItem(IDC_BUTTON6)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON7)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON8)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_HIDE);
m_hFile=INVALID_HANDLE_VALUE;
m_pDib = NULL;
m_pDibbits = NULL;
dwDibsize=0;
return TRUE; // return TRUE unless you set the focus to a control
}
void CIMageOpenDlg::OnHelpInfo()
{
// TODO: implement help here
MessageBox(_T("Help"));
}
void CIMageOpenDlg::OnOpenImage()
{
// TODO: Add your control notification handler code here
TCHAR szFilters[] = _T("BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*||");
CFileDialog opendlg(TRUE, _T("bmp"), _T("*.bmp"),OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters, NULL);
CString pathName;
int nRet;
if (nRet=opendlg.DoModal() == IDOK)
{
pathName = opendlg.GetPathName();
CFile f;
CFileException ex;
BITMAPFILEHEADER bmf;
if(m_pDib != NULL)
{
delete [] m_pDib;
m_pDib = NULL;
m_pDibbits = NULL;
}
Invalidate();
if( !f.Open( pathName, CFile::modeRead, &ex ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << ex.m_cause << "\n";
#endif
}
dwDibsize = f.GetLength();
f.Read(&bmf, sizeof(BITMAPFILEHEADER));
dwDibsize -= sizeof(BITMAPFILEHEADER);
m_pDib = new BYTE[dwDibsize];
f.Read(m_pDib, dwDibsize);
LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)m_pDib;
nNumColors = 0;
if(lpbi->biBitCount != 24)
nNumColors = 1 << lpbi->biBitCount;
m_pDibbits = m_pDib + sizeof(BITMAPINFOHEADER) + nNumColors*sizeof(RGBQUAD);
f.Close();
}
GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_HIDE);
CDialog::OnPaint(); //重绘,显示图片
}
void CIMageOpenDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
if(m_pDib != NULL)
{
LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)m_pDib;
LPBYTE lpDibBits = m_pDibbits;
CDC* pDC=GetDC();
CRect rect;
GetClientRect(&rect);
StretchDIBits(pDC->m_hDC,
(int)((rect.Width()-lpbi->biWidth)/2),
(int)((rect.Height()-lpbi->biHeight-20)/2),
lpbi->biWidth,
lpbi->biHeight,
0, 0, lpbi->biWidth, lpbi->biHeight,
lpDibBits,
(LPBITMAPINFO)lpbi,
DIB_RGB_COLORS,
SRCCOPY);
}
else
{
CBitmap bitmap;
CDC dcmemory;
bitmap.LoadBitmap(IDB_BITMAP1);
CDC* pDC=GetDC();
dcmemory.CreateCompatibleDC(pDC);
dcmemory.SelectObject(&bitmap);
pDC->BitBlt(100,100,699,919,&dcmemory,0,0,SRCCOPY);
}
// Do not call CDialog::OnPaint() for painting messages
}
void CIMageOpenDlg::OnButton9File()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_SHOW);
}
void CIMageOpenDlg::OnExit()
{
// TODO: Add your control notification handler code here
::PostMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_CLOSE,0,0);
}
void CIMageOpenDlg::OnOpenCamera()
{
// TODO: Add your control notification handler code here
if(INVALID_HANDLE_VALUE==m_hFile)
{
m_hFile=CreateFile(L"CIS1:",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0);
}
if(INVALID_HANDLE_VALUE==m_hFile)
{
MessageBox(L"createfile wrong");
return;
}
BOOL ret=FALSE;
ret = DeviceIoControl(m_hFile, IOCTL_CAM_CONT, NULL, 0,
NULL, 0, NULL, NULL);
if (ret != TRUE)
{
MessageBox(_T("设置 CAMERA!IOCTL_CAM_CONT失败"));
return;
}
}
void CIMageOpenDlg::OnCatchPicture()
{
// TODO: Add your control notification handler code here
BOOL ret;
ret= ::DeviceIoControl(m_hFile,IOCTL_CAM_STOP, NULL, 0,NULL, 0, NULL, NULL);
BYTE *image=(BYTE*)malloc(QCIF_XSIZE*QCIF_YSIZE*2);
memset(image,0,QCIF_XSIZE*QCIF_YSIZE*2);
ret=DeviceIoControl(m_hFile,CAM_IOCTL_SAMSUNG_CAM_PR,NULL,NULL,image,NULL,NULL,NULL);
//-------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -