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