⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picture.cpp

📁 用数字图像处理主要是为了修改图形,改善图像质量,或是从图像中提起有效信息,还有利用数字图像处理可以对图像进行体积.
💻 CPP
字号:
#include <ocidl.h> 
#include <olectl.h> 

#include "StdAfx.h"
#include "MyInterface.h"
#include "MyInterfaceDlg.h"
#include ".\picture.h"


CPicture::CPicture(void)
{
}

CPicture::~CPicture(void)
{
}
HRESULT CPicture::ShowPic(char *lpstrFile,HWND hWnd,UINT hong) 
{ 
	RECT rect;
	HDC hDC_Temp=::GetDC(::GetDlgItem(hWnd,hong));
	::GetClientRect(::GetDlgItem(hWnd,hong),&rect);
	IPicture *pPic; 
	IStream *pStm;
	BOOL bResult; 
	HANDLE hFile=NULL; 
	DWORD dwFileSize,dwByteRead; 

	//打开硬盘中的图形文件 
	hFile=CreateFile(lpstrFile,GENERIC_READ, 
		FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 
	////hBitmap=(HBITMAP)hFile;
	if (hFile!=INVALID_HANDLE_VALUE) 
	{ 
		dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数 
		if (dwFileSize==0xFFFFFFFF) 
			return E_FAIL; 
	} 
	else 
	{ 
		return E_FAIL; 
	} 
	//分配全局存储空间 
	HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); 
	LPVOID pvData = NULL; 
	if (hGlobal == NULL) 
		return E_FAIL;
	if ((pvData = GlobalLock(hGlobal)) == NULL)//分配内存块指针 
		return E_FAIL; 
	ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区 
	GlobalUnlock(hGlobal);	
	CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 
	//装入图形文件 
	bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
	if(FAILED(bResult)) 
		return E_FAIL; 
	OLE_XSIZE_HIMETRIC hmWidth;//图片的真实宽度 
	OLE_YSIZE_HIMETRIC hmHeight;//图片的真实高度 
	pPic->get_Width(&hmWidth); 
	pPic->get_Height(&hmHeight); 
	//将图形输出到屏幕上(有点像BitBlt) 
	bResult=pPic->Render(hDC_Temp,0,0,rect.right - rect.left ,rect.bottom - rect.top, 
		0,hmHeight,hmWidth,-hmHeight,NULL); //拷贝图像时是从下到上,从左到右进行的
	pPic->Release(); 
	CloseHandle(hFile);//关闭打开的文件 
	::ReleaseDC(::GetDlgItem(hWnd,hong),hDC_Temp);
	if (SUCCEEDED(bResult))
	{ 
		return S_OK; 
	} 
	else 
	{ 
		return E_FAIL; 
	} 
} 
HRESULT CPicture::ShowPic(HBITMAP hBitmap,HWND hWnd,UINT hong) 
{ 
	RECT rect;
	BITMAP bmp;
	HDC hDC_Temp=::GetDC(::GetDlgItem(hWnd,hong));
	::GetClientRect(::GetDlgItem(hWnd,hong),&rect);
	HDC hSrcDC;
	hSrcDC=CreateCompatibleDC(hDC_Temp);
	SelectObject(hSrcDC,hBitmap);
	GetObject(hBitmap,sizeof(BITMAP),&bmp);
	BitBlt(hDC_Temp,0,0,rect.right-rect.left,rect.bottom-rect.top,hSrcDC,0,0,SRCCOPY);	
	DeleteDC(hSrcDC);
	return S_OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -