📄 wzdbtmap.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 + -