www.pudn.com > cximage599c_full.rar > demo.cpp


// demo.cpp : Defines the class behaviors for the application. 
 
#include "stdafx.h" 
#include "demo.h" 
 
#include "MainFrm.h" 
#include "ChildFrm.h" 
#include "demoDoc.h" 
#include "demoView.h" 
#include "xTargetButton.h" 
#include "DlgURL.h" 
 
#include "ximage.h" 
#include "ximagif.h" 
#include "ximatif.h" 
#include "xfile.h" 
 
#ifdef _DEBUG 
#define _CRTDBG_MAP_ALLOC 
#include  
#include  
#undef THIS_FILE 
static char BASED_CODE THIS_FILE[] = __FILE__; 
#endif 
 
DocType doctypes[CMAX_IMAGE_FORMATS] = 
{ 
	{ -1, TRUE, TRUE, "Supported files", "*.bmp;*.gif;*.jpg;*.jpeg;*.png;*.ico;*.tif;*.tiff;*.tga;*.pcx;*.wbmp;*.wmf;*.emf;*.j2k;*.jp2;*.jbg;*.j2c;*.jpc;*.pgx;*.pnm;*.pgm;*.ppm;*.ras" }, 
#if CXIMAGE_SUPPORT_BMP 
	{ CXIMAGE_FORMAT_BMP, TRUE, TRUE, "BMP files", "*.bmp" }, 
#endif 
#if CXIMAGE_SUPPORT_GIF 
	{ CXIMAGE_FORMAT_GIF, TRUE, TRUE, "GIF files", "*.gif" }, 
#endif 
#if CXIMAGE_SUPPORT_JPG 
	{ CXIMAGE_FORMAT_JPG, TRUE, TRUE, "JPG files", "*.jpg;*.jpeg" }, 
#endif 
#if CXIMAGE_SUPPORT_PNG 
	{ CXIMAGE_FORMAT_PNG, TRUE, TRUE, "PNG files", "*.png" }, 
#endif 
#if CXIMAGE_SUPPORT_MNG 
	{ CXIMAGE_FORMAT_MNG, TRUE, TRUE, "MNG files", "*.mng;*.jng;*.png" }, 
#endif 
#if CXIMAGE_SUPPORT_ICO 
	{ CXIMAGE_FORMAT_ICO, TRUE, TRUE, "ICO CUR files", "*.ico;*.cur" }, 
#endif 
#if CXIMAGE_SUPPORT_TIF 
	{ CXIMAGE_FORMAT_TIF, TRUE, TRUE, "TIF files", "*.tif;*.tiff" }, 
#endif 
#if CXIMAGE_SUPPORT_TGA 
	{ CXIMAGE_FORMAT_TGA, TRUE, TRUE, "TGA files", "*.tga" }, 
#endif 
#if CXIMAGE_SUPPORT_PCX 
	{ CXIMAGE_FORMAT_PCX, TRUE, TRUE, "PCX files", "*.pcx" }, 
#endif 
#if CXIMAGE_SUPPORT_WBMP 
	{ CXIMAGE_FORMAT_WBMP, TRUE, TRUE, "WBMP files", "*.wbmp" }, 
#endif 
#if CXIMAGE_SUPPORT_WMF 
	{ CXIMAGE_FORMAT_WMF, TRUE, FALSE, "WMF EMF files", "*.wmf;*.emf" }, 
#endif 
#if CXIMAGE_SUPPORT_J2K 
	{ CXIMAGE_FORMAT_J2K, TRUE, TRUE, "J2K files", "*.j2k;*.jp2" }, 
#endif 
#if CXIMAGE_SUPPORT_JBG 
	{ CXIMAGE_FORMAT_JBG, TRUE, TRUE, "JBG files", "*.jbg" }, 
#endif 
#if CXIMAGE_SUPPORT_JP2 
	{ CXIMAGE_FORMAT_JP2, TRUE, TRUE, "JP2 files", "*.j2k;*.jp2" }, 
#endif 
#if CXIMAGE_SUPPORT_JPC 
	{ CXIMAGE_FORMAT_JPC, TRUE, TRUE, "JPC files", "*.j2c;*.jpc" }, 
#endif 
#if CXIMAGE_SUPPORT_PGX 
	{ CXIMAGE_FORMAT_PGX, TRUE, TRUE, "PGX files", "*.pgx" }, 
#endif 
#if CXIMAGE_SUPPORT_RAS 
	{ CXIMAGE_FORMAT_RAS, TRUE, TRUE, "RAS files", "*.ras" }, 
#endif 
#if CXIMAGE_SUPPORT_PNM 
	{ CXIMAGE_FORMAT_PNM, TRUE, TRUE, "PNM files", "*.pnm;*.pgm;*.ppm" } 
#endif 
}; 
 
