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

📄 dcmview.cpp

📁 医学数字影像和通讯_DICOM_编程最新介绍
💻 CPP
字号:
// dcmView.cpp : implementation of the CDcmView class
//

#include "stdafx.h"
#include "dcm.h"

#include "dcmDoc.h"
#include "dcmView.h"

#include "dicom.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDcmView

IMPLEMENT_DYNCREATE(CDcmView, CView)

BEGIN_MESSAGE_MAP(CDcmView, CView)
	//{{AFX_MSG_MAP(CDcmView)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDcmView construction/destruction

CDcmView::CDcmView()
{
	// TODO: add construction code here
	begin = FALSE;
}

CDcmView::~CDcmView()
{
	imageDicm.~Dicom();
}

BOOL CDcmView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDcmView drawing

void CDcmView::OnDraw(CDC* pDC)
{
	
	CDcmDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (begin)
	{
		int x,y,wide;
				DcmData* pTemp;
		int i;
		pTemp = imageDicm.p_DcmData;
	//	/*
		for(i=imageDicm.frame_number;i>0;i--)
		{
			wide = 20;
			x = 10+(pTemp->image_orderID-1)%3*256;
			y = 10+(pTemp->image_orderID-1)/3*256;
			pDC->TextOut(x,y,"slice_location:");
			pDC->TextOut(x,y+wide,pTemp->slice_location);
			pDC->TextOut(x,y+3*wide,"pixelx_spacing:    pixely_spacing:");
			pDC->TextOut(x,y+4*wide,pTemp->pixelx_spacing);
			pDC->TextOut(x+150,y+4*wide,pTemp->pixely_spacing);
			pDC->TextOut(x,y+6*wide,"manufacture:");
			pDC->TextOut(x,y+7*wide,pTemp->manufacture);
			pDC->TextOut(x,y+ 9*wide,"rows:");
			char dd[4];
			pDC->TextOut(x,y+10*wide,itoa(pTemp->rows,dd,10));
			pDC->TextOut(x,y+12*wide,"columns:");
			pDC->TextOut(x,y+13*wide,itoa(pTemp->columns,dd,10));
			pDC->TextOut(x,y+15*wide,"transfer:");
			pDC->TextOut(x,y+16*wide,pTemp->transfer);
			pDC->TextOut(x,y+18*wide,"study_number:");
			pDC->TextOut(x,y+19*wide,pTemp->study_number);
			pDC->TextOut(x,y+21*wide,"study_data:");
			pDC->TextOut(x,y+22*wide,pTemp->study_data);
			
			pDC->TextOut(x+300,y,"windows center:");
			pDC->TextOut(x+300,y+wide,pTemp->window_center);
			pDC->TextOut(x+300,y+3*wide,"windows wide:");
			pDC->TextOut(x+300,y+4*wide,pTemp->window_width);
			
			pTemp = pTemp->pNext;
					
		}
		//	*/
	/*
		pTemp = imageDicm.p_DcmData;
		for(i=imageDicm.frame_number;i>0;i--)
		{
			for(y=0;y<256;y++)
				for(x=0;x<256;x++)
				{
					int color;
					color = pTemp->pixel[x][y];
					pDC->SetPixel(y+(pTemp->image_orderID-1)%3*256,x+(pTemp->image_orderID-1)/3*256,RGB(color,color,color));
				}
			pTemp = pTemp->pNext;
		}
		*/
	
	}
}
/////////////////////////////////////////////////////////////////////////////
// CDcmView printing

BOOL CDcmView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CDcmView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CDcmView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CDcmView diagnostics

#ifdef _DEBUG
void CDcmView::AssertValid() const
{
	CView::AssertValid();
}

void CDcmView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CDcmDoc* CDcmView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDcmDoc)));
	return (CDcmDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDcmView message handlers

void CDcmView::OnFileOpen() 
{
	// TODO: Add your command handler code her
	
			CFileDialog dlg(TRUE,_T("DCM"),_T("*.DCM"),
					OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|
					OFN_ALLOWMULTISELECT,_T("CT照片(*.dcm)"));	
	if (IDOK == dlg.DoModal())
	{
		
		POSITION pos = dlg.GetStartPosition();
		while(pos!=NULL)
		{
           CString filename;
		   filename = dlg.GetNextPathName(pos);
		   imageDicm.readDcmfile(filename);
		}
	
		begin = TRUE;
	}
}

void CDcmView::OnFileSave() 
{
	// TODO: Add your command handler code here
	CFile rawfile;
	/*CFileDialog dlg(FALSE,_T("BMP"),_T("*.BMP"),
					OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|
					OFN_ALLOWMULTISELECT,_T("手术用照片(*.BMP)"));*/
	CFileDialog dlg(FALSE,_T("RAW"),_T("*.RAW"),
					OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|
					OFN_ALLOWMULTISELECT,_T("手术用照片(*.RAW)"));
	if (IDOK == dlg.DoModal())
	{
		rawfile.Open(dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite);
		int i,j;
		DcmData* pTemp;
		/*rawfile.Write(&imageDicm.bmphead.bfType,2);
		rawfile.Write(&imageDicm.bmphead.bfSize,4);
		rawfile.Write(&imageDicm.bmphead.bfReserved,4);
		rawfile.Write(&imageDicm.bmphead.bfOffBits,4);
		rawfile.Write(&imageDicm.bmphead.biSize,4);
		rawfile.Write(&imageDicm.bmphead.biWidth,4);
		rawfile.Write(&imageDicm.bmphead.biHeight,4);
		rawfile.Write(&imageDicm.bmphead.biPlanes,2);
		rawfile.Write(&imageDicm.bmphead.biBitCount,2);
		rawfile.Write(&imageDicm.bmphead.biCompression,4);
		rawfile.Write(&imageDicm.bmphead.biSizeImage,4);
		rawfile.Write(&imageDicm.bmphead.biXPelsPerMeter,4);
		rawfile.Write(&imageDicm.bmphead.biYPelsPerMeter,4);
		rawfile.Write(&imageDicm.bmphead.biClrUsed,4);
		rawfile.Write(&imageDicm.bmphead.biClrImportant,4);
		for (j=0;j<256;j++)
		{
			rawfile.Write(&imageDicm.bmphead.bmiColors[j],4);
		}*/
		for(i=1;i<=imageDicm.frame_number;i++)
		{
			pTemp = imageDicm.p_DcmData;
			for (;pTemp->image_orderID != i;)
			{pTemp = pTemp->pNext;}
			for (j=255;j>=0;j--)
			{
				rawfile.Write(pTemp->pixel[j],256);
			}
		}
		rawfile.Close();
	}

}

⌨️ 快捷键说明

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