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

📄 wzdbtmap.cpp

📁 用Visual C++编写的地震记录显示程序
💻 CPP
字号:
// WzdBtmap.cpp : implementation of the CWzdBitmap class
//
#include "showsgyview.h"
#include "stdafx.h"
#include "WzdBtmap.h"
#include "resource.h"
#include "math.h"
#include "color3.h" 
#include "color1.h"

/////////////////////////////////////////////////////////////////////////////
// CWzdBitmap
 
IMPLEMENT_DYNAMIC(CWzdBitmap, CBitmap)


CWzdBitmap::CWzdBitmap()
{
	m_Width=0;
	m_Height=0;
	mapcolor=2;
}

CWzdBitmap::~CWzdBitmap()
{
}

void CWzdBitmap::CreateTimeSection(float *trace,long ntrace,long nz) 
{
	CSize size;
	long xxx;
    CPoint *xy,*xy1;
	char sss[50];
	int i,j;
    
	 
	dcScreen.Attach(::GetDC(NULL));

	// create the  bitmap in memory
	 
 
	size.cx=int(150+px*ntrace);
    size.cy=int(150+nz*py);
	dcMem.CreateCompatibleDC(&dcScreen);
	CreateCompatibleBitmap(&dcScreen,size.cx, size.cy);
	 
	
	dcMem.SelectObject(this);
     
	// do our drawing
	CPen *poldPen;
	CBrush *poldbrush;
	CPen Mypen;
	Mypen.CreatePen (PS_SOLID,1,RGB(0,0,0));
	poldPen=(CPen *)dcMem.SelectObject (&Mypen);

	CBrush Mybrush;
	Mybrush.CreateSolidBrush (RGB(0,0,0));

	dcMem.SetPolyFillMode (WINDING);
	poldbrush=(CBrush *)dcMem.SelectStockObject (NULL_BRUSH);
	dcMem.FillRect(CRect(0,0,size.cx,size.cy), poldbrush); 
	xy=new CPoint[nz];
	xy1=new CPoint[nz];

	for(j=0;j<ntrace;j++)
	{   
		
		for(i=0;i<nz;i++)
		{	
			xxx=(long)(trace[j*nz+i]*pz);	
			xy1[i].x=xxx+j*px+50;
			if(xxx<0) xxx=0;
			xy[i].x=xxx+j*px+ 50;
			xy[i].y=i*py+50;
			xy1[i].y=i*py+50;
		}
		xy[0].x=xy[nz-1].x=xy1[0].x=xy1[nz-1].x=j*px+ 50;
 		
		 //
	   
	   poldbrush=dcMem.SelectObject (&Mybrush);
	   dcMem.Polygon (xy,nz); 
	   poldbrush=(CBrush *)dcMem.SelectStockObject (NULL_BRUSH);
	   dcMem.Polygon (xy1,nz);
	}

	dcMem.MoveTo(50,50);	
	dcMem.LineTo((ntrace-1)*px+50,50);
	dcMem.MoveTo(50,50); 
	dcMem.LineTo(50,46);

	dcMem.SetBkColor(RGB(0,200,0)); 
	dcMem.SetTextColor(RGB(255,0,0)); 
		
	dcMem.DrawText("Trace#",CRect(45,30,100,50),DT_RIGHT|DT_SINGLELINE); 
	for(j=19;j<ntrace;j+=20)
	{
		dcMem.MoveTo(j*px+50,50); 
		dcMem.LineTo(j*px+50,46);
		wsprintf(sss,"%3d",j+1);
		dcMem.DrawText(sss,CRect(j*px,30,j*px+100,46),DT_CENTER);
	}
	for(j=99;j<nz;j+=100)
	{
		dcMem.MoveTo(50,j*py+50); 
		dcMem.LineTo(ntrace*px+50,j*py+50);
		wsprintf(sss,"%3d",j+1);
		dcMem.DrawText(sss,CRect(1,j*py+50-10,45,j*py+50+10),DT_RIGHT|DT_SINGLELINE);
		dcMem.DrawText(sss,CRect(ntrace*px+52,j*py+50-10,ntrace*px+80,j*py+50+10),DT_LEFT|DT_SINGLELINE);

	}

	delete[] xy;
	delete[] xy1;
	// delete and release device contexts
	 dcMem.DeleteDC();
	 ::ReleaseDC(NULL, dcScreen.Detach());

	m_Width=size.cx;
	m_Height=size.cy;

}