////////////////////////////////////////////////////////////////////////////// 
// CDemoApp 
BEGIN_MESSAGE_MAP(CDemoApp, CWinApp) 
	//{{AFX_MSG_MAP(CDemoApp) 
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout) 
	ON_COMMAND(ID_IMAGE_FROM_BITMAP, OnImageFromBitmap) 
	ON_COMMAND(ID_CXIMAGE_LOADJPEGRESOURCE, OnCximageLoadjpegresource) 
	ON_COMMAND(ID_CXIMAGE_LOADICONRESOURCE, OnCximageLoadiconresource) 
	ON_COMMAND(ID_CXIMAGE_LOADGIFRESOURCE, OnCximageLoadgifresource) 
	ON_COMMAND(ID_CXIMAGE_LOADPNGRESOURCE, OnCximageLoadpngresource) 
	ON_COMMAND(ID_CXIMAGE_LOADTIFRESOURCE, OnCximageLoadtifresource) 
	ON_COMMAND(ID_WINDOW_CLOSEALL, OnWindowCloseall) 
	ON_COMMAND(ID_CXIMAGE_DEMOSAVEMULTIPAGETIFF, OnCximageDemosavemultipagetiff) 
	ON_COMMAND(ID_CXIMAGE_DEMOSAVEANIMATEDGIF, OnCximageDemosaveanimatedgif) 
	ON_COMMAND(ID_CXIMAGE_DOWNLOADFROMURL, OnCximageDownloadfromurl) 
	ON_COMMAND(ID_CXIMAGE_DEMOCREATEFROMARRAY, OnCximageDemocreatefromarray) 
	//}}AFX_MSG_MAP 
	// Standard file based document commands 
	ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) 
	ON_COMMAND(ID_FILE_OPEN, CDemoApp::OnFileOpen) 
	// Standard print setup command 
	ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) 
END_MESSAGE_MAP() 
 
////////////////////////////////////////////////////////////////////////////// 
// CDemoApp construction 
CDemoApp::CDemoApp() 
{ 
	m_nDocCount=1; //counter for documents 
 
} 
////////////////////////////////////////////////////////////////////////////// 
// The one and only CDemoApp object 
CDemoApp theApp; 
 
////////////////////////////////////////////////////////////////////////////// 
// CDemoApp initialization 
BOOL CDemoApp::InitInstance() 
{ 
	//  dump memory leaks 
#ifdef _DEBUG 
	_CrtDumpMemoryLeaks(); 
	_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); 
#endif 
	// Standard initialization 
#ifdef _AFXDLL 
	Enable3dControls();			// Call this when using MFC in a shared DLL 
#else 
	Enable3dControlsStatic();	// Call this when linking to MFC statically 
