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

#include "stdafx.h"


/*
内容:
	创建虚拟图像;
相关函数:
	rvCreateImageEx
		说明:
			可以建立虚拟图象，也可以建立正常图象;
			如果建立虚拟图象, 当pDataSource为NULL的时候, 该图象可能没有可用的图象数据, 这种情况下, 可以使用rviFloodEx函数来附加图象数据;
			如果建立正常图象, 当pDataSource不为空的时候, 将pDataSource的图象数据直接拷贝到新创建的数据里面;
			如果建立虚拟图象，该图象的外部数据源必须保证在对虚拟图象操作的时候始终有效(不被释放);
			如果图像类型为RIT_EXT, 只能创建VIRTUAL 图像
		参数:
			type			-	图像格式, RV_IMAGE_TYPE
			width			-	图像宽度
			height			-	图像高度
			bVirtual		-	布尔值, TRUE创建虚拟图像, FALSE创建普通图像
			pDataSource		-	图像数据指针地址
			nDataSize		-	图像数据大小
*/

HWND m_hWnd =NULL;
CCanvasWindow m_cw;	

void InitAuxWnd()
{
	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);
}

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

int _tmain(int argc, _TCHAR* argv[])
{
	//初始化应用窗口;
	InitAuxWnd();

	//Demo programs

	RvImage imDest = NULL;
	RvImage imVirt = NULL;

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

	if(imDest != NULL)
	{
		
		int nWid = rviGetWidth(imDest);
		int nHei  = rviGetHeight(imDest);

		
		void* pData = rviGetData(imDest);
		UINT nSize = rviGetSize(imDest);

		imVirt = rvCreateImageEx(rviGetImageType(imDest), nWid, nHei, TRUE, pData, nSize);
		 
		if(imVirt != NULL)
		{
			m_cw.Show(imVirt);			
		}
		
	}

	//End

	//消息处理
	DoEvents();

	rvDestroyImage(imVirt);
	rvDestroyImage(imDest);

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

	return 0;
}