void CWzdBitmap::CreateColorSection(float *xyz, long ntrace, long nzz)
{
	int i,j,color;
	unsigned char i1,i2,i3;
	COLORREF colr;
	short int *trace;
	trace=new short[ntrace*nzz];
	histeq(xyz,trace,ntrace,nzz);	

	CSize size;
	long cx,cy;
	
	switch (m_angel)
	{
		case 0:
		case 2:cx=100+ntrace;
			   cy=100+nzz;break;
		case 1:
		case 3:
			cx=100+nzz;
			cy=100+ntrace;
			break;
    
	}
    size.cx=cx;
    size.cy=cy;

	dcScreen.Attach(::GetDC(NULL));
	
	// create the  bitmap in memory
	
	dcMem.CreateCompatibleDC(&dcScreen);
	CreateCompatibleBitmap(&dcScreen,size.cx, size.cy);
	dcMem.SelectObject(this);
    dcMem.Rectangle(0,0,size.cx,size.cy);
		for(i=0;i<ntrace;i++)  //逐点着色
	    for(j=0;j<nzz;j++)
		{
		 	color=trace[i*nzz+j];
			if(mapcolor==1) 
			{ 
				i1=COLRGB[color][2];
				i2=COLRGB[color][1];
				i3=COLRGB[color][0];
			}
			else
			{
				i1=colRGB[color][2];
				i2=colRGB[color][1];
				i3=colRGB[color][0];
			}
			switch (token)
			{
				case 2: colr=RGB(i1,i2,i3);break;//彩色
				case 1: colr=RGB(color,color,color);break; //grey
			}
			switch (m_angel)   //
			{
				case 0:dcMem.SetPixel(i+50,j+50,colr);break;
				case 1:dcMem.SetPixel(nzz-j+50,i+50,colr);break;
				case 2:dcMem.SetPixel(ntrace-i+50,nzz-j+50,colr);break;
				case 3:dcMem.SetPixel( j+50,ntrace-i+50,colr);
			}
		}
	
		if(strlen(m_blankFile)>=5) 
		{
			long *stime ;
			stime=new long[ntrace*nzz];
			FILE *f;
			f=fopen(m_blankFile,"rb");
			fread(stime,4L*ntrace*nzz,1,f);	
			fclose(f); 
			for(i=0;i<ntrace;i++)
				for(j=0;j<nzz;j++)
				{
					colr=RGB(255,255,255);	
					if(stime[i*nzz+j]==0) switch (m_angel)   //
					{
						case 0:dcMem.SetPixel(i+50,j+50,colr);break;
						case 1:dcMem.SetPixel(nzz-j+50,i+50,colr);break;
						case 2:dcMem.SetPixel(ntrace-i+50,nzz-j+50,colr);break;
						case 3:dcMem.SetPixel( j+50,ntrace-i+50,colr);
					}

				}
				delete stime;
		}
	char ss[10];
	switch (m_angel)   //尔后标注?
	{
		case 0: 
			   for(i=0;i<ntrace;i+=50)
			   {
				   dcMem.MoveTo(i+50,45);dcMem.LineTo(i+50,nzz+55);
				   wsprintf(ss,"%d",i );
				   dcMem.TextOut(i+40,nzz+58,ss);
			   }
			   for(j=0;j<nzz;j+=50)
			   {
				   dcMem.MoveTo(40,j+50);dcMem.LineTo(55+ntrace,j+50);
				   wsprintf(ss,"%d",j );
				   dcMem.TextOut(15 ,j+40,ss);
			   }
			break;
		case 1:	break;
		case 2: break;
		case 3: 
			
			for(i=0;i<ntrace;i+=50)
			   {
				   dcMem.MoveTo( 45,ntrace-i+50);
				   dcMem.LineTo(nzz+55,ntrace-i+50 );
				   wsprintf(ss,"%d",i );
				   dcMem.TextOut(15 ,ntrace-i+40,ss);

			   }
			   for(j=0;j<nzz;j+=50)
			   {
				   dcMem.MoveTo(j+50,45);
				   dcMem.LineTo(j+50,55+ntrace);
				   wsprintf(ss,"%d",j );
				   dcMem.TextOut(j+40 ,ntrace+60,ss);
			   }

			  
			break; 
	}

	dcMem.DeleteDC();
	::ReleaseDC(NULL, dcScreen.Detach());
	
	m_Width=size.cx;
	m_Height=size.cy;
	delete trace;
	
}


void CWzdBitmap::welcome()
{
	CSize size;
	dcScreen.Attach(::GetDC(NULL));
	
	// create the  bitmap in memory
	
	CRect rcClient;
	::GetClientRect(NULL,&rcClient);
	size.cx=rcClient.Width();
	size.cy=rcClient.Height();
	
	dcMem.CreateCompatibleDC(&dcScreen);
	CreateCompatibleBitmap(&dcScreen,size.cx, size.cy);
	dcMem.SelectObject(this);
	dcMem.Rectangle(0,0,size.cx,size.cy); 
	
	// delete and release device contexts
	dcMem.DeleteDC();
	::ReleaseDC(NULL, dcScreen.Detach());
	
	m_Width=size.cx;
	m_Height=size.cy;
}

void CWzdBitmap::SaveBitMap(CString sFile)
{
	 
}

void CWzdBitmap::histeq(float xz[], short xzint[], long nxreal, long nzreal)
{
	float tabb[256],ww,sum=0;
	int kkk[256];
	float xmax,xmin;
	long i ,j,k;
	long l; 
	l=0;
	long *stime;
	stime=new long[nxreal*nzreal];
	if(strlen(m_blankFile)>=5)
	{
		FILE *f;
		f=fopen(m_blankFile,"rb");
		fread(stime,4L*nxreal*nzreal,1,f);
		fclose(f);
	}
	else
	{
		for(i=0;i<nxreal*nzreal;i++)  stime[i]=1;
	}
	xmax=-1000000;xmin=1000000;
	for(i=0;i<nxreal*nzreal;i++)
	{
		ww=xz[i];
		if(stime[i]==1)
		{
			if(xmin>ww) xmin=ww;
			if(xmax<ww) xmax=ww; 
			l++;
		}
		
	}
	if(xmax>xmin)
		for(i=0;i<nxreal*nzreal;i++) 
		{
			xzint[i]=(short int)(255*(xz[i]-xmin)/(xmax-xmin));
		}
		
		for(i=0;i<256;i++) tabb[i]=0.0;
		ww=1/float(l);
		for(i=0;i<nxreal;i++)
			for(j=0;j<nzreal;j++)  
		{
			l=i*nzreal+j;
			k=(short int)(xzint[l]);
			if(stime[l]==1) tabb[k]=tabb[k]+ww;
		}
		for(i=1;i<256;i++) tabb[i]+=tabb[i-1];
		for(i=0;i<256;i++) kkk[i]=(int)(255*tabb[i]);
		for(i=0;i<nxreal*nzreal;i++) {k=xzint[i];xzint[i]=kkk[k];}
		delete stime;
}









⌨️ 快捷键说明

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