#endif 
 
	LoadStdProfileSettings(9);  // Load standard INI file options (including MRU) 
 
	// Register the application's document templates.  Document templates 
	//  serve as the connection between documents, frame windows and views. 
	CMultiDocTemplate* pDocTemplate; 
	pDocTemplate = new CMultiDocTemplate( 
		IDR_DEMOTYPE, 
		RUNTIME_CLASS(CDemoDoc), 
		RUNTIME_CLASS(CChildFrame), // custom MDI child frame 
		RUNTIME_CLASS(CDemoView)); 
	demoTemplate = pDocTemplate; 
	AddDocTemplate(pDocTemplate); 
 
	// create main MDI Frame window 
	CMainFrame* pMainFrame = new CMainFrame; 
	if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE; 
	m_pMainWnd = pMainFrame; 
 
	// This code replaces the MFC created menus with  
	// the Ownerdrawn versions  
	pDocTemplate->m_hMenuShared=pMainFrame->NewMenu(); 
	pMainFrame->m_hMenuDefault=pMainFrame->NewDefaultMenu(); 
	// This simulates a window being opened if you don't have 
	// a default window displayed at startup 
	pMainFrame->OnUpdateFrameMenu(pMainFrame->m_hMenuDefault); 
 
	// Parse command line for standard shell commands, DDE, file open 
	CCommandLineInfo cmdInfo; 
    // Alter behaviour to not open window immediately 
    cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; 
	ParseCommandLine(cmdInfo); 
 
	// Dispatch commands specified on the command line 
	if (!ProcessShellCommand(cmdInfo)) return FALSE; 
 
#ifdef VATI_EXTENSIONS 
    // init m_text by a temporary CxImage  
	CxImage *ima = new CxImage; 
	ima->InitTextInfo( &m_text ); 
	delete ima; 
     
	//recall last used font data for Text tool 
    sprintf( m_text.lfont.lfFaceName, GetProfileString ( "TextTool", "lfFaceName", "Arial") ); 
	m_text.lfont.lfCharSet   = GetProfileInt ( "TextTool", "lfCharSet", EASTEUROPE_CHARSET ) ; 
    m_text.lfont.lfWeight    = GetProfileInt ( "TextTool", "lfWeight", 0 ); 
    m_text.lfont.lfItalic    = GetProfileInt ( "TextTool", "lfItalic", 0 );  
    m_text.lfont.lfUnderline = GetProfileInt ( "TextTool", "lfUnderline", 0 );  
    m_text.fcolor = GetProfileInt ( "TextTool", "fcolor", RGB( 255,255,160 )); 
    m_text.bcolor = GetProfileInt ( "TextTool", "bcolor", RGB( 32, 96, 0 )); 
    m_text.opaque = GetProfileInt ( "TextTool", "opaque", 1); 
    m_text.b_opacity = (float)(GetProfileInt( "TextTool", "opacity", 0 ))/(float)100.;   
    m_text.b_round   = GetProfileInt ( "TextTool", "roundradius", 25 ); 
 
	m_optJpegQuality = GetProfileInt("Options","JpegQuality",90); 
 
	// recall if main window was maximized on last exit 
    if ( GetProfileInt ( "Screen", "maximized", 0 )) 
        m_nCmdShow|=SW_MAXIMIZE; 
#endif; 
 
	// The main window has been initialized, so show and update it. 
    pMainFrame -> ShowWindow ( m_nCmdShow ) ; 
	pMainFrame->UpdateWindow(); 
 
	// Enable drag/drop open 
	m_pMainWnd->DragAcceptFiles(); 
 
	// Enable open from command line 
	if (*m_lpCmdLine != 0) 
		OpenDocumentFile(m_lpCmdLine); 
 
	return TRUE; 
} 
 
////////////////////////////////////////////////////////////////////////////// 
// CAboutDlg dialog used for App About 
class CAboutDlg : public CDialog 
{ 
public: 
	CAboutDlg(); 
// Dialog Data 
	//{{AFX_DATA(CAboutDlg) 
	enum { IDD = IDD_ABOUTBOX }; 
	CxTargetButton	m_ok; 
	//}}AFX_DATA 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CAboutDlg) 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support 
	//}}AFX_VIRTUAL 
// Implementation 
protected: 
	//{{AFX_MSG(CAboutDlg) 
	virtual BOOL OnInitDialog(); 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
////////////////////////////////////////////////////////////////////////////// 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
} 
////////////////////////////////////////////////////////////////////////////// 
void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(DlgCapture) 
	DDX_Control(pDX, IDOK, m_ok); 
	//}}AFX_DATA_MAP 
} 
////////////////////////////////////////////////////////////////////////////// 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
	//{{AFX_MSG_MAP(CAboutDlg) 
		// No message handlers 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
