// DICOMDlg.cpp : implementation file // #include "stdafx.h" // #include "DICOM.h" // #include "DICOMDlg.h" // #include "LoadODlg.h" // #include "SaveODlg.h" // #include "InEleDlg.h" // #include "InModDlg.h" // #include "VRTabDlg.h" // #include "UITabDlg.h" // #include "TaTabDlg.h" // #include "IOTabDlg.h" // #include "editdlg.h" // #include "AnnSaveDlg.h" // #include "AnnLoadDlg.h" // #include "AnnDeleteDlg.h" // // #include "leadraster.h" #include "CGrpsDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define IMAGE_ITEM 0 #define IMAGE_FOLDER_CLOSED 1 #define IMAGE_FOLDER_OPEN 2 const WCHAR BASED_CODE _szLicString[] = L"LEADTOOLS OCX Copyright (c) 1991-2004 LEAD Technologies, Inc."; extern CDICOMApp theApp; ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDICOMDlg dialog CDICOMDlg::CDICOMDlg(CWnd* pParent /*=NULL*/) : CDialog(CDICOMDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDICOMDlg) //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_pRasterProcess=NULL; m_pRasterAnn = NULL; m_pAnnToolBar = NULL; m_bToolBarVisible = FALSE; m_nTag = 0; m_dwCookie = 0; m_dwCookieAnn = 0; } void CDICOMDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDICOMDlg) DDX_Control(pDX, IDC_LIST2, m_List2); DDX_Control(pDX, IDC_LIST1, m_List1); DDX_Control(pDX, IDC_TREE1, m_TreeView1); DDX_Control(pDX, IDC_EDIT4, m_Text4); DDX_Control(pDX, IDC_EDIT3, m_Text3); DDX_Control(pDX, IDC_EDIT2, m_Text2); DDX_Control(pDX, IDC_EDIT1, m_Text1); DDX_Control(pDX, IDC_LEADRASTERVIEW1, m_LEADRasterView1); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDICOMDlg, CDialog) //{{AFX_MSG_MAP(CDICOMDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_COMMAND(ID_FILE_EXIT, OnFileExit) ON_COMMAND(ID_DATASET_DATASETINFO, OnDatasetDatasetinfo) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_FILE_CLOSE, OnFileClose) ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree1) ON_NOTIFY(TVN_ITEMEXPANDED, IDC_TREE1, OnItemexpandedTree1) ON_COMMAND(ID_FILE_SAVE, OnFileSave) ON_COMMAND(ID_OPTIONS_CONFORMANCETEST, OnOptionsConformancetest) ON_COMMAND(ID_VIEW_LOWLEVELTREE, OnViewLowleveltree) ON_COMMAND(ID_VIEW_HIGHLEVEL, OnViewHighlevel) ON_COMMAND(ID_DATASET_INSERTELEMENT, OnDatasetInsertelement) ON_COMMAND(ID_DATASET_DELETEELEMENT, OnDatasetDeleteelement) ON_COMMAND(ID_DATASET_INSERTMODULE, OnDatasetInsertmodule) ON_COMMAND(ID_DATASET_DELETEMODULE, OnDatasetDeletemodule) ON_COMMAND(ID_OPTIONS_LOAD, OnOptionsLoad) ON_COMMAND(ID_OPTIONS_SAVE, OnOptionsSave) ON_COMMAND(ID_VIEWOPTIONS_NORMAL, OnViewoptionsNormal) ON_COMMAND(ID_VIEWOPTIONS_FIT, OnViewoptionsFit) ON_COMMAND(ID_VIEWOPTIONS_ZOOMIN_2X, OnViewoptionsZoomin2x) ON_COMMAND(ID_VIEWOPTIONS_ZOOMIN_4X, OnViewoptionsZoomin4x) ON_COMMAND(ID_VIEWOPTIONS_ZOOMOUT_12X, OnViewoptionsZoomout12x) ON_COMMAND(ID_VIEWOPTIONS_ZOOMOUT_14X, OnViewoptionsZoomout14x) ON_COMMAND(ID_VIEWOPTIONS_ANIMATION_PLAYANIMATION, OnViewoptionsAnimationPlayanimation) ON_COMMAND(ID_VIEWOPTIONS_ANIMATION_ANIMATIONLOOP, OnViewoptionsAnimationAnimationloop) ON_COMMAND(ID_VIEWOPTIONS_ANIMATION_FIRSTFRAME, OnViewoptionsAnimationFirstframe) ON_COMMAND(ID_VIEWOPTIONS_ANIMATION_NEXTFRAME, OnViewoptionsAnimationNextframe) ON_COMMAND(ID_VIEWOPTIONS_ANIMATION_PREVIOUSFRAME, OnViewoptionsAnimationPreviousframe) ON_COMMAND(ID_VIEWOPTIONS_ANIMATION_LASTFRAME, OnViewoptionsAnimationLastframe) ON_COMMAND(ID_TABLES_VALUEREPRESENTATIONVR, OnTablesValuerepresentationvr) ON_COMMAND(ID_TABLES_UNIQUEIDENTIFIERUID, OnTablesUniqueidentifieruid) ON_COMMAND(ID_TABLES_ELEMENTTAG, OnTablesElementtag) ON_COMMAND(ID_TABLES_INFORMATIONOBJECTDEFINITIONIOD, OnTablesInformationobjectdefinitioniod) ON_COMMAND(ID_VIEWOPTIONS_IMAGEINFO, OnViewoptionsImageInfo) ON_COMMAND(ID_FLIP, OnFlip) ON_COMMAND(ID_REVERSE, OnReverse) ON_COMMAND(ID_ROTATE, OnRotate) ON_COMMAND(ID_RESIZE, OnResize) ON_COMMAND(ID_GRAYSCALE8, OnGrayscale8) ON_COMMAND(ID_GRAYSCALE12, OnGrayscale12) ON_COMMAND(ID_GRAYSCALE16, OnGrayscale16) ON_COMMAND(ID_WINDOWLEVEL, OnWindowLevel) ON_COMMAND(ID_INVERT, OnInvert) ON_COMMAND(ID_DATASET_EDITVALUE, OnDatasetEditvalue) ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnDblclkTree1) ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList1) ON_COMMAND(ID_ANNOTATION_TOOLBAR, OnAnntool) ON_COMMAND(ID_ANNOTATION_ANNSAVE, OnAnnotationAnnsave) ON_COMMAND(ID_ANNOTATION_ANNLOAD, OnAnnotationAnnload) ON_COMMAND(ID_ANNOTATION_ANNDELETE, OnAnnotationAnndelete) ON_COMMAND(ID_ANNOTATION_ANNCOUNT, OnAnnotationAnncount) ON_WM_INITMENUPOPUP() ON_COMMAND(ID_ANNOTATION_DESIGN, OnAnnotationDesign) ON_COMMAND(ID_ANNOTATION_RUN, OnAnnotationRun) ON_WM_CLOSE() ON_COMMAND(ID_HISTOGRAM_STRETCHINTENSITY, OnHistogramStretchIntensity) ON_COMMAND(ID_INTENSITYDETECT, OnIntensityDetect) ON_COMMAND(ID_ADJUST_BRIGHTNESS, OnAdjustBrightness) ON_COMMAND(ID_ADJUST_CONTRAST, OnAdjustContrast) ON_COMMAND(ID_ADJUST_HUE, OnAdjustHue) ON_COMMAND(ID_ADJUST_SATURATION, OnAdjustSaturation) ON_COMMAND(ID_ADJUST_GAMMA, OnAdjustGamma) ON_COMMAND(ID_TRANSFORM_HALFTONE, OnTransformHalftone) ON_COMMAND(ID_TRANSFORM_COLORRESOLUTION, OnTransformColorResolution) ON_COMMAND(ID_HISTOGRAM_EQUALIZE, OnHistogramEqualize) ON_COMMAND(ID_HISTOGRAM_CONTRAST, OnHistogramContrast) ON_COMMAND(ID_TABLES_CONTEXTGROUPS, OnTablesContextGroups) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDICOMDlg message handlers BOOL CDICOMDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon UNLOCKSUPPORT(m_LEADRasterView1.GetRaster()); if(m_LEADRasterView1.GetRaster().IsSupportLocked(L_SUPPORT_MEDICAL)) { AfxMessageBox("Medical-Express support must be unlocked for this demo!"); EndDialog(-1); } m_LEADRasterView1.SetDoubleBuffer(VARIANT_TRUE); BSTR lpLic = SysAllocString(_szLicString); ILEADDicomFactory *pFactory=NULL; CoCreateInstance(CLSID_LEADDicomFactory, NULL, CLSCTX_ALL, IID_ILEADDicomFactory, (void**)&pFactory); #if _MSC_VER < 1200 m_pLEADDicomDS = (ILEADDicomDS*)pFactory->CreateObject("LEADDicomDS.LEADDicomDS", lpLic); #else ILEADDicomDSPtr spLEADDicomDS=NULL; spLEADDicomDS = pFactory->CreateObject("LEADDicomDS.LEADDicomDS", lpLic); m_pLEADDicomDS = spLEADDicomDS; m_pLEADDicomDS->AddRef();//because when spLEADDicomDS goes out of scope, it will auto Release()! #endif pFactory->Release(); SysFreeString(lpLic); m_pLEADDicomDS->EnableMethodErrors = FALSE; //Instantiate the sink class and hold a pointer to it. m_pDicomDSSink = new CDicomDSSink; m_pDicomDSSink->m_pDlg = this; //Establish a connection between source and sink. LPUNKNOWN pUnkSink = m_pDicomDSSink->GetIDispatch(FALSE); AfxConnectionAdvise(m_pLEADDicomDS, DIID__LEADDicomDSEvents, pUnkSink, FALSE, &m_dwCookie); HRESULT hr; m_pRasterProcess=NULL; hr = CoCreateInstance(CLSID_LEADRasterProcess, NULL, CLSCTX_ALL, IID_ILEADRasterProcess, (void**)&m_pRasterProcess); m_pRasterProcess->EnableMethodErrors = FALSE; hr = CoCreateInstance(CLSID_LEADRasterAnnotation, NULL, CLSCTX_ALL, IID_ILEADRasterAnnotation, (void**)&m_pRasterAnn); m_pRasterAnn->EnableMethodErrors = FALSE; m_pRasterAnn->PutEnableMethodErrors (VARIANT_FALSE); IDispatch *pDispatch=NULL; (m_LEADRasterView1.GetControlUnknown())->QueryInterface(IID_IDispatch, (void**)&pDispatch); m_pRasterAnn->PutAnnParentRasterView(pDispatch); if(pDispatch) pDispatch->Release(); //Instantiate the sink class and hold a pointer to it. m_pRasterAnnSink = new CRasterAnnSink; m_pRasterAnnSink->m_pDlg = this; //Establish a connection between source and sink. pUnkSink = m_pRasterAnnSink->GetIDispatch(FALSE); AfxConnectionAdvise(m_pRasterAnn, DIID__LEADRasterAnnotationEvents, pUnkSink, FALSE, &m_dwCookieAnn); m_pLEADDicomDS->EnableProgressEvent = FALSE; m_spRasterDlgKrn.CreateInstance(__uuidof(LEADRasterDlgKrn)); m_spRasterDlgKrn->EnableMethodErrors = VARIANT_FALSE; m_spRasterDlgKrn->InitDlg(0); m_spRasterDlgImg.CreateInstance(__uuidof(LEADRasterDlgImg)); m_spRasterDlgImg->EnableMethodErrors = VARIANT_FALSE; m_spRasterDlgClr.CreateInstance(__uuidof(LEADRasterDlgClr)); m_spRasterDlgClr->EnableMethodErrors = VARIANT_FALSE; m_spRasterDlgImgEfx.CreateInstance(__uuidof(LEADRasterDlgImgEfx)); m_spRasterDlgImgEfx->EnableMethodErrors = VARIANT_FALSE; GetWindowText(m_szCaption); m_LEADRasterView1.SetEnableMethodErrors(FALSE); m_LEADRasterView1.SetAppearance(1); m_LEADRasterView1.ShowWindow(SW_HIDE); CRect rcWin; m_List1.GetWindowRect(&rcWin); ScreenToClient(rcWin); m_LEADRasterView1.SetWindowPos(NULL, rcWin.left, rcWin.top, rcWin.Width(), rcWin.Height(), SWP_NOZORDER); m_bDSOpen = FALSE; m_bHighLevel = FALSE; m_bBitmap = FALSE; m_bModule = FALSE; UpdateMenuStatus(); m_LoadFlags = 0; m_SaveFlags = 0; m_nLoadVR = 0; m_nLoadTransfer = 0; m_nLoadMeta = 0; m_nSaveVR = 0; m_nSaveTransfer = 0; m_nSaveMeta = 0; m_nSaveGroupLen = 0; m_nSaveLenEncoding = 0; m_nSaveCompression = DICOM_IMAGE_COMPRESSION_NONE; m_nSavePhotometric = DICOM_IMAGE_PHOTOMETRIC_RGB; m_nSaveBitsPerPixel= 24; m_nSaveQFactor = 2; m_Text1.SetWindowText(""); m_Text2.SetWindowText(""); m_Text3.SetWindowText(""); m_Text4.SetWindowText(""); m_List1.ResetContent(); m_pLEADDicomDS->InitDS(DICOM_CLASS_UNKNOWN, 0); m_hSelectedItem = NULL; // init the image list m_ImageList.Create(16,16,FALSE,3,3); m_ImageList.Add(theApp.LoadIcon(MAKEINTRESOURCE(IDI_IMAGE))); m_ImageList.Add(theApp.LoadIcon(MAKEINTRESOURCE(IDI_FOLDER_CLOSED))); m_ImageList.Add(theApp.LoadIcon(MAKEINTRESOURCE(IDI_FOLDER_OPEN))); m_TreeView1.SetImageList(&m_ImageList, TVSIL_NORMAL); m_pRasterAnn->AnnUserMode = ANN_USERMODE_DESIGN; m_pLEADDicomDS->EnableProgressEvent = TRUE; return TRUE; // return TRUE unless you set the focus to a control } void CDICOMDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CDICOMDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CDICOMDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CDICOMDlg::OnFileExit() { EndDialog(IDOK); } void CDICOMDlg::OnDatasetDatasetinfo() { CString szClass; CString szFlags; short nRet; IDicomIODItemPtr pIOD=NULL; CString szOut; m_pLEADDicomDS->GetInfoDS(); nRet = m_pLEADDicomDS->FindClassIOD(m_pLEADDicomDS->GetInfoClass()); if(nRet != 0) { AfxMessageBox("Error"); return; } pIOD = m_pLEADDicomDS->GetCurrentIOD(); szClass = (LPCSTR)pIOD->GetName(); szFlags.Format("%4X", m_pLEADDicomDS->GetInfoFlags()); szOut.Format("Class: %s\nFlags: %s", szClass, szFlags); AfxMessageBox(szOut); } void CDICOMDlg::OnFileOpen() { short nRet; HCURSOR hOldCursor=NULL; static char BASED_CODE szFilter[] = "AllFiles (*.*)|*.*|Dicom Files (*.dic)|*.dic||"; //load a Data Set CFileDialog MSCommDlg(TRUE, "dic", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter); MSCommDlg.m_ofn.lpstrTitle = "Load a DICOM File"; m_bDSOpen = FALSE; if(MSCommDlg.DoModal()==IDOK) { m_bQuit = FALSE; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); m_pLEADDicomDS->EnableProgressEvent = TRUE; nRet = m_pLEADDicomDS->LoadDS((LPCTSTR)MSCommDlg.GetFileName(), m_LoadFlags); m_pLEADDicomDS->EnableProgressEvent = FALSE; SetCursor(hOldCursor); if(nRet != 0) { CString szOut; szOut.Format("Error %d loading file.\nNot a DICOM file!", nRet); AfxMessageBox(szOut); } else { //TestProc1(); //TestProc2(); //TestProc3(); //TestProc4(); //TestProc5(); //TestProc6(); //TestProc7(); //TestProc8(); //TestProc9(); //TestProc10(); IDicomImageInfoPtr pImageInfo=NULL; m_pLEADDicomDS->FindFirstElement(TAG_PIXEL_DATA, FALSE); m_pLEADDicomDS->GetImageInformation(0); pImageInfo = m_pLEADDicomDS->GetImageInfo(); m_nSaveCompression = pImageInfo->Compression; m_nSavePhotometric = pImageInfo->Photometric; m_nSaveBitsPerPixel = (short)pImageInfo->BitsPerPixel; m_nSaveQFactor = 2; CString szCaption; szCaption = m_szCaption + " - " + MSCommDlg.GetFileName(); SetWindowText(szCaption); hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); FillTreeHighLevel(); SetCursor(hOldCursor); m_hSelectedItem = m_TreeView1.GetRootItem(); if(!m_hSelectedItem) goto FILLTREEERROR; m_pLEADDicomDS->SetCurrentElement((long)m_TreeView1.GetItemData(m_hSelectedItem)); DisplayElement(m_TreeView1.GetItemText(m_hSelectedItem)); m_TreeView1.SetFocus(); UpdateMenuStatus(); m_bDSOpen = TRUE; } } return; FILLTREEERROR: AfxMessageBox("There was an error reading the Data Set!"); m_bDSOpen = FALSE; UpdateMenuStatus(); } void CDICOMDlg::OnFileClose() { m_bDSOpen = FALSE; //close the current Data Set m_pLEADDicomDS->ResetDS(); m_TreeView1.DeleteAllItems(); SetWindowText(m_szCaption); m_Text1.SetWindowText(""); m_Text2.SetWindowText(""); m_Text3.SetWindowText(""); m_Text4.SetWindowText(""); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); UpdateMenuStatus(); } void CDICOMDlg::FillTreeLowLevel() { short nRet; m_TreeView1.DeleteAllItems(); //move to root of tree nRet = m_pLEADDicomDS->MoveFirstElement(FALSE); //move to first Element in Data Set nRet = m_pLEADDicomDS->MoveRootElement(); //get the root of this element if(nRet != 0) { AfxMessageBox("Error Reading Data Set!"); return; } //now, add the Elements FillSubTreeLowLevel(NULL); m_bHighLevel = FALSE; return; } void CDICOMDlg::FillSubTreeLowLevel(HTREEITEM hParent) { short nRet; HTREEITEM hItem=NULL; CString szText; IDicomDSElementPtr pCurrentElement=NULL; //add the node to the tree pCurrentElement = m_pLEADDicomDS->GetCurrentElement(); nRet = m_pLEADDicomDS->FindTag(pCurrentElement->GetTag()); if(nRet == 0) { ILEADDicomTagPtr pCurrentTag=NULL; pCurrentTag = m_pLEADDicomDS->GetCurrentTag(); szText = (LPCSTR)pCurrentTag->GetName(); } else szText = "Item"; CString szTemp; szTemp.Format("%04X:%04X - ", GETGROUP(pCurrentElement->GetTag()), GETELEMENT(pCurrentElement->GetTag())); szText = szTemp + szText; if(hParent) hItem = m_TreeView1.InsertItem(szText, hParent); else hItem = m_TreeView1.InsertItem(szText); if(!hItem) { AfxMessageBox("Error"); return; } m_TreeView1.SetItemData(hItem, pCurrentElement->GethElement()); m_TreeView1.SetItemImage(hItem, IMAGE_ITEM, IMAGE_ITEM); nRet = m_pLEADDicomDS->MoveChildElement(); //does this node have a child? if(nRet == 0) { m_TreeView1.SetItemImage(hItem, IMAGE_FOLDER_CLOSED, IMAGE_FOLDER_CLOSED); FillSubTreeLowLevel(hItem); } //move to next node in same level (if one) nRet = m_pLEADDicomDS->MoveNextElement(TRUE); if(nRet == 0) FillSubTreeLowLevel(hParent); else { //move back to parent m_pLEADDicomDS->MoveParentElement(); } return; } void CDICOMDlg::DisplayElement(CString NodeText) { CString msg; short nRet; CString szTag; CString szVR; CString szVRString; long lCount; CString szDisplay; HCURSOR hOldCursor=NULL; IDicomDSElementPtr pCurrentElement=NULL; m_bAnimation = FALSE; pCurrentElement = m_pLEADDicomDS->GetCurrentElement(); if(pCurrentElement==NULL) return; //display info szDisplay = NodeText; m_Text1.SetWindowText(szDisplay); nRet = m_pLEADDicomDS->FindVR(pCurrentElement->GetVR()); if(nRet == 0) { IDicomVRItemPtr pCurrentVR=NULL; pCurrentVR = m_pLEADDicomDS->GetCurrentVR(); szVR = (LPCSTR)pCurrentVR->GetName(); } else szVR = "Unknown"; switch(pCurrentElement->GetVR()) { case VR_AE: szVRString.Format("AE - %s", szVR); break; case VR_AS: szVRString.Format("AS - %s", szVR); break; case VR_AT: szVRString.Format("AT - %s", szVR); break; case VR_CS: szVRString.Format("CS - %s", szVR); break; case VR_DA: szVRString.Format("DA - %s", szVR); break; case VR_DS: szVRString.Format("DS - %s", szVR); break; case VR_DT: szVRString.Format("DT - %s", szVR); break; case VR_FD: szVRString.Format("FD - %s", szVR); break; case VR_FL: szVRString.Format("FL - %s", szVR); break; case VR_IS: szVRString.Format("IS - %s", szVR); break; case VR_LO: szVRString.Format("LO - %s", szVR); break; case VR_LT: szVRString.Format("LT - %s", szVR); break; case VR_OB: szVRString.Format("OB - %s", szVR); break; case VR_OW: szVRString.Format("OW - %s", szVR); break; case VR_PN: szVRString.Format("PN - %s", szVR); break; case VR_SH: szVRString.Format("SH - %s", szVR); break; case VR_SL: szVRString.Format("SL - %s", szVR); break; case VR_SQ: szVRString.Format("SQ - %s", szVR); break; case VR_SS: szVRString.Format("SS - %s", szVR); break; case VR_ST: szVRString.Format("ST - %s", szVR); break; case VR_TM: szVRString.Format("TM - %s", szVR); break; case VR_UI: szVRString.Format("UI - %s", szVR); break; case VR_UL: szVRString.Format("UL - %s", szVR); break; case VR_UN: szVRString.Format("UN - %s", szVR); break; case VR_US: szVRString.Format("US - %s", szVR); break; case VR_UT: szVRString.Format("UT - %s", szVR); break; default: szVRString.Format("US - %s", szVR); break; } m_Text2.SetWindowText(szVRString); lCount = pCurrentElement->GetLength(); szDisplay.Format("%ld", lCount); m_Text3.SetWindowText(szDisplay); hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); lCount = m_pLEADDicomDS->GetValueCount(); SetCursor(hOldCursor); szDisplay.Format("%ld", lCount); m_Text4.SetWindowText(szDisplay); switch(pCurrentElement->GetVR()) { case VR_OB: case VR_SQ: case VR_UN: lCount = m_pLEADDicomDS->GetBitmapCount(); if(lCount == 1) DisplayBitmap(); else if(lCount > 1) DisplayBitmapList(); else DisplayValues(); break; case VR_OW: case VR_SS: case VR_US: lCount = m_pLEADDicomDS->GetBitmapCount(); if(lCount == 1) DisplayBitmap(); else if(lCount > 1) DisplayBitmapList(); else DisplayValues(); break; case VR_AT: case VR_IS: case VR_SL: case VR_UL: DisplayValues(); break; case VR_FL: DisplayValues(); break; case VR_DS: case VR_FD: DisplayValues(); break; case VR_AE: case VR_CS: case VR_LO: case VR_LT: case VR_SH: case VR_ST: case VR_UI: case VR_UT: case VR_PN: DisplayValues(); break; case VR_AS: DisplayValues(); break; case VR_DA: DisplayValues(); break; case VR_TM: DisplayValues(); break; case VR_DT: DisplayValues(); break; default: lCount = m_pLEADDicomDS->GetBitmapCount(); if(lCount == 1) DisplayBitmap(); else if(lCount > 1) DisplayBitmapList(); else DisplayBinary(); break; } if(m_LEADRasterView1.GetRaster().GetBitmap()) m_bBitmap = TRUE; else m_bBitmap = FALSE; UpdateMenuStatus(); return; } void CDICOMDlg::DisplayValues() { short nRet; long lCount; long x; CString strVal; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); m_pLEADDicomDS->EnableMethodErrors = FALSE; //get the values and display them nRet = m_pLEADDicomDS->GetConvertValue(); if(nRet == 0) { lCount = m_pLEADDicomDS->GetStringValueCount(); m_List1.ResetContent(); m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); for(x=0; xGetStringValues(x)); } } } void CDICOMDlg::DisplayBitmap() { short nRet; HCURSOR hOldCursor=NULL; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); m_List1.ShowWindow(SW_HIDE); m_LEADRasterView1.ShowWindow(SW_SHOW); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value m_bQuit = FALSE; CString szCaption; GetWindowText(szCaption); nRet = m_pLEADDicomDS->GetBitmapValue(0, 0, ORDER_RGB, DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT | DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT | DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION); SetWindowText(szCaption); if(nRet == 0) { //display the value m_LEADRasterView1.SetPaintSizeMode(PAINTSIZEMODE_NORMAL); UpdateMenuStatus(); m_LEADRasterView1.GetRaster().SetRefBitmap(TRUE); m_LEADRasterView1.GetRaster().SetBitmap(m_pLEADDicomDS->GetBitmap()); m_LEADRasterView1.GetRaster().SetRefBitmap(FALSE); m_pLEADDicomDS->Bitmap = 0; m_bAnimation = FALSE; } else AfxMessageBox("Error reading bitmap!"); SetCursor(hOldCursor); } void CDICOMDlg::DisplayBitmapList() { short nRet; long lCount; HCURSOR hOldCursor=NULL; long x; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); m_List1.ShowWindow(SW_HIDE); m_LEADRasterView1.ShowWindow(SW_SHOW); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value lCount = m_pLEADDicomDS->GetBitmapCount(); for(x=0; xGetBitmapValue(x, 0, ORDER_RGB, DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT | DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT | DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION); if(nRet == 0) { //display the value m_LEADRasterView1.SetPaintSizeMode(PAINTSIZEMODE_NORMAL); m_LEADRasterView1.GetRaster().InsertBitmapListItem((short)x, m_pLEADDicomDS->GetBitmap()); m_LEADRasterView1.GetRaster().SetBitmapListIndex((short)x); m_pLEADDicomDS->Bitmap = 0; m_bAnimation = TRUE; } else AfxMessageBox("Error reading bitmap list!"); } SetCursor(hOldCursor); } void CDICOMDlg::DisplayBinary() { long lCount; long x; short nRet; IDicomDSElementPtr pCurrentElement=NULL; CString szDisplay; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the byte count pCurrentElement = m_pLEADDicomDS->GetCurrentElement(); lCount = pCurrentElement->GetLength(); if(lCount > 0) { //get the bytes nRet = m_pLEADDicomDS->GetBinaryValue(lCount); if(nRet == 0) { szDisplay = ""; for(x=0; xGetBinaryValueCount(); x++) { //display each byte as a char separated by a space CString szByte; szByte.Format("%02X ", m_pLEADDicomDS->GetBinaryValue(x)); szDisplay = szDisplay + szByte; } m_List1.AddString(szDisplay); } } } void CDICOMDlg::DisplayChar() { long lCount; long x; short nRet; CString szDisplay; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value count lCount = m_pLEADDicomDS->GetValueCount(); if(lCount > 0) { //get the values nRet = m_pLEADDicomDS->GetCharValue(0, lCount); if(nRet == 0) { for(x=0; xGetCharValueCount(); x++) { IDicomDSElementPtr pCurrentElement=NULL; pCurrentElement = m_pLEADDicomDS->GetCurrentElement(); if(pCurrentElement->GetVR() == VR_OB) { CString szChar; //display each value on a separate line szChar.Format("%02X", m_pLEADDicomDS->GetCharValues(x)); m_List1.InsertString(-1, szChar); } else { CString szChar; //display each value on a separate line szChar.Format("%d", m_pLEADDicomDS->GetCharValues(x)); m_List1.InsertString(-1, szChar); } } } } } void CDICOMDlg::DisplayShort() { long lCount; long x; short nRet; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value count lCount = m_pLEADDicomDS->GetValueCount(); if(lCount > 0) { //get the values nRet = m_pLEADDicomDS->GetShortValue(0, lCount); if(nRet == 0) { for(x=0; xGetShortValueCount(); x++) { CString szShort; //display each value on a separate line szShort.Format("%d", m_pLEADDicomDS->GetShortValues(x)); m_List1.InsertString(-1, szShort); } } } } void CDICOMDlg::DisplayLong() { long lCount; long x; short nRet; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value count lCount = m_pLEADDicomDS->GetValueCount(); if(lCount > 0) { //get the values nRet = m_pLEADDicomDS->GetLongValue(0, lCount); if(nRet == 0) { for(x=0; xGetLongValueCount(); x++) { CString szLong; //display each value on a separate line szLong.Format("%ld", m_pLEADDicomDS->GetLongValues(x)); m_List1.InsertString(-1, szLong); } } } } void CDICOMDlg::DisplayFloat() { long lCount; long x; short nRet; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value count lCount = m_pLEADDicomDS->GetValueCount(); if(lCount > 0) { //get the values nRet = m_pLEADDicomDS->GetFloatValue(0, lCount); if(nRet == 0) { for(x=0; xGetFloatValueCount(); x++) { CString szFloat; //display each value on a separate line szFloat.Format("%f", m_pLEADDicomDS->GetFloatValues(x)); m_List1.InsertString(-1, szFloat); } } } } void CDICOMDlg::DisplayDouble() { long lCount; long x; short nRet; CString szDisplay; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value count lCount = m_pLEADDicomDS->GetValueCount(); if(lCount > 0) { //get the values nRet = m_pLEADDicomDS->GetDoubleValue(0, lCount); if(nRet == 0) { for(x=0; xGetDoubleValueCount(); x++) { CString szDouble; //display each value on a separate line szDouble.Format("%s%f\n", szDisplay, m_pLEADDicomDS->GetDoubleValues(x)); m_List1.InsertString(-1, szDouble); } } } } void CDICOMDlg::DisplayString() { long lCount; long x; short nRet; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value count lCount = m_pLEADDicomDS->GetValueCount(); if(lCount > 0) { //get the values nRet = m_pLEADDicomDS->GetStringValue(0, lCount); if(nRet == 0) { for(x=0; xGetStringValueCount(); x++) { CString szString; //display each value on a separate line szString = (LPCSTR) m_pLEADDicomDS->GetStringValues(x); m_List1.InsertString(-1, szString); } } } } void CDICOMDlg::DisplayAge() { short nRet; CString szDisplay; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value nRet = m_pLEADDicomDS->GetAgeValue(0, 1); if(nRet == 0) { //display the value IAGEVALUEItemPtr pAgeValue=NULL; pAgeValue = m_pLEADDicomDS->GetAgeValues(0); szDisplay.Format("Number: %d", pAgeValue->GetNumber()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Ref: %d", pAgeValue->GetReference()); m_List1.InsertString(-1, szDisplay); } } void CDICOMDlg::DisplayDate() { short nRet; CString szDisplay; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value nRet = m_pLEADDicomDS->GetDateValue(0, 1); if(nRet == 0) { //display the value IDATEVALUEItemPtr pDateValue=NULL; pDateValue = m_pLEADDicomDS->GetDateValues(0); szDisplay.Format("Year: %d", pDateValue->GetYear()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Month: %d", pDateValue->GetMonth()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Day: %d", pDateValue->GetDay()); m_List1.InsertString(-1, szDisplay); } } void CDICOMDlg::DisplayTime() { short nRet; CString szDisplay; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value nRet = m_pLEADDicomDS->GetTimeValue(0, 1); if(nRet == 0) { //display the value ITIMEVALUEItemPtr pTimeValue=NULL; pTimeValue = m_pLEADDicomDS->GetTimeValues(0); szDisplay.Format("Hours: %d", pTimeValue->GetHours()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Minutes: %d", pTimeValue->GetMinutes()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Seconds: %d", pTimeValue->GetSeconds()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Fractions: %ld", pTimeValue->GetFractions()); m_List1.InsertString(-1, szDisplay); } } void CDICOMDlg::DisplayDateTime() { short nRet; CString szDisplay; m_List1.ShowWindow(SW_SHOW); m_LEADRasterView1.ShowWindow(SW_HIDE); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); //get the value nRet = m_pLEADDicomDS->GetDateTimeValue(0, 1); if(nRet == 0) { //display the value IDATETIMEVALUEItemPtr pDateTimeValue=NULL; pDateTimeValue = m_pLEADDicomDS->GetDateTimeValues(0); szDisplay.Format("Year: %d", pDateTimeValue->GetYear()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Month: %d", pDateTimeValue->GetMonth()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Day: %d", pDateTimeValue->GetDay()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Hours: %d", pDateTimeValue->GetHours()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Minutes: %d", pDateTimeValue->GetMinutes()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Seconds: %d", pDateTimeValue->GetSeconds()); m_List1.InsertString(-1, szDisplay); szDisplay.Format("Fractions: %ld", pDateTimeValue->GetFractions()); m_List1.InsertString(-1, szDisplay); } } void CDICOMDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; long hElement=0; m_Text1.SetWindowText(""); m_Text2.SetWindowText(""); m_Text3.SetWindowText(""); m_Text4.SetWindowText(""); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); if(!m_bDSOpen) return; hElement = m_TreeView1.GetItemData(pNMTreeView->itemNew.hItem); if(hElement) m_bModule = FALSE; else m_bModule = TRUE; UpdateMenuStatus(); m_pLEADDicomDS->SetCurrentElement(hElement); if(hElement) DisplayElement(m_TreeView1.GetItemText(pNMTreeView->itemNew.hItem)); *pResult = 0; } void CDICOMDlg::OnItemexpandedTree1(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; if((pNMTreeView->itemNew.state & TVIS_EXPANDED)==TVIS_EXPANDED) m_TreeView1.SetItemImage(pNMTreeView->itemNew.hItem, IMAGE_FOLDER_OPEN, IMAGE_FOLDER_OPEN); else m_TreeView1.SetItemImage(pNMTreeView->itemNew.hItem, IMAGE_FOLDER_CLOSED, IMAGE_FOLDER_CLOSED); *pResult = 0; } #define VIEWPOS 1 #define DATASETPOS 4 #define VIEWOPTIONSPOS 5 #define PROCESSMENUPOS 6 #define ANNOTATIONMENUPOS 7 void CDICOMDlg::UpdateMenuStatus() { CMenu* pMenu; pMenu = GetMenu(); pMenu->EnableMenuItem(ID_FILE_CLOSE, m_bDSOpen?MF_BYCOMMAND|MF_ENABLED:MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_FILE_SAVE, m_bDSOpen?MF_BYCOMMAND|MF_ENABLED:MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_OPTIONS_CONFORMANCETEST, m_bDSOpen?MF_BYCOMMAND|MF_ENABLED:MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(DATASETPOS, m_bDSOpen?MF_BYPOSITION|MF_ENABLED:MF_BYPOSITION|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(VIEWPOS, m_bDSOpen?MF_BYPOSITION|MF_ENABLED:MF_BYPOSITION|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(VIEWOPTIONSPOS, m_bBitmap?MF_BYPOSITION|MF_ENABLED:MF_BYPOSITION|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(PROCESSMENUPOS, m_bBitmap?MF_BYPOSITION|MF_ENABLED:MF_BYPOSITION|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ANNOTATIONMENUPOS, m_bBitmap?MF_BYPOSITION|MF_ENABLED:MF_BYPOSITION|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_DATASET_DELETEMODULE, m_bModule?MF_BYCOMMAND|MF_ENABLED:MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_DATASET_INSERTMODULE, m_bHighLevel?MF_BYCOMMAND|MF_ENABLED:MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->CheckMenuItem(ID_VIEW_LOWLEVELTREE, m_bHighLevel?MF_BYCOMMAND|MF_UNCHECKED:MF_BYCOMMAND|MF_CHECKED); pMenu->CheckMenuItem(ID_VIEW_HIGHLEVEL, m_bHighLevel?MF_BYCOMMAND|MF_CHECKED:MF_BYCOMMAND|MF_UNCHECKED); if(m_LEADRasterView1.GetPaintSizeMode() == PAINTSIZEMODE_FIT) { pMenu->CheckMenuItem(ID_VIEWOPTIONS_FIT, MF_BYCOMMAND|MF_CHECKED); pMenu->CheckMenuItem(ID_VIEWOPTIONS_NORMAL, MF_BYCOMMAND|MF_UNCHECKED); } else if(m_LEADRasterView1.GetPaintSizeMode() == PAINTSIZEMODE_NORMAL) { pMenu->CheckMenuItem(ID_VIEWOPTIONS_NORMAL, MF_BYCOMMAND|MF_CHECKED); pMenu->CheckMenuItem(ID_VIEWOPTIONS_FIT, MF_BYCOMMAND|MF_UNCHECKED); } else { pMenu->CheckMenuItem(ID_VIEWOPTIONS_NORMAL, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_VIEWOPTIONS_FIT, MF_BYCOMMAND|MF_UNCHECKED); } pMenu->CheckMenuItem(ID_VIEWOPTIONS_ANIMATION_ANIMATIONLOOP, m_LEADRasterView1.GetAnimationLoop()?MF_BYCOMMAND|MF_CHECKED:MF_BYCOMMAND|MF_UNCHECKED); pMenu->EnableMenuItem(ID_WINDOWLEVEL, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); if (m_LEADRasterView1.GetRaster().GetBitmap() && m_LEADRasterView1.GetRaster().GetIsGrayscale() != GRAY_NO) { if (m_LEADRasterView1.GetRaster().GetBitmapBits() == 12 || m_LEADRasterView1.GetRaster().GetBitmapBits() == 16) pMenu->EnableMenuItem(ID_WINDOWLEVEL, MF_BYCOMMAND | MF_ENABLED); } if(m_bAnimation) { short nFrame; short nCount; pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_PLAYANIMATION, MF_BYCOMMAND|MF_ENABLED); pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_ANIMATIONLOOP, MF_BYCOMMAND|MF_ENABLED); nFrame = m_LEADRasterView1.GetRaster().GetBitmapListIndex(); nCount = m_LEADRasterView1.GetRaster().GetBitmapListCount(); pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_FIRSTFRAME, (nFrame>0) ?MF_BYCOMMAND|MF_ENABLED:MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_PREVIOUSFRAME, (nFrame>0) ?MF_BYCOMMAND|MF_ENABLED:MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_NEXTFRAME, (nFrameEnableMenuItem(ID_VIEWOPTIONS_ANIMATION_LASTFRAME, (nFrameEnableMenuItem(ID_VIEWOPTIONS_ANIMATION_PLAYANIMATION, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_ANIMATIONLOOP, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_FIRSTFRAME, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_NEXTFRAME, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_PREVIOUSFRAME, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); pMenu->EnableMenuItem(ID_VIEWOPTIONS_ANIMATION_LASTFRAME, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); } DrawMenuBar(); } void CDICOMDlg::OnFileSave() { short nRet; HCURSOR hOldCursor=NULL; TCHAR szFilters[] =_T ("DICOM Files (*.dcm)|*.dcm|All files (*.*)|*.*||"); CFileDialog FileSave( FALSE, _T ("dcm"), _T ("*.dcm"), OFN_OVERWRITEPROMPT, szFilters); if(FileSave.DoModal() == IDOK) { hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); BSTR bstr=NULL; bstr = FileSave.GetFileName().AllocSysString(); nRet = m_pLEADDicomDS->SaveDS(bstr, m_SaveFlags); SysFreeString(bstr); SetCursor(hOldCursor); if(nRet != 0) { CString szOut; szOut.Format("Error %d saveing file!", nRet); AfxMessageBox(szOut); } } } void CDICOMDlg::OnOptionsConformancetest() { HCURSOR hOldCursor=NULL; //start the test m_pLEADDicomDS->EnableConformanceStatus = TRUE; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); m_pLEADDicomDS->ConformanceTestDS(); SetCursor(hOldCursor); } BEGIN_EVENTSINK_MAP(CDICOMDlg, CDialog) //{{AFX_EVENTSINK_MAP(CDICOMDlg) ON_EVENT(CDICOMDlg, IDC_LEADRASTERVIEW1, 100 /* Click */, OnClickLEADRasterView1, VTS_NONE) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() void CDICOMDlg::OnViewLowleveltree() { HCURSOR hOldCursor = NULL; if(m_bHighLevel) { m_TreeView1.DeleteAllItems(); hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); m_bDSOpen = FALSE; FillTreeLowLevel(); m_bDSOpen = TRUE; SetCursor(hOldCursor); m_hSelectedItem = m_TreeView1.GetRootItem(); m_pLEADDicomDS->SetCurrentElement((long)m_TreeView1.GetItemData(m_hSelectedItem)); DisplayElement(m_TreeView1.GetItemText(m_hSelectedItem)); m_TreeView1.SetFocus(); UpdateMenuStatus(); } } void CDICOMDlg::OnViewHighlevel() { HCURSOR hOldCursor = NULL; if(!m_bHighLevel) { m_bDSOpen = FALSE; m_TreeView1.DeleteAllItems(); hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); FillTreeHighLevel(); m_bDSOpen = TRUE; SetCursor(hOldCursor); m_TreeView1.SetFocus(); m_Text1.SetWindowText(""); m_Text2.SetWindowText(""); m_Text3.SetWindowText(""); m_Text4.SetWindowText(""); m_List1.ResetContent(); m_LEADRasterView1.GetRaster().SetBitmap(0); m_LEADRasterView1.GetRaster().SetBitmapList(0); UpdateMenuStatus(); } } void CDICOMDlg::FillTreeHighLevel() { long x; long y; long lCount; HTREEITEM hItem=NULL; m_TreeView1.DeleteAllItems(); m_List2.ResetContent(); //get the module count lCount = m_pLEADDicomDS->GetModuleCount(); m_pLEADDicomDS->GetInfoDS(); if(lCount > 0) { for(x=0; xFindIndexModule(x); pCurrentModule = m_pLEADDicomDS->GetCurrentModule(); m_pLEADDicomDS->FindModuleIOD(m_pLEADDicomDS->GetInfoClass(), pCurrentModule->GetModule()); pCurrentIOD = m_pLEADDicomDS->GetCurrentIOD(); CString cs=(LPCSTR)pCurrentIOD->GetName();; hItem = m_TreeView1.InsertItem(cs); m_TreeView1.SetItemImage(hItem, IMAGE_FOLDER_CLOSED, IMAGE_FOLDER_CLOSED); m_TreeView1.SetItemData(hItem, 0); cs = (LPCSTR)pCurrentIOD->GetName();; m_List2.InsertString(-1, cs); m_List2.SetItemData(m_List2.GetCount() - 1, pCurrentModule->GetModule()); //insert each element for(y=0; yGetElementCount(); y++) { IDicomDSElementPtr pElement=NULL; pElement = pCurrentModule->GetElement(y); m_pLEADDicomDS->SetCurrentElement(pElement->GethElement()); FillSubTreeHighLevel(hItem, FALSE); } } } else { AfxMessageBox("Error - No Modules in this Data Set!"); FillTreeLowLevel(); return; } m_bHighLevel = TRUE; return; } void CDICOMDlg::FillSubTreeHighLevel(HTREEITEM hParent, BOOL bRecurse) { short nRet; HTREEITEM hItem=NULL; CString szText; IDicomDSElementPtr pCurrentElement=NULL; ILEADDicomTagPtr pCurrentTag=NULL; //add the node to the tree pCurrentElement = m_pLEADDicomDS->GetCurrentElement(); nRet = m_pLEADDicomDS->FindTag(pCurrentElement->GetTag()); pCurrentTag = m_pLEADDicomDS->GetCurrentTag(); if(nRet == 0) { szText = (LPCSTR)pCurrentTag->GetName(); } else szText = "Item"; if(hParent) hItem = m_TreeView1.InsertItem(szText, hParent); else hItem = m_TreeView1.InsertItem(szText); if(!hItem) { AfxMessageBox("Error"); return; } m_TreeView1.SetItemData(hItem, pCurrentElement->GethElement()); m_TreeView1.SetItemImage(hItem, IMAGE_ITEM, IMAGE_ITEM); nRet = m_pLEADDicomDS->MoveChildElement(); //does this node have a child? if(nRet == 0) { m_TreeView1.SetItemImage(hItem, IMAGE_FOLDER_CLOSED, IMAGE_FOLDER_CLOSED); FillSubTreeHighLevel(hItem, TRUE); } if(bRecurse) { //move to next node in same level (if one) nRet = m_pLEADDicomDS->MoveNextElement(TRUE); if(nRet == 0) FillSubTreeHighLevel(hParent, TRUE); else //move back to parent m_pLEADDicomDS->MoveParentElement(); } return; } void CDICOMDlg::OnDatasetInsertelement() { short nRet; HTREEITEM hItem = NULL; HCURSOR hOldCursor = NULL; CInsElementDlg InsertElementDlg; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); InsertElementDlg.m_pLEADDicomDS = m_pLEADDicomDS; if(InsertElementDlg.DoModal() == IDOK) { ILEADDicomTagPtr pCurrentTag=NULL; IDicomDSElementPtr pCurrentElement=NULL; //insert the new element m_pLEADDicomDS->FindTag(InsertElementDlg.m_lTagCode); pCurrentTag = m_pLEADDicomDS->GetCurrentTag(); nRet = m_pLEADDicomDS->InsertElement(InsertElementDlg.m_bChild, InsertElementDlg.m_lTagCode, pCurrentTag->GetVR(), InsertElementDlg.m_bSequence, ELEMENT_INDEX_MAX); if(nRet != 0) AfxMessageBox("Error Inserting Element"); else { //update the tree view m_hSelectedItem = m_TreeView1.GetSelectedItem(); if(InsertElementDlg.m_bChild) hItem = m_TreeView1.InsertItem(pCurrentTag->GetName(), m_hSelectedItem); else hItem = m_TreeView1.InsertItem(pCurrentTag->GetName()); pCurrentElement = m_pLEADDicomDS->GetCurrentElement(); m_TreeView1.SetItemData(hItem, pCurrentElement->GethElement()); if(InsertElementDlg.m_bSequence) m_TreeView1.SetItemImage(hItem, IMAGE_FOLDER_CLOSED, IMAGE_FOLDER_CLOSED); else m_TreeView1.SetItemImage(hItem, IMAGE_ITEM, IMAGE_ITEM); } } SetCursor(hOldCursor); } void CDICOMDlg::OnDatasetDeleteelement() { short nRet; HTREEITEM hItem=NULL; hItem = m_TreeView1.GetSelectedItem(); m_pLEADDicomDS->SetCurrentElement((long)m_TreeView1.GetItemData(hItem)); nRet = m_pLEADDicomDS->DeleteElement(); if(nRet != 0) AfxMessageBox("Error Deleting Element!"); else { //remove item from treeview m_TreeView1.DeleteItem(hItem); m_TreeView1.SetFocus(); m_hSelectedItem = m_TreeView1.GetSelectedItem(); DisplayElement(m_TreeView1.GetItemText(m_hSelectedItem)); } } void CDICOMDlg::OnDatasetInsertmodule() { HTREEITEM hItem=NULL; long y; short nRet; long x; CString szMatch; CInsModuleDlg InsertModuleDlg; CString szModule; HCURSOR hOldCursor=NULL; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); m_pLEADDicomDS->GetInfoDS(); InsertModuleDlg.m_lClass = m_pLEADDicomDS->GetInfoClass(); InsertModuleDlg.m_pLEADDicomDS = m_pLEADDicomDS; if(InsertModuleDlg.DoModal() == IDOK) { szMatch = InsertModuleDlg.m_szModule; for(x=0; xInsertModule(InsertModuleDlg.m_lModule, TRUE); if(nRet != 0) AfxMessageBox("Error Inserting Module!"); else { IDicomIODItemPtr pCurrentIOD=NULL; IDicomDSModulePtr pCurrentModule=NULL; BSTR bstr=NULL; CString cs; //Add the module to the TreeView and also insert its sub-tree nRet = m_pLEADDicomDS->FindModuleIOD(m_pLEADDicomDS->GetInfoClass(), InsertModuleDlg.m_lModule); pCurrentIOD = m_pLEADDicomDS->GetCurrentIOD(); cs = (LPCSTR)pCurrentIOD->GetName(); hItem = m_TreeView1.InsertItem(cs); m_TreeView1.SetItemImage(hItem, IMAGE_FOLDER_CLOSED, IMAGE_FOLDER_CLOSED); m_TreeView1.SetItemData(hItem, 0); m_List2.AddString(cs); pCurrentModule = m_pLEADDicomDS->GetCurrentModule(); m_List2.SetItemData(m_List2.GetCount() - 1, pCurrentModule->GetModule()); //insert each element for(y=0; yGetElementCount(); y++) { IDicomDSElementPtr pElement=NULL; pElement = pCurrentModule->GetElement(y); m_pLEADDicomDS->SetCurrentElement((long)pElement->GethElement()); FillSubTreeHighLevel(hItem, FALSE); } } } SetCursor(hOldCursor); } void CDICOMDlg::OnDatasetDeletemodule() { short nRet; CString szPath; long x; long lModule; CString szMatch; CString szItem; m_hSelectedItem = m_TreeView1.GetSelectedItem(); szMatch = m_TreeView1.GetItemText(m_hSelectedItem); for(x=0; xDeleteModule(lModule); if(nRet != 0) AfxMessageBox("Error Deleting Module!"); else { //remove item from treeview m_hSelectedItem = m_TreeView1.GetSelectedItem(); m_TreeView1.DeleteItem(m_hSelectedItem); m_hSelectedItem = m_TreeView1.GetSelectedItem(); m_TreeView1.SetFocus(); } } void CDICOMDlg::OnOptionsLoad() { CLoadOptDlg LoadOptDlg; LoadOptDlg.m_nVR = m_nLoadVR; LoadOptDlg.m_nTransfer = m_nLoadTransfer; LoadOptDlg.m_nMeta = m_nLoadMeta; if(LoadOptDlg.DoModal()==IDOK) { m_LoadFlags = LoadOptDlg.m_nFlags; m_nLoadVR = LoadOptDlg.m_nVR; m_nLoadTransfer = LoadOptDlg.m_nTransfer; m_nLoadMeta = LoadOptDlg.m_nMeta; } } void CDICOMDlg::OnOptionsSave() { CSaveOptDlg SaveOptDlg; SaveOptDlg.m_nVR = m_nSaveVR; SaveOptDlg.m_nTransfer = m_nSaveTransfer; SaveOptDlg.m_nMeta = m_nSaveMeta; SaveOptDlg.m_nGroupLen = m_nSaveGroupLen; SaveOptDlg.m_nLenEncoding = m_nSaveLenEncoding; SaveOptDlg.m_nCompression = m_nSaveCompression; SaveOptDlg.m_nPhotometric = m_nSavePhotometric; SaveOptDlg.m_nBitsPerPixel = m_nSaveBitsPerPixel; SaveOptDlg.m_nQFactor = m_nSaveQFactor; if(SaveOptDlg.DoModal()==IDOK) { m_SaveFlags = SaveOptDlg.m_nFlags; m_nSaveVR = SaveOptDlg.m_nVR; m_nSaveTransfer = SaveOptDlg.m_nTransfer; m_nSaveMeta = SaveOptDlg.m_nMeta; m_nSaveGroupLen = SaveOptDlg.m_nGroupLen; m_nSaveLenEncoding = SaveOptDlg.m_nLenEncoding; m_nSaveCompression = SaveOptDlg.m_nCompression; m_nSavePhotometric = SaveOptDlg.m_nPhotometric; m_nSaveBitsPerPixel = (short)SaveOptDlg.m_nBitsPerPixel; m_nSaveQFactor = SaveOptDlg.m_nQFactor; } } void CDICOMDlg::OnViewoptionsNormal() { m_LEADRasterView1.SetPaintSizeMode(PAINTSIZEMODE_NORMAL); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsFit() { m_LEADRasterView1.SetPaintSizeMode(PAINTSIZEMODE_FIT); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsZoomin2x() { m_LEADRasterView1.SetPaintZoomFactor(200.0f); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsZoomin4x() { m_LEADRasterView1.SetPaintZoomFactor(400.0f); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsZoomout12x() { m_LEADRasterView1.SetPaintZoomFactor(50.0f); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsZoomout14x() { m_LEADRasterView1.SetPaintZoomFactor(25.0f); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsAnimationPlayanimation() { m_LEADRasterView1.SetAnimationEnable(TRUE); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsAnimationAnimationloop() { if(m_LEADRasterView1.GetAnimationLoop()) m_LEADRasterView1.SetAnimationLoop(FALSE); else { m_LEADRasterView1.SetAnimationLoop(TRUE); m_LEADRasterView1.SetAnimationEnable(TRUE); } UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsAnimationFirstframe() { m_LEADRasterView1.GetRaster().SetBitmapListIndex(0); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsAnimationNextframe() { if(m_LEADRasterView1.GetRaster().GetBitmapListIndex() < m_LEADRasterView1.GetRaster().GetBitmapListCount() - 1) m_LEADRasterView1.GetRaster().SetBitmapListIndex(m_LEADRasterView1.GetRaster().GetBitmapListIndex() + 1); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsAnimationPreviousframe() { if(m_LEADRasterView1.GetRaster().GetBitmapListIndex() > 0) m_LEADRasterView1.GetRaster().SetBitmapListIndex(m_LEADRasterView1.GetRaster().GetBitmapListIndex() - 1); UpdateMenuStatus(); } void CDICOMDlg::OnViewoptionsAnimationLastframe() { m_LEADRasterView1.GetRaster().SetBitmapListIndex(m_LEADRasterView1.GetRaster().GetBitmapListCount() - 1); UpdateMenuStatus(); } void CDICOMDlg::OnTablesValuerepresentationvr() { HCURSOR hOldCursor=NULL; CVRTableDlg VRTableDlg; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); VRTableDlg.DoModal(); SetCursor(hOldCursor); } void CDICOMDlg::OnTablesUniqueidentifieruid() { HCURSOR hOldCursor=NULL; CUIDTableDlg UIDTableDlg; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); UIDTableDlg.DoModal(); SetCursor(hOldCursor); } void CDICOMDlg::OnTablesElementtag() { HCURSOR hOldCursor=NULL; CTagTableDlg TagTableDlg; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); TagTableDlg.DoModal(); SetCursor(hOldCursor); } void CDICOMDlg::OnTablesInformationobjectdefinitioniod() { HCURSOR hOldCursor=NULL; CIODTableDlg IODTableDlg; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); IODTableDlg.DoModal(); SetCursor(hOldCursor); } void CDICOMDlg::OnTablesContextGroups() { CContextGroupsDlg ContextGroupsDlg(*m_pLEADDicomDS); ContextGroupsDlg.DoModal(); } void CDICOMDlg::TestProc1() { long lCount; long x; short nRet; short nLen; short byteVal; CString szBytes; CString szByte; IDicomDSElementPtr pCurrentElement=NULL; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert some bytes into the element szBytes = "This is a Test 1234!"; nLen = szBytes.GetLength(); m_pLEADDicomDS->BinaryValueCount = nLen; for(x=0; xBinaryValues[x] = byteVal; } //set the bytes nRet = m_pLEADDicomDS->SetBinaryValue(nLen); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->BinaryValueCount = 0; //free the values //get the byte count pCurrentElement = m_pLEADDicomDS->GetCurrentElement(); lCount = pCurrentElement->GetLength(); CString szOut; szOut.Format("There are %ld bytes!", lCount); AfxMessageBox(szOut); //get the bytes nRet = m_pLEADDicomDS->GetBinaryValue(lCount); if(nRet == 0) { for(x=0; xGetBinaryValueCount(); x++) { //display each byte as a char separated by a space szOut.Format("%c", (char)m_pLEADDicomDS->GetBinaryValues(x)); m_List1.AddString(szOut); } } AfxMessageBox("wait"); } void CDICOMDlg::TestProc2() { long lCount; long x; short nRet; short nLen; short byteVal; CString szChars; CString szChar; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert a new element for the Char Values m_pLEADDicomDS->InsertElement(FALSE, TAG_PIXEL_DATA, VR_OB, FALSE, 0); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert some char values into the element szChars = "This is a Test 1234!"; nLen = szChars.GetLength(); m_pLEADDicomDS->CharValueCount = nLen; for(x=0; xCharValues[x] = byteVal; } //set the chars nRet = m_pLEADDicomDS->SetCharValue(nLen); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->CharValueCount = 0; //free the values //get the value count lCount = m_pLEADDicomDS->GetValueCount(); CString szOut; szOut.Format("There are %ld values!", lCount); AfxMessageBox(szOut); //get the values nRet = m_pLEADDicomDS->GetCharValue(0, lCount); if(nRet == 0) { for(x=0; xGetCharValueCount(); x++) { //display each value separated by a '.' szOut.Format("%c", (char)m_pLEADDicomDS->GetCharValues(x)); m_List1.AddString(szOut); } } AfxMessageBox("wait"); } void CDICOMDlg::TestProc3() { long lCount; long x; short nRet; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert a new element for the Short Values nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_RECORD_IN_USE_FLAG, VR_US, FALSE, 0); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert some short values into the element m_pLEADDicomDS->ShortValueCount = 5; for(x=0; x<5; x++) { m_pLEADDicomDS->ShortValues[x] = x*100; } //set the shorts nRet = m_pLEADDicomDS->SetShortValue(5); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->ShortValueCount = 0; //free the values //get the value count lCount = m_pLEADDicomDS->GetValueCount(); CString szOut; szOut.Format("There are %ld values!", lCount); AfxMessageBox(szOut); //get the values nRet = m_pLEADDicomDS->GetShortValue(0, lCount); if(nRet == 0) { for(x=0; xGetShortValueCount(); x++) { //display each value separated by a '.' szOut.Format("%ld", m_pLEADDicomDS->GetShortValues(x)); m_List1.AddString(szOut); } } AfxMessageBox("wait"); } void CDICOMDlg::TestProc4() { long lCount; long x; short nRet; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert some short values into the element m_pLEADDicomDS->LongValueCount = 5; for(x=0; x<5; x++) { m_pLEADDicomDS->LongValues[x] = x*100000; } //set the shorts nRet = m_pLEADDicomDS->SetLongValue(5); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->LongValueCount = 0; //free the values //get the value count lCount = m_pLEADDicomDS->GetValueCount(); CString szOut; szOut.Format("There are %ld values!", lCount); AfxMessageBox(szOut); //get the values nRet = m_pLEADDicomDS->GetLongValue(0, lCount); if(nRet == 0) { for(x=0; xGetLongValueCount(); x++) { //display each value separated by a '.' szOut.Format("%ld", m_pLEADDicomDS->GetLongValues(x)); m_List1.AddString(szOut); } } AfxMessageBox("wait"); } void CDICOMDlg::TestProc5() { long lCount; long x; short nRet; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert a new element for the Float Values nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_TABLE_OF_PARAMETER_VALUES, VR_FL, FALSE, 0); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert some float values into the element m_pLEADDicomDS->FloatValueCount = 5; for(x=0; x<5; x++) { m_pLEADDicomDS->FloatValues[x] = x*1.99f; } //set the floats nRet = m_pLEADDicomDS->SetFloatValue(5); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->FloatValueCount = 0; //free the values //get the value count lCount = m_pLEADDicomDS->GetValueCount(); CString szOut; szOut.Format("There are %ld values!", lCount); AfxMessageBox(szOut); //get the values nRet = m_pLEADDicomDS->GetFloatValue(0, lCount); if(nRet == 0) { for(x=0; xGetFloatValueCount(); x++) { //display each value separated by a '.' szOut.Format("%f", m_pLEADDicomDS->GetFloatValues(x)); m_List1.AddString(szOut); } } AfxMessageBox("wait"); } void CDICOMDlg::TestProc6() { long lCount; long x; short nRet; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert a new element for the Double Values nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_REFERENCE_PIXEL_PHYSICAL_VALUE_X, VR_FD, FALSE, 0); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert some Double values into the element m_pLEADDicomDS->DoubleValueCount = 5; for(x=0; x<5; x++) { m_pLEADDicomDS->DoubleValues[x] = 10 * x * 199.77; } //set the Doubles nRet = m_pLEADDicomDS->SetDoubleValue(5); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->DoubleValueCount = 0; //free the values //get the value count lCount = m_pLEADDicomDS->GetValueCount(); CString szOut; szOut.Format("There are %ld values!", lCount); AfxMessageBox(szOut); //get the values nRet = m_pLEADDicomDS->GetDoubleValue(0, lCount); if(nRet == 0) { for(x=0; xGetDoubleValueCount(); x++) { //display each value separated by a '.' szOut.Format("%f", m_pLEADDicomDS->GetDoubleValues(x)); m_List1.AddString(szOut); } } AfxMessageBox("wait"); } void CDICOMDlg::TestProc7() { long lCount; long x; short nRet; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert a new element for the String Values nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_IMAGE_TYPE, VR_CS, FALSE, 0); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert some String values into the element m_pLEADDicomDS->StringValueCount = 5; for(x=0; x<5; x++) { CString szText; szText.Format("%d", x+1); szText = "String#" + szText; BSTR bstr = szText.AllocSysString(); m_pLEADDicomDS->StringValues[x] = bstr; SysFreeString(bstr); } //set the Strings nRet = m_pLEADDicomDS->SetStringValue(5); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->StringValueCount = 0; //free the values //get the value count lCount = m_pLEADDicomDS->GetValueCount(); CString szOut; szOut.Format("There are %ld values!", lCount); AfxMessageBox(szOut); //get the values nRet = m_pLEADDicomDS->GetStringValue(0, lCount); if(nRet == 0) { for(x=0; xGetStringValueCount(); x++) { //display each value separated by a '.' m_List1.AddString(m_pLEADDicomDS->GetStringValues(x)); } } AfxMessageBox("wait"); } void CDICOMDlg::TestProc8() { long lCount; short nRet; IAGEVALUEItemPtr pAgeValue=NULL; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert a new element for the Age Values nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_PATIENT_AGE, VR_AS, FALSE, 0); //insert an Age value into the element m_pLEADDicomDS->AgeValueCount = 1; pAgeValue = m_pLEADDicomDS->GetAgeValues(0); pAgeValue->Number = 21; pAgeValue->Reference = 'Y'; //set the age nRet = m_pLEADDicomDS->SetAgeValue(1); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->AgeValueCount = 0; //free the value //get the value count lCount = m_pLEADDicomDS->GetValueCount(); CString szOut; szOut.Format("There are %ld values!", lCount); AfxMessageBox(szOut); //get the value nRet = m_pLEADDicomDS->GetAgeValue(0, lCount); //display the value pAgeValue->Release(); pAgeValue = m_pLEADDicomDS->GetAgeValues(0); szOut.Format("Number: %d", pAgeValue->GetNumber()); m_List1.AddString(szOut); szOut.Format("Reference: %c", (char)pAgeValue->GetReference()); m_List1.AddString(szOut); AfxMessageBox("wait"); } void CDICOMDlg::TestProc9() { long lCount; short nRet; IDATEVALUEItemPtr pDateValue=NULL; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert a new element for the Date Values nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_PATIENT_BIRTH_DATE, VR_DA, FALSE, 0); //insert an Date value into the element m_pLEADDicomDS->DateValueCount = 1; pDateValue = m_pLEADDicomDS->GetDateValues(0); pDateValue->Year = 1971; pDateValue->Month = 12; pDateValue->Day = 25; //set the Date nRet = m_pLEADDicomDS->SetDateValue(1); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->DateValueCount = 0; //free the value //get the value count lCount = m_pLEADDicomDS->GetValueCount(); CString szOut; szOut.Format("There are %ld values!", lCount); AfxMessageBox(szOut); //get the value nRet = m_pLEADDicomDS->GetDateValue(0, lCount); //display the value pDateValue->Release(); pDateValue = m_pLEADDicomDS->GetDateValues(0); szOut.Format("Year: %d", pDateValue->GetYear()); m_List1.AddString(szOut); szOut.Format("Month: %d", pDateValue->GetMonth()); m_List1.AddString(szOut); szOut.Format("Day: %d", pDateValue->GetDay()); m_List1.AddString(szOut); AfxMessageBox("wait"); } void CDICOMDlg::TestProc10() { long lCount; short nRet; ITIMEVALUEItemPtr pTimeValue=NULL; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); m_List1.ShowWindow(SW_SHOW); m_List1.ResetContent(); //insert a new element for the Time Values nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_PATIENT_BIRTH_TIME, VR_TM, FALSE, 0); //insert an Time value into the element m_pLEADDicomDS->TimeValueCount = 1; pTimeValue = m_pLEADDicomDS->GetTimeValues(0); pTimeValue->Hours = 12; pTimeValue->Minutes = 25; pTimeValue->Seconds = 33; pTimeValue->Fractions = 50; //set the Time nRet = m_pLEADDicomDS->SetTimeValue(1); if(nRet != 0) { AfxMessageBox("Error"); return; } m_pLEADDicomDS->TimeValueCount = 0; //free the value //get the value count lCount = m_pLEADDicomDS->GetValueCount(); CString szOut; szOut.Format("There are %ld values!", lCount); AfxMessageBox(szOut); //get the value nRet = m_pLEADDicomDS->GetTimeValue(0, lCount); //display the value pTimeValue->Release(); pTimeValue = m_pLEADDicomDS->GetTimeValues(0); szOut.Format("Hours: %d", pTimeValue->GetHours()); m_List1.AddString(szOut); szOut.Format("Minutes: %d", pTimeValue->GetMinutes()); m_List1.AddString(szOut); szOut.Format("Seconds: %d", pTimeValue->GetSeconds()); m_List1.AddString(szOut); szOut.Format("Fractions: %ld", pTimeValue->GetFractions()); m_List1.AddString(szOut); AfxMessageBox("wait"); } void CDICOMDlg::TestProcList() { short nRet; long lCount; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); //insert a new element for the Time Value nRet = m_pLEADDicomDS->FindFirstElement(TAG_PIXEL_DATA, FALSE); nRet = m_pLEADDicomDS->DeleteElement(); nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_PIXEL_DATA, VR_OB, FALSE, 0); m_List1.ShowWindow(SW_HIDE); m_LEADRasterView1.ShowWindow(SW_SHOW); //load an image ILEADRasterIO *pRasterIO=NULL; HRESULT hr; hr = CoCreateInstance(CLSID_LEADRasterIO, NULL, CLSCTX_ALL, IID_ILEADRasterIO, (void**)&pRasterIO); pRasterIO->EnableMethodErrors = FALSE; pRasterIO->Load(m_LEADRasterView1.GetRaster(), "d:\\ltwin\\images\\image1.cmp", 0, 1, 1); AfxMessageBox("Image loaded from File - Wait"); pRasterIO->Release(); //create a bitmap list BSTR lpLic = SysAllocString(_szLicString); ILEADRasterFactory *pFactory=NULL; ILEADRaster *pRaster=NULL; CoCreateInstance(CLSID_LEADRasterFactory, NULL, CLSCTX_ALL, IID_ILEADRasterFactory, (void**)&pFactory); #if _MSC_VER < 1200 pRaster = (ILEADRaster*)pFactory->CreateObject("LEADRaster.LEADRaster", lpLic); #else ILEADRasterPtr spLEADRaster=NULL; spLEADRaster = pFactory->CreateObject("LEADRaster.LEADRaster", lpLic); pRaster = spLEADRaster; pRaster->AddRef();//because when spLEADRaster goes out of scope, it will auto Release()! #endif pFactory->Release(); SysFreeString(lpLic); ILEADRasterProcess *pRasterProcess=NULL; hr = CoCreateInstance(CLSID_LEADRasterProcess, NULL, CLSCTX_ALL, IID_ILEADRasterProcess, (void**)&pRasterProcess); pRasterProcess->EnableMethodErrors = FALSE; pRaster->InsertBitmapListItem(0, m_LEADRasterView1.GetRaster().GetBitmap()); pRasterProcess->Flip(m_LEADRasterView1.GetRaster()); pRaster->InsertBitmapListItem(1, m_LEADRasterView1.GetRaster().GetBitmap()); pRasterProcess->Reverse(m_LEADRasterView1.GetRaster()); pRaster->InsertBitmapListItem(2, m_LEADRasterView1.GetRaster().GetBitmap()); pRasterProcess->Release(); //insert the image list into the element m_pLEADDicomDS->put_BitmapList(pRaster->GetBitmapList()); //set the bitmap list nRet = m_pLEADDicomDS->SetBitmapListValue(DICOM_IMAGE_COMPRESSION_NONE, 0, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT); pRaster->Release(); if(nRet != 0) { AfxMessageBox("Error"); return; } AfxMessageBox("ImageList set to Data Set - Wait"); m_pLEADDicomDS->put_BitmapList(0); //free the value AfxMessageBox("ImageList cleared from memory - Wait"); lCount = m_pLEADDicomDS->GetBitmapCount(); //get the bitmap list back if(nRet == 0) { m_pLEADDicomDS->GetBitmapListValue(0, lCount, 0, ORDER_RGB, DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT | DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT | DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION); m_LEADRasterView1.GetRaster().SetBitmapList(m_pLEADDicomDS->GetBitmapList()); m_LEADRasterView1.ForceRepaint(); } AfxMessageBox("ImageList loaded from Data Set - Wait"); } void CDICOMDlg::TestProcReplaceBitmap() { short nRet; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the first image element nRet = m_pLEADDicomDS->FindFirstElement(TAG_PIXEL_DATA, FALSE); //get the first image nRet = m_pLEADDicomDS->GetBitmapValue(0, 0, ORDER_BGR, DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT | DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT | DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION); m_LEADRasterView1.GetRaster().SetBitmap(m_pLEADDicomDS->GetBitmap()); //flip the image ILEADRasterProcess *pRasterProcess=NULL; HRESULT hr; hr = CoCreateInstance(CLSID_LEADRasterProcess, NULL, CLSCTX_ALL, IID_ILEADRasterProcess, (void**)&pRasterProcess); pRasterProcess->EnableMethodErrors = FALSE; pRasterProcess->Flip(m_LEADRasterView1.GetRaster()); pRasterProcess->Release(); //delete the first image from the dataset nRet = m_pLEADDicomDS->DeleteBitmapValue(0, 1); //now update the list with the flipped image nRet = m_pLEADDicomDS->InsertBitmapValue(m_LEADRasterView1.GetRaster().GetBitmap(), 0, DICOM_IMAGE_COMPRESSION_NONE, DICOM_IMAGE_PHOTOMETRIC_RGB, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT); } void CDICOMDlg::TestProcBitmap() { short nRet; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the root element m_pLEADDicomDS->MoveFirstElement(FALSE); m_pLEADDicomDS->MoveRootElement(); //insert a new element for the Value nRet = m_pLEADDicomDS->FindFirstElement(TAG_PIXEL_DATA, FALSE); nRet = m_pLEADDicomDS->DeleteElement(); nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_PIXEL_DATA, VR_OB, FALSE, 0); m_List1.ShowWindow(SW_HIDE); m_LEADRasterView1.ShowWindow(SW_SHOW); //load an image ILEADRasterIO *pRasterIO=NULL; HRESULT hr; hr = CoCreateInstance(CLSID_LEADRasterIO, NULL, CLSCTX_ALL, IID_ILEADRasterIO, (void**)&pRasterIO); pRasterIO->EnableMethodErrors = FALSE; pRasterIO->Load(m_LEADRasterView1.GetRaster(),"d:\\ltwin\\images\\image1.cmp", 0, 1, 1); pRasterIO->Release(); AfxMessageBox("Image loaded from File - Wait"); //insert the image into the element m_pLEADDicomDS->put_Bitmap(m_LEADRasterView1.GetRaster().GetBitmap()); //set the bitmap nRet = m_pLEADDicomDS->SetBitmapValue(m_nSaveCompression, m_nSavePhotometric, m_nSaveBitsPerPixel, m_nSaveQFactor, DICOM_SETIMAGE_AUTO_SET_VOI_LUT); if(nRet != 0) { AfxMessageBox("Error"); return; } AfxMessageBox("Image set to Data Set - Wait"); m_pLEADDicomDS->put_Bitmap(0); //free the value AfxMessageBox("Image cleared from memory - Wait"); //get the bitmap back if(nRet == 0) { m_pLEADDicomDS->GetBitmapValue(0, 0, ORDER_RGB, DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT | DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT | DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION); m_LEADRasterView1.GetRaster().SetBitmap(m_pLEADDicomDS->GetBitmap()); m_LEADRasterView1.ForceRepaint(); } AfxMessageBox("Image loaded from Data Set - Wait"); } //void CDICOMDlg::OnTest1() //{ // TestProcBitmap(); // TestProcReplaceBitmap(); // TestProcList(); // TestProcInsertBitmap(); // TestProcInsertList(); //} void CDICOMDlg::OnClickLEADRasterView1() { m_bQuit = TRUE; } void CDICOMDlg::TestProcInsertBitmap() { long lCount; short nRet; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the first image element and delete what's there nRet = m_pLEADDicomDS->FindFirstElement(TAG_PIXEL_DATA, FALSE); nRet = m_pLEADDicomDS->DeleteElement(); nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_PIXEL_DATA, VR_OB, FALSE, 0); m_List1.ShowWindow(SW_HIDE); m_LEADRasterView1.ShowWindow(SW_SHOW); //load an image ILEADRasterIO *pRasterIO=NULL; HRESULT hr; hr = CoCreateInstance(CLSID_LEADRasterIO, NULL, CLSCTX_ALL, IID_ILEADRasterIO, (void**)&pRasterIO); pRasterIO->EnableMethodErrors = FALSE; pRasterIO->Load(m_LEADRasterView1.GetRaster(),"d:\\ltwin\\images\\image1.cmp", 0, 1, 1); pRasterIO->Release(); AfxMessageBox("Image loaded from File - Wait"); lCount = m_pLEADDicomDS->GetBitmapCount(); //insert some images nRet = m_pLEADDicomDS->InsertBitmapValue(m_LEADRasterView1.GetRaster().GetBitmap(), lCount, DICOM_IMAGE_COMPRESSION_NONE, DICOM_IMAGE_PHOTOMETRIC_RGB, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT); if(nRet != 0) { AfxMessageBox("Error"); return; } ILEADRasterProcess *pRasterProcess=NULL; hr = CoCreateInstance(CLSID_LEADRasterProcess, NULL, CLSCTX_ALL, IID_ILEADRasterProcess, (void**)&pRasterProcess); pRasterProcess->EnableMethodErrors = FALSE; pRasterProcess->Flip(m_LEADRasterView1.GetRaster()); nRet = m_pLEADDicomDS->InsertBitmapValue(m_LEADRasterView1.GetRaster().GetBitmap(), lCount + 1, DICOM_IMAGE_COMPRESSION_NONE, DICOM_IMAGE_PHOTOMETRIC_RGB, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT); if(nRet != 0) { AfxMessageBox("Error"); return; } pRasterProcess->Reverse(m_LEADRasterView1.GetRaster()); pRasterProcess->Release(); nRet = m_pLEADDicomDS->InsertBitmapValue(m_LEADRasterView1.GetRaster().GetBitmap(), lCount + 2, DICOM_IMAGE_COMPRESSION_NONE, DICOM_IMAGE_PHOTOMETRIC_RGB, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT); if(nRet != 0) { AfxMessageBox("Error"); return; } AfxMessageBox("Images inserted - Wait"); } void CDICOMDlg::TestProcInsertList() { short nRet; m_pLEADDicomDS->EnableMethodErrors = FALSE; //move to the first image element and delete what's there nRet = m_pLEADDicomDS->FindFirstElement(TAG_PIXEL_DATA, FALSE); nRet = m_pLEADDicomDS->DeleteElement(); nRet = m_pLEADDicomDS->InsertElement(FALSE, TAG_PIXEL_DATA, VR_OB, FALSE, 0); m_List1.ShowWindow(SW_HIDE); m_LEADRasterView1.ShowWindow(SW_SHOW); //load an image ILEADRasterIO *pRasterIO=NULL; HRESULT hr; hr = CoCreateInstance(CLSID_LEADRasterIO, NULL, CLSCTX_ALL, IID_ILEADRasterIO, (void**)&pRasterIO); pRasterIO->EnableMethodErrors = FALSE; pRasterIO->Load(m_LEADRasterView1.GetRaster(),"d:\\ltwin\\images\\image1.cmp", 0, 1, 1); pRasterIO->Release(); AfxMessageBox("Image loaded from File - Wait"); //create a bitmap list BSTR lpLic = SysAllocString(_szLicString); ILEADRasterFactory *pFactory=NULL; ILEADRaster *pRaster=NULL; CoCreateInstance(CLSID_LEADRasterFactory, NULL, CLSCTX_ALL, IID_ILEADRasterFactory, (void**)&pFactory); #if _MSC_VER < 1200 pRaster = (ILEADRaster*)pFactory->CreateObject("LEADRaster.LEADRaster", lpLic); #else ILEADRasterPtr spLEADRaster=NULL; spLEADRaster = pFactory->CreateObject("LEADRaster.LEADRaster", lpLic); pRaster = spLEADRaster; pRaster->AddRef();//because when spLEADRaster goes out of scope, it will auto Release()! #endif pFactory->Release(); SysFreeString(lpLic); ILEADRasterProcess *pRasterProcess=NULL; hr = CoCreateInstance(CLSID_LEADRasterProcess, NULL, CLSCTX_ALL, IID_ILEADRasterProcess, (void**)&pRasterProcess); pRasterProcess->EnableMethodErrors = FALSE; pRaster->InsertBitmapListItem(0, m_LEADRasterView1.GetRaster().GetBitmap()); pRasterProcess->Flip(m_LEADRasterView1.GetRaster()); pRaster->InsertBitmapListItem(1, m_LEADRasterView1.GetRaster().GetBitmap()); pRasterProcess->Reverse(m_LEADRasterView1.GetRaster()); pRaster->InsertBitmapListItem(2, m_LEADRasterView1.GetRaster().GetBitmap()); pRasterProcess->Release(); //insert the image list into the element nRet = m_pLEADDicomDS->InsertBitmapListValue(pRaster->GetBitmapList(), 0, DICOM_IMAGE_COMPRESSION_NONE, DICOM_IMAGE_PHOTOMETRIC_RGB, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT); pRaster->Release(); if(nRet != 0) { AfxMessageBox("Error"); return; } AfxMessageBox("ImageList inserted into Data Set - Wait"); } void CDICOMDlg::OnViewoptionsImageInfo() { CString szMsg; CString szTmp; IDicomImageInfoPtr pImageInfo=NULL; m_pLEADDicomDS->GetImageInformation(0); pImageInfo = m_pLEADDicomDS->GetImageInfo(); BSTR bstr=NULL; CString cs; szTmp.Format("Compression: %ld\n", pImageInfo->GetCompression()); szMsg = szTmp; bstr=pImageInfo->GetPhotometricString(); cs = bstr; SysFreeString(bstr); szTmp.Format("Photometric: %ld - %s\n", pImageInfo->GetPhotometric(), cs); szMsg = szMsg + szTmp; szTmp.Format("Rows x Columns: %ld x %ld\n", pImageInfo->GetRows(), pImageInfo->GetColumns()); szMsg = szMsg + szTmp; szTmp.Format("Bits Allocated: %ld\n", pImageInfo->GetBitsAllocated()); szMsg = szMsg + szTmp; szTmp.Format("Bits Stored: %ld\n", pImageInfo->GetBitsStored()); szMsg = szMsg + szTmp; szTmp.Format("High Bit: %ld\n", pImageInfo->GetHighBit()); szMsg = szMsg + szTmp; szTmp.Format("Pixel Representation: %ld\n", pImageInfo->GetPixelRepresentation()); szMsg = szMsg + szTmp; szTmp.Format("Planar Configuration: %ld\n", pImageInfo->GetPlanarConfiguration()); szMsg = szMsg + szTmp; szTmp.Format("ResolutionX: %ld\n", pImageInfo->GetResolutionX()); szMsg = szMsg + szTmp; szTmp.Format("ResolutionY: %ld\n", pImageInfo->GetResolutionY()); szMsg = szMsg + szTmp; szTmp.Format("SmallestImagePixelValue: %ld\n", pImageInfo->GetSmallestImagePixelValue()); szMsg = szMsg + szTmp; szTmp.Format("SmallestImagePixelValueFlag: %ld\n", pImageInfo->GetSmallestImagePixelValueFlag()); szMsg = szMsg + szTmp; szTmp.Format("LargestImagePixelValue: %ld\n", pImageInfo->GetLargestImagePixelValue()); szMsg = szMsg + szTmp; szTmp.Format("LargestImagePixelValueFlag: %ld\n", pImageInfo->GetLargestImagePixelValueFlag()); szMsg = szMsg + szTmp; szTmp.Format("RedEntries: %ld\n", pImageInfo->GetRedEntries()); szMsg = szMsg + szTmp; szTmp.Format("RedFirst: %ld\n", pImageInfo->GetRedFirst()); szMsg = szMsg + szTmp; szTmp.Format("RedBits: %ld\n", pImageInfo->GetRedBits()); szMsg = szMsg + szTmp; szTmp.Format("GreenEntries: %ld\n", pImageInfo->GetGreenEntries()); szMsg = szMsg + szTmp; szTmp.Format("GreenFirst: %ld\n", pImageInfo->GetGreenFirst()); szMsg = szMsg + szTmp; szTmp.Format("GreenBits: %ld\n", pImageInfo->GetGreenBits()); szMsg = szMsg + szTmp; szTmp.Format("BlueEntries: %ld\n", pImageInfo->GetBlueEntries()); szMsg = szMsg + szTmp; szTmp.Format("BlueFirst: %ld\n", pImageInfo->GetBlueFirst()); szMsg = szMsg + szTmp; szTmp.Format("BlueBits: %ld\n", pImageInfo->GetBlueBits()); szMsg = szMsg + szTmp; szTmp.Format("PaletteEntries: %ld\n", pImageInfo->GetPaletteEntries()); szMsg = szMsg + szTmp; szTmp.Format("PaletteFirst: %ld\n", pImageInfo->GetPaletteFirst()); szMsg = szMsg + szTmp; szTmp.Format("BitsPerPixel: %ld\n", pImageInfo->GetBitsPerPixel()); szMsg = szMsg + szTmp; szTmp.Format("Gray: %ld\n", pImageInfo->GetGray()); szMsg = szMsg + szTmp; szTmp.Format("Frames: %ld\n", pImageInfo->GetFrames()); szMsg = szMsg + szTmp; AfxMessageBox(szMsg); } void CDICOMDlg::UpdateDSImage() { HCURSOR hOldCursor=NULL; short nRet; IDicomImageInfoPtr pImageInfo=NULL; m_LEADRasterView1.ForceRepaint(); if(m_bAnimation) { hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); m_pLEADDicomDS->GetImageInformation(m_LEADRasterView1.GetRaster().GetBitmapListIndex()); pImageInfo = m_pLEADDicomDS->GetImageInfo(); /// first remove existing image from Data Set m_pLEADDicomDS->DeleteBitmapValue(m_LEADRasterView1.GetRaster().GetBitmapListIndex(), 1); /* now insert the modified image into the Data Set*/ nRet = m_pLEADDicomDS->InsertBitmapValue(m_LEADRasterView1.GetRaster().GetBitmap(), m_LEADRasterView1.GetRaster().GetBitmapListIndex(), m_nSaveCompression, m_nSavePhotometric, m_nSaveBitsPerPixel, m_nSaveQFactor, DICOM_SETIMAGE_AUTO_SET_VOI_LUT); SetCursor(hOldCursor); } else { hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); m_pLEADDicomDS->GetImageInformation(0); pImageInfo = m_pLEADDicomDS->GetImageInfo(); m_pLEADDicomDS->put_Bitmap(m_LEADRasterView1.GetRaster().GetBitmap()); nRet = m_pLEADDicomDS->SetBitmapValue(m_nSaveCompression, m_nSavePhotometric, m_nSaveBitsPerPixel, m_nSaveQFactor, DICOM_SETIMAGE_AUTO_SET_VOI_LUT); m_pLEADDicomDS->put_Bitmap(0); SetCursor(hOldCursor); } if(nRet != 0) AfxMessageBox("Error Updating DataSet!"); } void CDICOMDlg::OnFlip() { short nRet; nRet = m_pRasterProcess->Flip(m_LEADRasterView1.GetRaster()); if(nRet == 0) UpdateDSImage(); } void CDICOMDlg::OnReverse() { short nRet; nRet = m_pRasterProcess->Reverse(m_LEADRasterView1.GetRaster()); if(nRet == 0) UpdateDSImage(); } void CDICOMDlg::OnRotate() { m_spRasterDlgImg->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgImg->BackColor = 0; m_spRasterDlgImg->Angle = 0; m_spRasterDlgImg->UIFlags = ROTATE_AUTOPROCESS | ROTATE_SHOW_PREVIEW; short nRet = m_spRasterDlgImg->ShowRotateDlg(long(m_hWnd)); m_spRasterDlgImg->Bitmap = 0; if (nRet == 0 && m_spRasterDlgImg->DialogStatus == DLG_OK) { UpdateDSImage(); } } void CDICOMDlg::OnResize() { CLEADRaster Raster = m_LEADRasterView1.GetRaster(); m_spRasterDlgImg->Bitmap = Raster.GetBitmap(); m_spRasterDlgImg->CurrentWidth = long(Raster.GetBitmapWidth()); m_spRasterDlgImg->CurrentHeight = long(Raster.GetBitmapHeight()); m_spRasterDlgImg->CurrentResolutionX = Raster.GetBitmapXRes(); m_spRasterDlgImg->CurrentResolutionY = Raster.GetBitmapYRes(); m_spRasterDlgImg->BitsPerPixel = Raster.GetBitmapBits(); m_spRasterDlgImg->UIFlags = RESIZE_AUTOPROCESS | RESIZE_SHOW_PERCENTAGE | RESIZE_SHOW_IDENTICALVALUE | RESIZE_MAINTAINASPECT | RESIZE_SHOW_RESOLUTION; short nRet = m_spRasterDlgImg->ShowResizeDlg(long(m_hWnd)); m_spRasterDlgImg->Bitmap = 0; if (nRet == 0 && m_spRasterDlgImg->DialogStatus == DLG_OK) { UpdateDSImage(); } } // void CDICOMDlg::OnEffectsMosaic() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->Dimension = 2; // m_spRasterDlgImgEfx->UIFlags = MOSAIC_AUTOPROCESS | // MOSAIC_SHOW_PREVIEW | // MOSAIC_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowMosaicDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // void CDICOMDlg::OnEffectsOilify() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->Dimension = 2; // m_spRasterDlgImgEfx->UIFlags = OILIFY_AUTOPROCESS | // OILIFY_SHOW_PREVIEW | // OILIFY_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowOilifyDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // void CDICOMDlg::OnEffectsMaxFilter() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->Dimension = 2; // m_spRasterDlgImgEfx->UIFlags = MAXFILTER_AUTOPROCESS | // MAXFILTER_SHOW_PREVIEW | // MAXFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowMaxFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnEffectsMinFilter() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->Dimension = 2; // m_spRasterDlgImgEfx->UIFlags = MINFILTER_AUTOPROCESS | // MINFILTER_SHOW_PREVIEW | // MINFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowMinFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnEffectsSharpen() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->Sharpness = 0; // m_spRasterDlgImgEfx->UIFlags = SHARPENFILTER_AUTOPROCESS | // SHARPENFILTER_SHOW_PREVIEW | // SHARPENFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowSharpenDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnSpatialFiltersGradient() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->UIFlags = GRADIENTFILTER_AUTOPROCESS | // GRADIENTFILTER_SHOW_PREVIEW | // GRADIENTFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowGradientFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnSpatialFiltersLaplacian() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->UIFlags = LAPLACIANFILTER_AUTOPROCESS | // LAPLACIANFILTER_SHOW_PREVIEW | // LAPLACIANFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowLaplacianFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnSpatialFiltersSobel() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->UIFlags = SOBELFILTER_AUTOPROCESS | // SOBELFILTER_SHOW_PREVIEW | // SOBELFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowSobelFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnSpatialFiltersPrewitt() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->UIFlags = PREWITTFILTER_AUTOPROCESS | // PREWITTFILTER_SHOW_PREVIEW | // PREWITTFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowPrewittFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnSpatialFiltersShiftAndDifference() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->UIFlags = SHIFTDIFFERENCEFILTER_AUTOPROCESS | // SHIFTDIFFERENCEFILTER_SHOW_PREVIEW | // SHIFTDIFFERENCEFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowShiftDifferenceFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnSpatialFiltersLineSegment() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->UIFlags = LINESEGMENTFILTER_AUTOPROCESS | // LINESEGMENTFILTER_SHOW_PREVIEW | // LINESEGMENTFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowLineSegmentFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnEdgeErosion() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->UIFlags = EROSIONFILTER_AUTOPROCESS | // EROSIONFILTER_SHOW_PREVIEW | // EROSIONFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowErosionFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnEdgeDilation() // { // m_spRasterDlgImgEfx->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgImgEfx->UIFlags = DILATIONFILTER_AUTOPROCESS | // DILATIONFILTER_SHOW_PREVIEW | // DILATIONFILTER_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgImgEfx->ShowDilationFilterDlg(long(m_hWnd)); // m_spRasterDlgImgEfx->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgImgEfx->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } void CDICOMDlg::OnInvert() { if (m_pRasterProcess->Invert(m_LEADRasterView1.GetRaster()) == 0) { UpdateDSImage(); } } void CDICOMDlg::OnGrayscale8() { if (m_pRasterProcess->Grayscale(m_LEADRasterView1.GetRaster(), 8) == 0) { UpdateDSImage(); } } void CDICOMDlg::OnGrayscale12() { if (m_pRasterProcess->Grayscale(m_LEADRasterView1.GetRaster(), 12) == 0) { UpdateDSImage(); UpdateMenuStatus(); } } void CDICOMDlg::OnGrayscale16() { if (m_pRasterProcess->Grayscale(m_LEADRasterView1.GetRaster(), 16) == 0) { UpdateDSImage(); UpdateMenuStatus(); } } void CDICOMDlg::OnWindowLevel() { int nRet; long MaxVal; long MinVal; m_LEADRasterView1.GetRaster().GetMinMaxBits(); m_spRasterDlgClr->PutLowBit(m_LEADRasterView1.GetRaster().GetMinBit()); m_spRasterDlgClr->PutHighBit(m_LEADRasterView1.GetRaster().GetMaxBit()); m_LEADRasterView1.GetRaster().GetMinMaxVal(); MinVal = m_LEADRasterView1.GetRaster().GetMinVal(); MaxVal = m_LEADRasterView1.GetRaster().GetMaxVal(); m_spRasterDlgClr->PutWindowLevelLow(MinVal); m_spRasterDlgClr->PutWindowLevelHigh(MaxVal); switch ( m_LEADRasterView1.GetRaster().GetIsGrayscale()) { case GRAY_ORDEREDNORMAL: { m_spRasterDlgClr->StartColor = RGB ( 0, 0, 0 ) ; m_spRasterDlgClr->EndColor = RGB ( 255, 255, 255 ) ; break ; } case GRAY_ORDEREDINVERSE: { m_spRasterDlgClr->StartColor = RGB ( 255, 255, 255 ) ; m_spRasterDlgClr->EndColor = RGB ( 0, 0, 0 ) ; break ; } case GRAY_NOTORDERED: { m_spRasterDlgClr->StartColor = RGB ( 0, 0, 0 ) ; m_spRasterDlgClr->EndColor = RGB ( 255, 255, 255 ) ; break ; } default: { MessageBox ( TEXT ( "Window Level is not supported for this bitmap order" ), TEXT ( "Window Level Error" ), MB_OK ) ; return; } } m_spRasterDlgClr->PutBitmap(m_LEADRasterView1.GetRaster().GetBitmap()); m_spRasterDlgClr->PutWindowLevelFlags(FILLLUT_OUTSIDE | FILLLUT_LINEAR); m_spRasterDlgClr->PutUIFlags(WINDOWLEVEL_SHOW_PREVIEW |WINDOWLEVEL_SHOW_TOOL_ZOOMLEVEL| WINDOWLEVEL_SHOW_RANGE |WINDOWLEVEL_AUTOPROCESS); nRet = m_spRasterDlgClr->ShowWindowLevelDlg((long)this->m_hWnd); m_LEADRasterView1.ForceRepaint(); } void CDICOMDlg::OnIntensityDetect() { m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgClr->Low = 0; m_spRasterDlgClr->High = 0; m_spRasterDlgClr->UIFlags = INTENSITYDETECT_AUTOPROCESS | INTENSITYDETECT_SHOW_PREVIEW | INTENSITYDETECT_SHOW_TOOL_ZOOMLEVEL; short nRet = m_spRasterDlgClr->ShowIntensityDetectDlg(long(m_hWnd)); m_spRasterDlgClr->Bitmap = 0; if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) { UpdateDSImage(); } } // void CDICOMDlg::OnSolarize() // { // m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgClr->Threshold = 0; // m_spRasterDlgClr->UIFlags = SOLARIZE_AUTOPROCESS | // SOLARIZE_SHOW_PREVIEW | // SOLARIZE_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgClr->ShowSolarizeDlg(long(m_hWnd)); // m_spRasterDlgClr->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } // // void CDICOMDlg::OnPosterize() // { // m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); // m_spRasterDlgClr->Levels = 2; // m_spRasterDlgClr->UIFlags = POSTERIZE_AUTOPROCESS | // POSTERIZE_SHOW_PREVIEW | // POSTERIZE_SHOW_TOOL_ZOOMLEVEL; // // short nRet = m_spRasterDlgClr->ShowPosterizeDlg(long(m_hWnd)); // m_spRasterDlgClr->Bitmap = 0; // // if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) // { // UpdateDSImage(); // } // } void CDICOMDlg::OnAdjustBrightness() { m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgClr->Change = 0; m_spRasterDlgClr->UIFlags = BRIGHTNESS_AUTOPROCESS | BRIGHTNESS_SHOW_PREVIEW | BRIGHTNESS_SHOW_TOOL_ZOOMLEVEL; short nRet = m_spRasterDlgClr->ShowBrightnessDlg(long(m_hWnd)); m_spRasterDlgClr->Bitmap = 0; if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) { UpdateDSImage(); } } void CDICOMDlg::OnAdjustContrast() { m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgClr->Change = 0; m_spRasterDlgClr->UIFlags = CONTRAST_AUTOPROCESS | CONTRAST_SHOW_PREVIEW | CONTRAST_SHOW_TOOL_ZOOMLEVEL; short nRet = m_spRasterDlgClr->ShowContrastDlg(long(m_hWnd)); m_spRasterDlgClr->Bitmap = 0; if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) { UpdateDSImage(); } } void CDICOMDlg::OnAdjustHue() { m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgClr->Angle = 0; m_spRasterDlgClr->UIFlags = HUE_AUTOPROCESS | HUE_SHOW_PREVIEW | HUE_SHOW_TOOL_ZOOMLEVEL; short nRet = m_spRasterDlgClr->ShowHueDlg(long(m_hWnd)); m_spRasterDlgClr->Bitmap = 0; if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) { UpdateDSImage(); } } void CDICOMDlg::OnAdjustSaturation() { m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgClr->Change = 0; m_spRasterDlgClr->UIFlags = SATURATION_AUTOPROCESS | SATURATION_SHOW_PREVIEW | SATURATION_SHOW_TOOL_ZOOMLEVEL; short nRet = m_spRasterDlgClr->ShowSaturationDlg(long(m_hWnd)); m_spRasterDlgClr->Bitmap = 0; if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) { UpdateDSImage(); } } void CDICOMDlg::OnAdjustGamma() { m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgClr->RedFactor = 100; m_spRasterDlgClr->GreenFactor = 100; m_spRasterDlgClr->BlueFactor = 100; m_spRasterDlgClr->UIFlags = GAMMAADJUSTMENT_AUTOPROCESS | GAMMAADJUSTMENT_SHOW_PREVIEW | GAMMAADJUSTMENT_SHOW_TOOL_ZOOMLEVEL | GAMMAADJUSTMENT_FORCELINKCHANNELS; short nRet = m_spRasterDlgClr->ShowGammaAdjustmentDlg(long(m_hWnd)); m_spRasterDlgClr->Bitmap = 0; if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) { UpdateDSImage(); } } void CDICOMDlg::OnTransformHalftone() { m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgClr->Angle = 0; m_spRasterDlgClr->Dimension = 2; m_spRasterDlgClr->UIFlags = HALFTONE_AUTOPROCESS | HALFTONE_SHOW_PREVIEW | HALFTONE_SHOW_TOOL_ZOOMLEVEL; short nRet = m_spRasterDlgClr->ShowHalftoneDlg(long(m_hWnd)); m_spRasterDlgClr->Bitmap = 0; if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) { UpdateDSImage(); } } void CDICOMDlg::OnTransformColorResolution() { m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgClr->BitsPerPixel = 0; m_spRasterDlgClr->ClrResFlags = COLORRES_SHOW_BITALL | COLORRES_SHOW_DITHER_ALL | COLORRES_SHOW_PAL_ALL; m_spRasterDlgClr->UIFlags = COLORRES_AUTOPROCESS | COLORRES_SHOW_PREVIEW | COLORRES_SHOW_TOOL_ZOOMLEVEL | COLORRES_SHOW_OPENPALFILE | COLORRES_SHOW_ORDER; short nRet = m_spRasterDlgClr->ShowColorResDlg(long(m_hWnd)); m_spRasterDlgClr->Bitmap = 0; if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) { UpdateDSImage(); } } void CDICOMDlg::OnHistogramEqualize() { if (m_pRasterProcess->HistoEqualize(m_LEADRasterView1.GetRaster(), YUV_SPACE) == 0) { UpdateDSImage(); } } void CDICOMDlg::OnHistogramStretchIntensity() { if (m_pRasterProcess->StretchIntensity(m_LEADRasterView1.GetRaster()) == 0) { UpdateDSImage(); } } void CDICOMDlg::OnHistogramContrast() { m_spRasterDlgClr->Bitmap = m_LEADRasterView1.GetRaster().GetBitmap(); m_spRasterDlgClr->Change = 0; m_spRasterDlgClr->UIFlags = HISTOCONTRAST_AUTOPROCESS | HISTOCONTRAST_SHOW_PREVIEW | HISTOCONTRAST_SHOW_TOOL_ZOOMLEVEL; short nRet = m_spRasterDlgClr->ShowHistoContrastDlg(long(m_hWnd)); m_spRasterDlgClr->Bitmap = 0; if (nRet == 0 && m_spRasterDlgClr->DialogStatus == DLG_OK) { UpdateDSImage(); } } void CDICOMDlg::OnDatasetEditvalue() { long lCount; long x; short nRet; HCURSOR hOldCursor=NULL; if(!m_bDSOpen) return; if(m_bModule) return; CLEADRaster Raster = m_LEADRasterView1.GetRaster(); m_pLEADDicomDS->EnableMethodErrors = FALSE; hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); if (Raster.GetBitmap()) { ILEADRasterDlgFilePtr spRasterDlgFile(__uuidof(LEADRasterDlgFile)); spRasterDlgFile->EnableMethodErrors = VARIANT_FALSE; spRasterDlgFile->Bitmap = 0; spRasterDlgFile->Filter = "DICOM Files (*.dic; *.dcm)|*.dic;*.dcm|All Files (*.*)|*.*"; spRasterDlgFile->FilterIndex = 1; spRasterDlgFile->DialogTitle = "Pick Image to Insert"; spRasterDlgFile->EnableShowPreview = VARIANT_TRUE; spRasterDlgFile->UIFlags = OPEN_SHOW_PREVIEW | OPEN_SHOW_FILEINFO | OPEN_SHOW_MULTIPAGE; short nRet = spRasterDlgFile->ShowOpenDlg(long(m_hWnd)); if (nRet == 0 && spRasterDlgFile->DialogStatus == DLG_OK) { ILEADRasterFactoryPtr spRasterFactory(__uuidof(LEADRasterFactory)); ILEADRasterPtr spRaster; spRaster = spRasterFactory->CreateObject2("LEADRaster.LEADRaster", _szLicString); spRasterFactory = NULL; ILEADRasterIOPtr spRasterIO(__uuidof(LEADRasterIO)); spRasterIO->EnableMethodErrors = VARIANT_FALSE; spRasterIO->Load(spRaster, spRasterDlgFile->FileName, 0, 0, 1); spRasterIO = NULL; if (m_bAnimation) { short z = Raster.GetBitmapListIndex(); Raster.DeleteBitmapListItems(z, 1); Raster.InsertBitmapListItem(z, spRaster->Bitmap); Raster.SetBitmapListIndex(z); } else { Raster.SetBitmap(spRaster->Bitmap); } UpdateDSImage(); } } else { CEditValDlg EditDlg; CString csText; m_pLEADDicomDS->GetConvertValue(); EditDlg.SetLEADDicom(m_pLEADDicomDS); if(EditDlg.DoModal() == IDOK) { //update the dataset with the new values lCount = EditDlg.m_lCount; if(lCount > 0) { m_pLEADDicomDS->StringValueCount = 0; m_pLEADDicomDS->StringValueCount = lCount; for(x=0; xStringValues[x] = bstr; SysFreeString(bstr); } nRet = m_pLEADDicomDS->SetConvertValue(); if(nRet != 0) AfxMessageBox("Error Updating DataSet!"); else DisplayValues(); } else { m_pLEADDicomDS->BinaryValueCount = 0; m_pLEADDicomDS->SetBinaryValue(0); DisplayValues(); } } } SetCursor(hOldCursor); } void CDICOMDlg::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult) { if(!m_bDSOpen) return; if(m_bModule) return; OnDatasetEditvalue(); *pResult = 0; } void CDICOMDlg::OnDblclkList1() { if(!m_bDSOpen) return; if(m_bModule) return; OnDatasetEditvalue(); } void CDICOMDlg::OnAnnotationAnnsave() { int nRet; long hAnnContainer; CString strMsg; if (m_LEADRasterView1.GetRaster().GetBitmap() != 0) { //hAnnContainer = m_LEADRasterView1.GetAnnContainer(); hAnnContainer = m_pRasterAnn->GetAnnContainer(); CAnnSaveDlg DlgAnnSave; DlgAnnSave.m_nPage = 0; DlgAnnSave.m_nFile = 0; DlgAnnSave.m_nFlag = DlgAnnSave.ANN_OVERWRITE; DlgAnnSave.m_strTag = "00000000"; if (IDOK == DlgAnnSave.DoModal()) { long nTag; nTag = strtol(DlgAnnSave.m_strTag, NULL, 16); m_pLEADDicomDS->AnnPrivateCreatorTag = nTag; m_pLEADDicomDS->put_AnnContainer(hAnnContainer); nRet = m_pLEADDicomDS->AnnSave( DlgAnnSave.m_nFile, ANN_FMT_NATIVE, FALSE, DlgAnnSave.m_nFlag, DlgAnnSave.m_nPage ); if (nRet == 0) { strMsg.Format("Annotations Saved\n\nPrivate Creator Data Element: %8x\nFile Number: %d", m_pLEADDicomDS->GetAnnPrivateCreatorTag(), DlgAnnSave.m_nFile); } else { strMsg = "No Annotations Saved"; } MessageBox(strMsg); } } } void CDICOMDlg::OnAnnotationAnnload() { int nRet; if (m_LEADRasterView1.GetRaster().GetBitmap() != 0) { CAnnLoadDlg DlgAnnLoad; DlgAnnLoad.m_nFile = 0; DlgAnnLoad.m_nPage = 1; if (IDOK == DlgAnnLoad.DoModal()) { nRet = m_pLEADDicomDS->AnnLoad( DlgAnnLoad.m_nFile, DlgAnnLoad.m_nPage ); if (nRet == 0) m_pRasterAnn->AnnContainer = m_pLEADDicomDS->AnnContainer; else MessageBox("No Annotations Loaded"); } } } void CDICOMDlg::OnAnnotationAnndelete() { int nRet; CString strMsg; if (m_LEADRasterView1.GetRaster().GetBitmap() != 0) { CAnnDeleteDlg DlgAnnDelete; DlgAnnDelete.m_nFile = 0; DlgAnnDelete.m_nPage = 1; DlgAnnDelete.m_bDeleteAll = FALSE; DlgAnnDelete.m_bDeleteOne = FALSE; if (IDOK == DlgAnnDelete.DoModal()) { int nFile = DlgAnnDelete.m_nFile; int nPage = DlgAnnDelete.m_nPage; if (DlgAnnDelete.m_bDeleteAll) nFile = -1; if (DlgAnnDelete.m_bDeleteOne) nPage = -1; nRet = m_pLEADDicomDS->AnnDelete(nFile, nPage); if (nRet == 0) { if (nFile == -1) strMsg.Format("All annotation files deleted"); else if (nPage == -1) strMsg.Format("Annotation File %d has been deleted", DlgAnnDelete.m_nFile); else strMsg.Format("Page %d of annotation file %d as been deleted", DlgAnnDelete.m_nPage, DlgAnnDelete.m_nFile); } else { strMsg.Format("Invalid Annotation File Number: %d", DlgAnnDelete.m_nFile); } MessageBox(strMsg); } } } void CDICOMDlg::OnAnnotationAnncount() { CString strMsg = ""; CString strTmp; int i; int nRet; nRet = m_pLEADDicomDS->AnnCount(); if (nRet != 0) { strMsg = "There are no stored annotations"; } else { strMsg.Format("Private Creator Data Element: %X\n\nAnnotation File Numbers:\n", m_pLEADDicomDS->GetAnnPrivateCreatorTag()); for (i=0; i<=255; i++) { if (m_pLEADDicomDS->GetAnnEntries(i) ) { strTmp.Format("%d\n", i); strMsg = strMsg + strTmp; } } } MessageBox(strMsg); } float CDICOMDlg::GetRightOffset() { RECT rc; CWnd *pMainWnd = this; pMainWnd->GetClientRect(&rc); pMainWnd->MapWindowPoints(&m_LEADRasterView1, &rc); return (float)(rc.right); } void CDICOMDlg::SetUpAnnToolBar() { m_pAnnToolBar->PutEnableMethodErrors (VARIANT_FALSE); IDispatch *pDispatch=NULL; (m_LEADRasterView1.GetControlUnknown())->QueryInterface(IID_IDispatch, (void**)&pDispatch); m_pAnnToolBar->PutAnnParentRasterView(pDispatch); if(pDispatch) pDispatch->Release(); m_pAnnToolBar->Create (GetRightOffset(), 0.0f, ANN_TOOLALIGN_TOP | ANN_TOOLALIGN_RIGHT); AnnToolConstants nAnnTool = m_pRasterAnn->GetAnnTool(); m_pAnnToolBar->PutTool(nAnnTool); } void CDICOMDlg::OnAnntool() { if (!m_pAnnToolBar) { ::CoCreateInstance(CLSID_LEADRasterAnnToolBar, NULL, CLSCTX_ALL, IID_ILEADRasterAnnToolBar, (void **)&m_pAnnToolBar); if (!m_pAnnToolBar) { MessageBox ("FAILURE", "Failed to create TOOLBAR"); return; } SetUpAnnToolBar(); } if (m_pAnnToolBar->GetToolBarhWnd() == NULL) { SetUpAnnToolBar(); } m_bToolBarVisible = !m_bToolBarVisible; m_pAnnToolBar->PutVisible(m_bToolBarVisible); return; } void CDICOMDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) { int nCheck = m_bToolBarVisible; CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu); pPopupMenu->CheckMenuItem(ID_ANNOTATION_TOOLBAR, nCheck*MF_CHECKED ); int nAnnUserMode = m_pRasterAnn->AnnUserMode; pPopupMenu->CheckMenuItem(ID_ANNOTATION_DESIGN, (nAnnUserMode == ANN_USERMODE_DESIGN)*MF_CHECKED ); pPopupMenu->CheckMenuItem(ID_ANNOTATION_RUN, (nAnnUserMode == ANN_USERMODE_RUN) *MF_CHECKED ); int bEnable = m_LEADRasterView1.GetRaster().GetBitmap(); pPopupMenu->EnableMenuItem(ID_ANNOTATION_DESIGN, MF_BYCOMMAND | bEnable * MF_ENABLED | (!bEnable) * MF_GRAYED); pPopupMenu->EnableMenuItem(ID_ANNOTATION_RUN, MF_BYCOMMAND | bEnable * MF_ENABLED | (!bEnable) * MF_GRAYED); pPopupMenu->EnableMenuItem(ID_ANNOTATION_ANNSAVE, MF_BYCOMMAND | bEnable * MF_ENABLED | (!bEnable) * MF_GRAYED); pPopupMenu->EnableMenuItem(ID_ANNOTATION_ANNLOAD, MF_BYCOMMAND | bEnable * MF_ENABLED | (!bEnable) * MF_GRAYED); pPopupMenu->EnableMenuItem(ID_ANNOTATION_ANNCOUNT, MF_BYCOMMAND | bEnable * MF_ENABLED | (!bEnable) * MF_GRAYED); pPopupMenu->EnableMenuItem(ID_ANNOTATION_ANNDELETE, MF_BYCOMMAND | bEnable * MF_ENABLED | (!bEnable) * MF_GRAYED); } void CDICOMDlg::OnAnnotationDesign() { m_pRasterAnn->AnnUserMode = ANN_USERMODE_DESIGN; } void CDICOMDlg::OnAnnotationRun() { m_pRasterAnn->AnnUserMode = ANN_USERMODE_RUN; } void CDICOMDlg::OnClose() { if (m_pRasterProcess) m_pRasterProcess->Release(); if (m_pAnnToolBar) m_pAnnToolBar->Release(); m_spRasterDlgKrn->FreeDlg(); //Terminate a connection between source and sink. LPUNKNOWN pUnkSink = m_pDicomDSSink->GetIDispatch(FALSE); AfxConnectionUnadvise(m_pLEADDicomDS, DIID__LEADDicomDSEvents, pUnkSink, FALSE, m_dwCookie); delete m_pDicomDSSink; pUnkSink = m_pRasterAnnSink->GetIDispatch(FALSE); AfxConnectionUnadvise(m_pRasterAnn, DIID__LEADRasterAnnotationEvents, pUnkSink, FALSE, m_dwCookieAnn); delete m_pRasterAnnSink; if (m_pRasterAnn) m_pRasterAnn->Release(); CDialog::OnClose(); } //********************************************************************** void CDICOMDlg::HandleAnnCreate(long hObject) { AnnObjectType AnnObjType=ANN_OBJECT_CONTAINER; m_pRasterAnn->AnnGetType (hObject); AnnObjType = m_pRasterAnn->GetAnnType(); switch (AnnObjType) { case ANN_OBJECT_BUTTON: case ANN_OBJECT_HOTSPOT: case ANN_OBJECT_FREEHANDHOTSPOT: m_nTag ++; m_pRasterAnn->AnnSetTag (hObject, m_nTag); break; } } void CDICOMDlg::HandleAnnClicked(long hObject) { long lTag; AnnObjectType AnnObjType=ANN_OBJECT_CONTAINER; CString String; m_pRasterAnn->AnnGetType (hObject); AnnObjType = m_pRasterAnn->GetAnnType(); m_pRasterAnn->AnnGetTag (hObject); lTag = m_pRasterAnn->GetAnnTag(); switch (AnnObjType) { case ANN_OBJECT_BUTTON: String.Format ("Button with tag %ld was clicked", lTag); break; case ANN_OBJECT_HOTSPOT: String.Format ("Hot Spot with tag %ld was clicked", lTag); break; case ANN_OBJECT_FREEHANDHOTSPOT: String.Format ("Freehand Hot Spot with tag %ld was clicked", lTag); break; } MessageBox (String, "CLICK notification"); } void CDICOMDlg::HandleAnnDrawn(long hObject) { m_pRasterAnn->PutAnnTool (ANN_TOOL_SELECT); } void CDICOMDlg::HandleAnnToolDestroy() { if (m_pRasterAnn) { m_pRasterAnn->PutAnnTool (ANN_TOOL_SELECT); m_pAnnToolBar->put_AnnParentRasterView(NULL); //m_pAnnToolBar = NULL; } m_bToolBarVisible = FALSE; } void CDICOMDlg::HandleAnnToolChecked(short iTool) { m_pRasterAnn->PutAnnTool ((AnnToolConstants)iTool); } void CDICOMDlg::HandleAnnMouseDown(short Button, short Shift, long x, long y) { // m_x0 = x; // m_y0 = y; // if(m_pRasterAnn->GetAnnTool() == ANN_TOOL_USER_FIRST) // { // // unselect all the other objects // m_pRasterAnn->AnnSetSelected(m_pRasterAnn->GetAnnContainer(), VARIANT_FALSE, VARIANT_TRUE); // // create the ellipse and rectangle objects // m_pRasterAnn->AnnCreate(ANN_OBJECT_RECT, VARIANT_TRUE, VARIANT_TRUE, (long *)&m_hRectObject); // m_pRasterAnn->AnnCreate(ANN_OBJECT_ELLIPSE, VARIANT_TRUE, VARIANT_TRUE, (long *)&m_hEllipseObject); // // set the automation defaults to the objects newly created // m_pRasterAnn->AnnSetAutoDefaults(m_hRectObject, 0); // m_pRasterAnn->AnnSetAutoDefaults(m_hEllipseObject, 0); // // start defining them from the x, y coordinate // m_pRasterAnn->AnnDefine(m_hRectObject, (float)x, (float)y, ANN_DEFINE_BEGINSET); // m_pRasterAnn->AnnDefine(m_hEllipseObject, (float)x, (float)y, ANN_DEFINE_BEGINSET); // } } void CDICOMDlg::HandleAnnMouseMove(short Button, short Shift, long x, long y) { // if(Button == 1) // { // switch(m_pRasterAnn->GetAnnTool()) // { // case ANN_TOOL_USER_FIRST: // // update the objects from the x, y coordinate // m_pRasterAnn->AnnDefine(m_hRectObject, (float)x, (float)y, ANN_DEFINE_UPDATE); // m_pRasterAnn->AnnDefine(m_hEllipseObject, (float)x, (float)y, ANN_DEFINE_UPDATE); // break; // case ANN_TOOL_ELLIPSE: // case ANN_TOOL_RECT: // AdjustMousePos(Shift, x, y); // break; // } // } } void CDICOMDlg::HandleAnnMouseUp(short Button, short Shift, long x, long y) { // CString str = ""; // switch(m_pRasterAnn->GetAnnTool()) // { // case ANN_TOOL_USER_FIRST: // m_pRasterAnn->AnnDefine(m_hRectObject, (float)x, (float)y, ANN_DEFINE_END); // m_pRasterAnn->AnnDefine(m_hEllipseObject, (float)x, (float)y, ANN_DEFINE_END); // m_pRasterAnn->AnnSetSelected(m_hRectObject, VARIANT_TRUE, VARIANT_FALSE); // m_pRasterAnn->AnnSetSelected(m_hEllipseObject, VARIANT_TRUE, VARIANT_FALSE); // m_pRasterAnn->AnnGroup(m_pRasterAnn->GetAnnContainer(), ANN_FLAG_RECURSE + ANN_FLAG_SELECTED, str.AllocSysString()); // // The user-defined tool doesn't fire the annDrawn event, so we'll send them // HandleAnnDrawn((long)m_hEllipseObject); // HandleAnnDrawn((long)m_hRectObject); // m_hEllipseObject = m_hRectObject = NULL; // break; // case ANN_TOOL_ELLIPSE: // case ANN_TOOL_RECT: // AdjustMousePos(Shift, x, y); // break; // } }