demo.cpp

来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C++ 代码 · 共 767 行 · 第 1/2 页

CPP
767
字号
			str += (TCHAR)NULL;
			str += doctypes[i].ext;
			str += (TCHAR)NULL;
		}
	}
	return str;
}

//////////////////////////////////////////////////////////////////////////////
// CDemoApp commands
void CDemoApp::OnImageFromBitmap() 
{
/*	HBITMAP bitmap;
	if (!(bitmap = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)))){
		AfxMessageBox("Could not load bitmap from resource");
		return;
	}*/

	CxImage* newImage = new CxImage();
	if (!newImage->LoadResource(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;i<ima->GetNumFrames();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();
	}
}
//////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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