////////////////////////////////////////////////////////////////////////////// 
BOOL CAboutDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
 
	m_ok.SetIcon(IDI_G,BS_LEFT); 
	 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
////////////////////////////////////////////////////////////////////////////// 
// App command to run the dialog 
void CDemoApp::OnAppAbout() 
{ 
	CAboutDlg aboutDlg; 
	aboutDlg.DoModal(); 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnFileOpen()  
{ 
	// prompt the user (with all document templates) 
	CString newName; 
	int nDocType = -1; 
	if (!PromptForFileName(newName, AFX_IDS_OPENFILE, 
	  OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, TRUE, &nDocType)) 
		return; // open cancelled 
	 
	OpenDocumentFile(newName); 
 
} 
////////////////////////////////////////////////////////////////////////////// 
// prompt for file name - used for open and save as 
// static function called from app 
BOOL CDemoApp::PromptForFileName(CString& fileName, UINT nIDSTitle,  
	DWORD dwFlags, BOOL bOpenFileDialog, int* pType) 
{ 
	CFileDialog dlgFile(bOpenFileDialog); 
	CString title; 
	if (bOpenFileDialog) title="Open image file"; else title="Save image file"; 
 
	dlgFile.m_ofn.Flags |= dwFlags; 
 
	int nDocType = (pType != NULL) ? *pType : CXIMAGE_FORMAT_BMP; 
	if (nDocType==0) nDocType=1; 
 
	int nIndex = GetIndexFromType(nDocType, bOpenFileDialog); 
	if (nIndex == -1) nIndex = 0; 
 
	dlgFile.m_ofn.nFilterIndex = nIndex +1; 
	// strDefExt is necessary to hold onto the memory from GetExtFromType 
	CString strDefExt = GetExtFromType(nDocType).Mid(2,3); 
	dlgFile.m_ofn.lpstrDefExt = strDefExt; 
		 
	CString strFilter = GetFileTypes(bOpenFileDialog); 
	dlgFile.m_ofn.lpstrFilter = strFilter; 
	dlgFile.m_ofn.lpstrTitle = title; 
	dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH); 
 
	BOOL bRet = (dlgFile.DoModal() == IDOK) ? TRUE : FALSE; 
	fileName.ReleaseBuffer(); 
	if (bRet){ 
		if (pType != NULL){ 
			int nIndex = (int)dlgFile.m_ofn.nFilterIndex - 1; 
			ASSERT(nIndex >= 0); 
			*pType = GetTypeFromIndex(nIndex, bOpenFileDialog); 
		} 
	} 
	return bRet; 
} 
////////////////////////////////////////////////////////////////////////////// 
int CDemoApp::GetIndexFromType(int nDocType, BOOL bOpenFileDialog) 
{ 
	int nCnt = 0; 
	for (int i=0;iLoadResource(FindResource(NULL,MAKEINTRESOURCE(IDB_BITMAP1),RT_BITMAP),CXIMAGE_FORMAT_BMP)){ 
		AfxMessageBox(newImage->GetLastError()); 
		delete newImage; 
		newImage =NULL; 
		return; 
	} 
 
	CDemoDoc *doc = (CDemoDoc *)demoTemplate->OpenDocumentFile(NULL); 
	if (doc){ 
		doc->image = newImage; 
		CString s; 
		s.Format("BITMAP Resource Image %d",m_nDocCount++); 
		doc->SetTitle(s); 
		doc->UpdateAllViews(0); 
		doc->UpdateStatusBar(); 
	} 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnCximageLoadjpegresource()  
{ 
	CxImage* newImage = new CxImage(); 
	if (!newImage->LoadResource(FindResource(NULL,"IDR_JPG2","JPG"),CXIMAGE_FORMAT_JPG)){ 
		AfxMessageBox(newImage->GetLastError()); 
		delete newImage; 
		newImage =NULL; 
		return; 
	} 
	CDemoDoc *doc = (CDemoDoc *)demoTemplate->OpenDocumentFile(NULL); 
	if (doc){ 
		doc->image = newImage; 
		CString s; 
		s.Format("JPEG Resource Image %d",m_nDocCount++); 
		doc->SetTitle(s); 
		doc->UpdateAllViews(0); 
		doc->UpdateStatusBar(); 
	} 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnCximageLoadiconresource()  
{ 
	CxImage* newImage = new CxImage(); 
	if (!newImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_ICO1),"ICO"),CXIMAGE_FORMAT_ICO)){ 
		AfxMessageBox(newImage->GetLastError()); 
		delete newImage; 
		newImage =NULL; 
		return; 
	} 
 
