// ImageAttribute.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


/*
内容:
	获取图像的各种属性;
相关函数:
	rviGetWidth
		说明:
			返回图象宽度
		参数:
			image				-	常规图像对象
		返回值:
			图象宽度

	rviGetHeight
		说明:
			返回图象高度
		参数:
			image				-	常规图像对象
		返回值:
			图象高度

	rviGetSize
		说明:
			返回图象数据区大小,以字节为单位
		参数:
			image				-	常规图像对象
		返回值:
			图象数据区大小,以字节为单位

	rviGetPitch
		说明:
			返回图象数据区大小, 以像素为单位
		参数:
			image				-	常规图像对象
		返回值:
			图象数据区大小, 以像素为单位

	rviGetImageType
		说明:
			返回图像格式
		参数:
			image				-	常规图像对象
		返回值:
			图像格式, RV_IMAGE_TYPE(RIT_EXT, RIT_BIN, RIT_GRAY, RIT_RGB, RIT_RGBA)

	rviGetDepth
		说明:
			返回图像位深度, 一个像素多少位
		参数:
			image				-	常规图像对象
		返回值:
			图像位深度

	rviGetChannels
		说明:
			返回图像通道
		参数:
			image				-	常规图像对象
		返回值:
			图像通道

	rviBytesPerPixel
		说明:
			返回图像像素值
		参数:
			image				-	常规图像对象
		返回值:
			图像像素值
*/

HWND m_hWnd =NULL;
CCanvasWindow m_cw;	

void InitAuxWnd(BOOL bEnableConsole)
{
	HINSTANCE hInstance = InitInstance(NULL, FALSE);

	int  cx   =   GetSystemMetrics(  SM_CXFULLSCREEN ); 
	int  cy   =   GetSystemMetrics(  SM_CYFULLSCREEN );

	int w = 600;
	int h = 500;
	int  x = (cx - w)/2;
	int  y = (cy - h)/2;

	// 执行应用程序初始化: 
	m_hWnd = CreateAuxilliaryWindow(hInstance, _T("创建图像对象" ), x,y,w,h);
	assert(m_hWnd);

	RECT rect;

	::GetClientRect(m_hWnd, &rect);
	m_cw.Create(  m_hWnd, _T("FVI canvas window" ), rect.left, rect.top, rect.right -rect.left, rect.bottom- rect.top);

	if (bEnableConsole){
		AllocConsole();
		freopen(_T("CONOUT$"), _T("w+t"), stdout);

		char strTitle[255];
		GetConsoleTitle(strTitle, 255);
		HWND hw=FindWindow("ConsoleWindowClass",strTitle);

		if (NULL != hw) {
			HMENU hMenu = ::GetSystemMenu(hw, FALSE);
			::ModifyMenu(hMenu, SC_CLOSE , MF_BYCOMMAND | MF_GRAYED, 0, NULL );
		}
	}
}

void ReleaseAuxWnd()
{
	//释放窗口对象
	m_cw.Destroy();
};


int _tmain(int argc, _TCHAR* argv[])
{

	//初始化应用窗口;
	InitAuxWnd(TRUE);

	RvImage imSrc = NULL;


	const char* filePath = _T("..\\samples\\colorwave.jpg");
	imSrc= rvLoadImage(filePath);

	if(imSrc != NULL)
	{
		int            nWid      =  rviGetWidth(imSrc);
		int            nHei     =  rviGetHeight(imSrc);
		UINT           nSize     =  rviGetSize(imSrc);
		int			   nPicth    =  rviGetPitch(imSrc);
		RV_IMAGE_TYPE  imType   =  rviGetImageType(imSrc);
		int            nDepth    =  rviGetDepth(imSrc);
		int            nChannel  =  rviGetChannels(imSrc);
		int            nBtPerPix =  rviBytesPerPixel(imSrc);

		const TCHAR* scSrcType;

		switch(imType)
		{
		case RIT_BIN:
			scSrcType = _T("BIN");
			break;
		case RIT_GRAY:
			scSrcType = _T("GRAY");
			break;
		case RIT_RGB:
			scSrcType = _T("RGB");
			break;
		case RIT_RGBA:
			scSrcType = _T("RGBA");
			break;
		default:
			scSrcType = _T("UNKNOWN");
		}

		cout << _T("图像属性  ")		<< endl	       << endl
			 << _T("  宽度          :") << nWid		   << endl
			 << _T("  高度          :") << nHei 	   << endl
			 << _T("  字节数        :") << nSize	   << endl
			 << _T("  大小	        :") << nPicth      << endl
			 << _T("  图像格式      :") << scSrcType   << endl
			 << _T("  位深度        :") << nDepth      << endl
			 << _T("  通道	        :") << nChannel    << endl
			 << _T("  像素所占字节  :") << nBtPerPix   << endl;

		m_cw.Show(imSrc);
		
	}

	//End

	//消息处理
	DoEvents();

	rvDestroyImage(imSrc);

	//释放窗口对象
	ReleaseAuxWnd();

	return 0;
}