//	HICON my_Icon = (HICON)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_G),IMAGE_ICON,0, 0, 0); 
//	CxImage my_image; 
//	my_image.CreateFromHICON(my_Icon); 
//	DestroyIcon(my_Icon); 
 
	CDemoDoc *doc = (CDemoDoc *)demoTemplate->OpenDocumentFile(NULL); 
	if (doc){ 
		doc->image = newImage; 
		CString s; 
		s.Format("Icon Resource Image %d",m_nDocCount++); 
		doc->SetTitle(s); 
		doc->UpdateAllViews(0); 
		doc->UpdateStatusBar(); 
	} 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnCximageLoadgifresource()  
{ 
	CxImage* newImage = new CxImage(); 
	if (!newImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_GIF1),"GIF"),CXIMAGE_FORMAT_GIF)){ 
		AfxMessageBox(newImage->GetLastError()); 
		delete newImage; 
		newImage =NULL; 
		return; 
	} 
	CDemoDoc *doc = (CDemoDoc *)demoTemplate->OpenDocumentFile(NULL); 
	if (doc){ 
		doc->image = newImage; 
 
		CString s; 
		s.Format("GIF Resource Image %d",m_nDocCount++); 
		doc->SetTitle(s); 
		doc->UpdateAllViews(0); 
		doc->UpdateStatusBar(); 
	} 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnCximageLoadpngresource()  
{ 
	CxImage* newImage = new CxImage(); 
	if (!newImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1),"PNG"),CXIMAGE_FORMAT_PNG)){ 
		AfxMessageBox(newImage->GetLastError()); 
		delete newImage; 
		newImage =NULL; 
		return; 
	} 
 
	CDemoDoc *doc = (CDemoDoc *)demoTemplate->OpenDocumentFile(NULL); 
	if (doc){ 
		doc->image = newImage; 
 
		CString s; 
		s.Format("PNG Resource Image %d",m_nDocCount++); 
		doc->SetTitle(s); 
		doc->UpdateAllViews(0); 
		doc->UpdateStatusBar(); 
	} 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnCximageLoadtifresource()  
{ 
	CxImage* newImage = new CxImage(); 
	if (!newImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_TIF1),"TIF"),CXIMAGE_FORMAT_TIF)){ 
		AfxMessageBox(newImage->GetLastError()); 
		delete newImage; 
		newImage =NULL; 
		return; 
	} 
	CDemoDoc *doc = (CDemoDoc *)demoTemplate->OpenDocumentFile(NULL); 
	if (doc){ 
		doc->image = newImage; 
 
		CString s; 
		s.Format("TIF Resource Image %d",m_nDocCount++); 
		doc->SetTitle(s); 
		doc->UpdateAllViews(0); 
		doc->UpdateStatusBar(); 
	} 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnWindowCloseall()  
{ 
	POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();  
    while(pos) {  
        CDocTemplate* pTemplate = AfxGetApp()->GetNextDocTemplate(pos);  
        POSITION pos2 = pTemplate->GetFirstDocPosition();  
        while(pos2) {  
            CDocument* pDocument;  
			if ((pDocument=pTemplate->GetNextDoc(pos2)) != NULL)  
				pDocument->OnCloseDocument();   
		} 
	} 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnCximageDemosavemultipagetiff()  
{ 
	CxImage* newImage1 = new CxImage(); 
	if (!newImage1->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_TIF1),"TIF"),CXIMAGE_FORMAT_TIF)){ 
		AfxMessageBox(newImage1->GetLastError()); 
		delete newImage1; 
		newImage1 =NULL; 
	} 
	CxImage* newImage2 = new CxImage(); 
	if (!newImage2->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_GIF1),"GIF"),CXIMAGE_FORMAT_GIF)){ 
		AfxMessageBox(newImage2->GetLastError()); 
		delete newImage2; 
		newImage2 =NULL; 
	} 
	CxImage* newImage3 = new CxImage(); 
	if (!newImage3->LoadResource(FindResource(NULL,"IDR_JPG2","JPG"),CXIMAGE_FORMAT_JPG)){ 
		AfxMessageBox(newImage3->GetLastError()); 
		delete newImage3; 
		newImage3 =NULL; 
	} 
	newImage3->DecreaseBpp(8,true); 
 
	CxImage *pimage[3]; 
	pimage[0]=newImage1; 
	pimage[1]=newImage2; 
	pimage[2]=newImage3; 
 
	FILE* hFile; 
	hFile = fopen("multipage.tif","w+b"); 
 
	CxImage multiimage; 
	multiimage.Encode(hFile,pimage,3,CXIMAGE_FORMAT_TIF); 
 
	fclose(hFile); 
 
	delete newImage1; 
	delete newImage2; 
	delete newImage3; 
 
	/*{ 
	FILE* hFile; 
	hFile = fopen("c:\\multi.tif","w+b"); 
 
	CxImageTIF image; 
	image.Load("c:\\1.tif",CXIMAGE_FORMAT_TIF); 
	image.Encode(hFile,true); 
	image.Load("c:\\2.bmp",CXIMAGE_FORMAT_BMP); 
	image.Encode(hFile,true); 
	image.Load("c:\\3.png",CXIMAGE_FORMAT_PNG); 
	image.Encode(hFile); 
 
	fclose(hFile); 
	}*/ 
 
	AfxMessageBox("file ""mulipage.tif"" saved to disk",MB_OK); 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnCximageDemosaveanimatedgif()  
{ 
	CxImage* newImage = new CxImage(); 
	if (!newImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_GIF1),"GIF"),CXIMAGE_FORMAT_GIF)){ 
		AfxMessageBox(newImage->GetLastError()); 
		delete newImage; 
		newImage =NULL; 
	} 
	 
	newImage->IncreaseBpp(24); 
 
	CxImage ima1,ima2,ima3; 
	ima1.Copy(*newImage); 
	ima1.Light(22); 
	ima2.Copy(*newImage); 
	ima2.Light(44); 
	ima3.Copy(*newImage); 
	ima3.Light(66); 
 
	newImage->DecreaseBpp(8,0,0); 
	ima1.DecreaseBpp(8,0,0); 
	ima2.DecreaseBpp(8,0,0); 
	ima3.DecreaseBpp(8,0,0); 
 
	newImage->SetTransIndex(newImage->GetPixelIndex(0,0)); 
	ima1.SetTransIndex(ima1.GetPixelIndex(0,0)); 
	ima2.SetTransIndex(ima2.GetPixelIndex(0,0)); 
	ima3.SetTransIndex(ima3.GetPixelIndex(0,0)); 
 
	newImage->SetFrameDelay(22); 
	ima1.SetFrameDelay(22); 
	ima2.SetFrameDelay(22); 
	ima3.SetFrameDelay(44); 
 
	CxImage *pimage[7]; 
	pimage[0]=newImage; 
	pimage[1]=&ima1; 
	pimage[2]=&ima2; 
	pimage[3]=&ima3; 
	pimage[4]=&ima2; 
	pimage[5]=&ima1; 
	pimage[6]=newImage; 
 
	FILE* hFile; 
	hFile = fopen("ani.gif","wb"); 
 
	CxImageGIF multiimage; 
	multiimage.SetComment("CxImage demo"); 
	multiimage.SetLoops(3); 
	multiimage.SetDisposalMethod(2); 
	multiimage.Encode(hFile,pimage,7); 
 
	fclose(hFile); 
 
	delete newImage; 
 
	AfxMessageBox("file ""ani.gif"" saved to disk",MB_OK); 
 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnCximageDownloadfromurl()  
{ 
	DlgURL dlg; 
	if (dlg.DoModal()==IDOK){ 
		long size = dlg.m_size; 
		if (size){ 
			CxMemFile memfile((BYTE*)dlg.m_data.GetBuffer(0),size); 
 
			CDemoDoc *doc = (CDemoDoc *)demoTemplate->OpenDocumentFile(NULL); 
			if (doc){ 
				CString ext(doc->FindExtension(dlg.m_url)); 
				ext.MakeLower(); 
				if (ext == "") return; 
 
				int type = doc->FindType(ext); 
 
				CxImage* ima = new CxImage(); 
				ima->Decode(&memfile,type); 
 
				doc->image = ima; 
				doc->SetTitle(dlg.m_url); 
				doc->UpdateAllViews(0); 
				doc->UpdateStatusBar(); 
 
 
 
 
				if (ima->GetNumFrames()>1){ 
					CString s; 
					s.Format("File with %d images. Read all?",ima->GetNumFrames()); 
					if (AfxMessageBox(s,MB_OKCANCEL)==IDOK){ 
						 
						int j; // points to the document name 
						for(j=strlen(dlg.m_url)-1;j>=0;j--){ 
							if (dlg.m_url[j]=='\\'){	j++; break;	} 
						} 
						// create the documents for the other images 
						for(int i=1;iGetNumFrames();i++){ 
							CDemoDoc *NewDoc=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL); 
							if (NewDoc)	{ 
								CxImage *newImage = new CxImage(); 
								newImage->SetFrame(i); 
								memfile.Seek(0,SEEK_SET); 
								newImage->Decode(&memfile,type); 
								NewDoc->image = newImage; 
								CString s; 
								s.Format("%s (%d)",dlg.m_url.Mid(j),i+1); 
								NewDoc->SetTitle(s); 
								NewDoc->UpdateAllViews(NULL,WM_USER_NEWIMAGE); 
							} 
						} 
					} 
				} 
			} 
		} 
	} 
} 
////////////////////////////////////////////////////////////////////////////// 
void CDemoApp::OnCximageDemocreatefromarray()  
{ 
	CxImage* newImage = new CxImage(); 
 
	long w = 256; 
	long h = 256; 
	BYTE c = 4; 
 
	BYTE* pArray = (BYTE*)malloc(w*h*c); 
 
	int n,d,e; 
	int a=w/2; 
	for(int i = 0; i < h; i++) { 
		for(int j = 0; j < w; j++) { 
			n=c*(j+w*i); 
			d=(BYTE)((a*i)/h+(a*(w-j))/w); 
			e=(BYTE)((a*(h-i))/h+(a*(w-j))/w); 
			if (c==4) pArray[n+3]=(BYTE)(d); 
			pArray[n+2]=(BYTE)(e); 
			pArray[n+1]=(BYTE)(255-d); 
			pArray[n]=(BYTE)(255-e); 
		} 
	} 
 
	newImage->CreateFromArray(pArray,w,h,8*c,c*w,0); 
	free(pArray); 
 
	if (!newImage->IsValid()){ 
		AfxMessageBox(newImage->GetLastError()); 
		delete newImage; 
		newImage =NULL; 
		return; 
	} 
 
	CDemoDoc *doc = (CDemoDoc *)demoTemplate->OpenDocumentFile(NULL); 
	if (doc){ 
		doc->image = newImage; 
 
		CString s; 
		s.Format("CreateFromArray Image %d",m_nDocCount++); 
		doc->SetTitle(s); 
		doc->UpdateAllViews(0); 
		doc->UpdateStatusBar(); 
	} 
} 
//////////////////////////////////////////////////////////////////////////////