//--------------------------------------------------------------------------- #include #pragma hdrstop #include "MainForm.h" #include "VR_Form.h" #include "About.h" #include "EdVl_Frm.h" #include "elem_Frm.h" #include "IOD_Form.h" #include "LdOp_Frm.h" #include "mdul_Frm.h" #include "SvOp_Frm.h" #include "Tag_Form.h" #include "UID_Form.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "LEADMain" #pragma link "LEADDicom" #pragma link "LEADDlgFile" #pragma link "LEADDlgService" #pragma link "LEADDlgColor" #pragma link "LEADDlgImgEffect" #pragma link "LEADDlgImage" #pragma resource "*.dfm" TMainFrm *MainFrm; //--------------------------------------------------------------------------- __fastcall TMainFrm::TMainFrm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TMainFrm::ClearControls(void) { Edit_Tag->Text= ""; Edit_VR->Text= ""; Edit_Length->Text= ""; Edit_ValueCount->Text= ""; Memo_Values->Lines->Clear( ); } //--------------------------------------------------------------------------- void __fastcall TMainFrm::FormCreate(TObject *Sender) { int nRet; bool bRet; LEADDicom1->UnlockSupport ( L_SUPPORT_DOCUMENT, L_KEY_DOCUMENT ); LEADDicom1->UnlockSupport ( L_SUPPORT_GIFLZW, L_KEY_GIFLZW ); LEADDicom1->UnlockSupport ( L_SUPPORT_TIFLZW, L_KEY_TIFLZW ); LEADDicom1->UnlockSupport ( L_SUPPORT_OCR, L_KEY_OCR ); LEADDicom1->UnlockSupport ( L_SUPPORT_MEDICAL, L_KEY_MEDICAL ); LEADDicom1->UnlockSupport ( L_SUPPORT_VECTOR, L_KEY_VECTOR ); LEADDicom1->UnlockSupport ( L_SUPPORT_MEDICAL_NET, L_KEY_MEDICAL_NET ); LEADDicom1->UnlockSupport ( L_SUPPORT_BARCODES_1D, L_KEY_BARCODES_1D ); LEADDicom1->UnlockSupport ( L_SUPPORT_BARCODES_2D_READ, L_KEY_BARCODES_2D_READ ); LEADDicom1->UnlockSupport ( L_SUPPORT_BARCODES_2D_WRITE, L_KEY_BARCODES_2D_WRITE ); LEADDicom1->UnlockSupport ( L_SUPPORT_BARCODES_PDF_READ, L_KEY_BARCODES_PDF_READ ); LEADDicom1->UnlockSupport ( L_SUPPORT_BARCODES_PDF_WRITE, L_KEY_BARCODES_PDF_WRITE ); LEADDicom1->UnlockSupport ( L_SUPPORT_PDF, L_KEY_PDF ); LEADDicom1->UnlockSupport ( L_SUPPORT_J2K, L_KEY_J2K ); LEADDicom1->UnlockSupport ( L_SUPPORT_CMW, L_KEY_CMW ); LEADDicom1->UnlockSupport ( L_SUPPORT_DICOM, L_KEY_DICOM ); LEADDicom1->UnlockSupport ( L_SUPPORT_EXTGRAY, L_KEY_EXTGRAY ); LEADDicom1->UnlockSupport ( L_SUPPORT_BITONAL, L_KEY_BITONAL ); LEADDicom1->UnlockSupport ( L_SUPPORT_PDF_SAVE, L_KEY_PDF_SAVE ); LEADDicom1->UnlockSupport ( L_SUPPORT_OCR_PDF_OUTPUT, L_KEY_OCR_PDF_OUTPUT ); LEADDicom1->UnlockSupport ( L_SUPPORT_BARCODES_DATAMATRIX_READ, L_KEY_BARCODES_DATAMATRIX_READ ); LEADDicom1->UnlockSupport ( L_SUPPORT_BARCODES_DATAMATRIX_WRITE, L_KEY_BARCODES_DATAMATRIX_WRITE ); LEADDicom1->UnlockSupport ( L_SUPPORT_LTPRO, L_KEY_LTPRO ); LEADDicom1->UnlockSupport ( L_SUPPORT_ABC, L_KEY_ABC ); LEADDicom1->UnlockSupport ( L_SUPPORT_JBIG2, L_KEY_JBIG2 ); LEADDicom1->UnlockSupport ( L_SUPPORT_ABIC_READ, L_KEY_ABIC_READ ); LEADDicom1->UnlockSupport ( L_SUPPORT_ABIC_SAVE, L_KEY_ABIC_SAVE ); LEADDicom1->UnlockSupport ( L_SUPPORT_PDF_READ, L_KEY_PDF_READ ); LEADDicom1->UnlockSupport ( L_SUPPORT_PDF_ADVANCED, L_KEY_PDF_ADVANCED ); bRet= LEADDicom1->IsSupportLocked(L_SUPPORT_MEDICAL); if(bRet) { ShowMessage("Medical-Express support must be unlocked for this demo!"); Application->Terminate( ); } FBaseCaption= Caption; /* init load options */ FLoadOptions_MetaHeader= AUTO_DETECT; FLoadOptions_TransferSyn= AUTO_DETECT; FLoadOptions_VR= AUTO_DETECT; FSaveOptions_MetaHeader= SAVE_OPT_DEFAULT; FSaveOptions_TransferSyn= SAVE_OPT_DEFAULT; FSaveOptions_VR= SAVE_OPT_DEFAULT; FSaveOptions_GroupLengths= GROUP_LEN_ABSENT; FSaveOptions_LengthEncoding= LEN_ENCOD_UNDEF; FSaveOptions_ImageCompression= IMG_CMPR_NONE; FSaveOptions_ImagePhotometric= IMG_PHTMTR_RGB; FSaveOptions_ImageBPP= IMG_BPP_24; FSaveOptions_QFactor= 2; LEADDlgFile1->EnableMethodErrors= false; LEADDlgFile1->PreviewEnabled= false; LEADDicom1->InitDS(DICOM_CLASS_UNKNOWN, 0); ImageList1->Height= 16; ImageList1->Width= 16; ClearControls( ); ShowMenus(false); nRet= LEADDlgService1->InitDialogs ( 0 ); if ( nRet != SUCCESS ) { ShowMessage ( "Error Initializing Dialogs" ); Application->Terminate ( ); } } void __fastcall TMainFrm::File_ExitClick(TObject *Sender) { Application->Terminate( ); } void ClearBitmap(TLEADImage *Image) { if(Image->Bitmap) for(int n=Image->BitmapListCount-1; n>=0; --n) { Image->BitmapListIndex= n; Image->Bitmap= 0; } } void __fastcall TMainFrm::File_OpenClick(TObject *Sender) { int nFlags, nRet; /* load a Data Set */ LEADDicom1->EnableMethodErrors= false; LEADDlgFile1->DlgFlags= DLG_OPEN_SHOW_PREVIEW | DLG_OPEN_USEFILESTAMP | DLG_OPEN_SHOW_FILEINFO; LEADDlgFile1->Filter= "DICOM Files|*.dic"; LEADDlgFile1->DialogTitle= "Load a DICOM File"; nRet= LEADDlgFile1->ShowOpenDlg ( this ); if ( nRet== SUCCESS_DLG_OK ) { ClearBitmap(LEADImage1); /* free existing bitmap */ Screen->Cursor= crHourGlass; ImageMenu->Visible= false; ProcessingMenu->Visible= false; nFlags= 0; switch(FLoadOptions_MetaHeader) { case META_HEADER_PRESENT: nFlags= nFlags | DS_METAHEADER_PRESENT; break; case META_HEADER_ABSENT: nFlags= nFlags | DS_METAHEADER_ABSENT; break; } switch(FLoadOptions_TransferSyn) { case TR_STX_LITTLE_ENDIAN: nFlags= nFlags | DS_LITTLE_ENDIAN; break; case TR_STX_BIG_ENDIAN: nFlags= nFlags | DS_BIG_ENDIAN; break; } switch(FLoadOptions_VR) { case VAL_REP_EXPLICIT: nFlags= nFlags | DS_EXPLICIT_VR; break; case VAL_REP_IMPLICIT: nFlags= nFlags | DS_IMPLICIT_VR; break; } nRet= LEADDicom1->LoadDS ( LEADDlgFile1->FileName, nFlags ); Screen->Cursor= crDefault; if(nRet != SUCCESS) ShowMessage("Error " + IntToStr(nRet) + " loading file!\nNot a DICOM File!"); else { Caption= FBaseCaption + " - " + LEADDlgFile1->FileName; ShowMenus(true); Screen->Cursor= crHourGlass; FillTreeHighLevel( ); Screen->Cursor= crDefault; } } } void __fastcall TMainFrm::FillTreeHighLevel(void) { Cardinal x, y, uCount; TTreeNode *NodeX; TreeView1->Items->BeginUpdate( ); TreeView1->Enabled= false; TreeView1->Items->Clear( ); LEADDicom1->EnableMethodErrors= false; NodeX= NULL; /* get the module count */ uCount= LEADDicom1->GetModuleCount( ); LEADDicom1->GetInfoDS( ); if(uCount > 0) for(x=0; xFindIndexModule(x); LEADDicom1->FindModuleIOD(LEADDicom1->InfoClass, LEADDicom1->CurrentModule->Module); NodeX= TreeView1->Items->Add(NodeX, LEADDicom1->CurrentIOD->Name); NodeX->Data= (void *)(LEADDicom1->CurrentModule->Module); NodeX->ImageIndex= IMAGE_FOLDER_CLOSED; NodeX->SelectedIndex= IMAGE_FOLDER_CLOSED; /* insert each element */ for(y=0; yCurrentModule->ElementCount; y++) { LEADDicom1->SetCurrentElement(LEADDicom1->CurrentModule->Element[y]->hElement); FillSubTreeHighLevel(NodeX, false); } } else { ShowMessage("Error - No Modules in this Data Set!"); FillTreeLowLevel( ); TreeView1->Enabled= true; TreeView1->Items->EndUpdate( ); return; } TreeView1->Items->EndUpdate( ); View_LowLevel->Checked= false; View_HighLevel->Checked= true; LEADDicom1->EnableMethodErrors= true; TreeView1->Selected= TreeView1->Items->GetFirstNode( ); TreeView1->Enabled= true; Edit_Tag->SetFocus( ); /* added here to cause correct setting in following line */ TreeView1->SetFocus( ); } void __fastcall TMainFrm::FillTreeLowLevel(void) { int nRet; TreeView1->Items->BeginUpdate( ); TreeView1->Enabled= false; TreeView1->Items->Clear( ); LEADDicom1->EnableMethodErrors= false; /* move to root of tree */ LEADDicom1->MoveFirstElement(false); /* move to first Element in Data Set */ nRet= LEADDicom1->MoveRootElement( ); /* get the root of this element */ if(nRet != SUCCESS) { ShowMessage("Error Reading Data Set!"); TreeView1->Items->EndUpdate( ); return; } /* now, add the Elements */ FillSubTreeLowLevel(NULL); TreeView1->Items->EndUpdate( ); View_LowLevel->Checked= true; View_HighLevel->Checked= false; LEADDicom1->EnableMethodErrors= true; TreeView1->Enabled= true; TreeView1->Selected= TreeView1->Items->GetFirstNode( ); Edit_Tag->SetFocus( ); /* added here to cause correct setting in following line */ TreeView1->SetFocus( ); } void __fastcall TMainFrm::FillSubTreeHighLevel(TTreeNode *ParentNode, bool bChildLevel) { int nRet; TTreeNode *NodeX; AnsiString sText; /* add the node to the tree */ nRet= LEADDicom1->FindTag(LEADDicom1->CurrentElement->Tag); if(nRet== SUCCESS) sText= LEADDicom1->CurrentTag->Name; else sText= "Item"; NodeX= TreeView1->Items->AddChild(ParentNode, sText); NodeX->Data= (void *)(LEADDicom1->CurrentElement->hElement); nRet= LEADDicom1->MoveChildElement( ); /* does this node have a child? */ if(nRet== SUCCESS) { NodeX->ImageIndex= IMAGE_FOLDER_CLOSED; NodeX->SelectedIndex= IMAGE_FOLDER_CLOSED; FillSubTreeHighLevel(NodeX, true); LEADDicom1->MoveParentElement( ); } else { NodeX->ImageIndex= IMAGE_ITEM; NodeX->SelectedIndex= IMAGE_ITEM; } if(bChildLevel) if(LEADDicom1->MoveNextElement(true)== SUCCESS) // fill siblings { FillSubTreeHighLevel(ParentNode, bChildLevel); LEADDicom1->MovePrevElement(true); } } void __fastcall TMainFrm::TreeView1Collapsed(TObject *Sender, TTreeNode *Node) { Node->ImageIndex= IMAGE_FOLDER_CLOSED; Node->SelectedIndex= IMAGE_FOLDER_CLOSED; } void __fastcall TMainFrm::TreeView1Expanded(TObject *Sender, TTreeNode *Node) { Node->ImageIndex= IMAGE_FOLDER_OPEN; Node->SelectedIndex= IMAGE_FOLDER_OPEN; } void __fastcall TMainFrm::File_CloseClick(TObject *Sender) { Screen->Cursor= crHourGlass; Caption= FBaseCaption; ShowMenus(false); ClearControls( ); /* close the current Data Set */ LEADDicom1->ResetDS( ); TreeView1->Items->Clear( ); ClearBitmap(LEADImage1); Screen->Cursor= crDefault; } void __fastcall TMainFrm::View_LowLevelClick(TObject *Sender) { if(!View_LowLevel->Checked) { DataSet_InsertModule->Visible= false; DataSet_N4->Visible= false; Screen->Cursor= crHourGlass; TreeView1->Items->Clear( ); FillTreeLowLevel( ); Screen->Cursor= crDefault; LEADDicom1->SetCurrentElement(THandle(TreeView1->Items->Item[0]->Data)); DisplayElement(TreeView1->Selected->Text); } } void __fastcall TMainFrm::DisplayElement(AnsiString NodeText) { int nRet; AnsiString sTag, sTagL, sTagR; AnsiString sVR, sTmp; sTag= IntToHex(int(LEADDicom1->CurrentElement->Tag), 8); sTagR= sTag.SubString(5, 4); sTagL= sTag.SubString(1, 4); sTag= "Tag: " + sTagL + ":" + sTagR; /* display info */ Edit_Tag->Text= sTag + " - " + NodeText; LEADDicom1->EnableMethodErrors= false; nRet= LEADDicom1->FindVR(LEADDicom1->CurrentElement->VR); if(nRet== SUCCESS) sVR= LEADDicom1->CurrentVR->Name; else sVR= "Unknown"; sTmp= VRCodeDesc(LEADDicom1->CurrentVR->Code); sVR= sTmp + " - " + sVR; Edit_VR->Text= sVR; Edit_Length->Text= IntToStr(LEADDicom1->CurrentElement->Length); Screen->Cursor= crHourGlass; Edit_ValueCount->Text= IntToStr(LEADDicom1->GetValueCount( )); Screen->Cursor= crDefault; switch(LEADDicom1->CurrentElement->VR) { case VR_OB: case VR_SQ: case VR_UN: switch(LEADDicom1->GetBitmapCount( )) { case 1: DisplayBitmap( ); break; case 0: DisplayValues( ); break; default: DisplayBitmapList( ); break; } break; case VR_OW: case VR_SS: case VR_US: LEADImage1->Visible= true; Memo_Values->Visible= false; ProcessingMenu->Visible= true; switch(LEADDicom1->GetBitmapCount( )) { case 1: DisplayBitmap( ); break; case 0: DisplayValues( ); break; default: DisplayBitmapList( ); break; } break; case VR_AT: case VR_IS: case VR_SL: case VR_UL: case VR_FL: case VR_DS: case VR_FD: 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: case VR_AS: case VR_DA: case VR_TM: case VR_DT: DisplayValues( ); break; default: switch(LEADDicom1->GetBitmapCount( )) { case 1: DisplayBitmap( ); break; case 0: DisplayBinary( ); break; default: DisplayBitmapList( ); break; } break; } LEADDicom1->EnableMethodErrors= true; if(LEADImage1->Bitmap) { ImageMenu->Visible= true; ProcessingMenu->Visible= true; } else { ImageMenu->Visible= false; ProcessingMenu->Visible= false; } } void __fastcall TMainFrm::FillSubTreeLowLevel(TTreeNode *ParentNode) { int nRet; TTreeNode *NodeX; AnsiString sText; /* add the node to the tree */ nRet= LEADDicom1->FindTag(LEADDicom1->CurrentElement->Tag); if(nRet== SUCCESS) sText= LEADDicom1->CurrentTag->Name; else sText= "Item"; NodeX= TreeView1->Items->AddChild(ParentNode, sText); NodeX->Data= (void *)(LEADDicom1->CurrentElement->hElement); NodeX->ImageIndex= IMAGE_ITEM; NodeX->SelectedIndex= IMAGE_ITEM; nRet= LEADDicom1->MoveChildElement( ); /* does this node have a child? */ if(nRet== SUCCESS) { NodeX->ImageIndex= IMAGE_FOLDER_CLOSED; NodeX->SelectedIndex= IMAGE_FOLDER_CLOSED; FillSubTreeLowLevel(NodeX); } /* move to next node in same level(if(one) */ nRet= LEADDicom1->MoveNextElement(true); if(nRet== SUCCESS) FillSubTreeLowLevel(ParentNode); else /* move back to parent */ LEADDicom1->MoveParentElement( ); } void __fastcall TMainFrm::DisplayBitmap(void) { int nRet; AnsiString oldText; Screen->Cursor= crHourGlass; Memo_Values->Visible= false; LEADImage1->Visible= true; Memo_Values->Lines->Clear( ); ClearBitmap(LEADImage1); /* get the value */ oldText= Caption; nRet= LEADDicom1->GetBitmapValue(0, 0, ORDER_RGB); Caption= oldText; if(nRet== SUCCESS) { /* display the value */ LEADImage1->PaintSizeMode= smNormal; UnCheckImageMenuItems( ); Image_Normal->Checked= true; LEADImage1->RefBitmap= true; LEADImage1->Bitmap= LEADDicom1->Bitmap; LEADImage1->RefBitmap= false; LEADDicom1->Bitmap= 0; } else ShowMessage("Error reading bitmap!"); Screen->Cursor= crDefault; } void __fastcall TMainFrm::DisplayBitmapList(void) { int nRet= FAILURE; Cardinal uCount, x; Screen->Cursor= crHourGlass; Memo_Values->Visible= false; LEADImage1->Visible= true; Memo_Values->Lines->Clear( ); ClearBitmap(LEADImage1); /* get the value */ uCount= LEADDicom1->GetBitmapCount( ); for(x=0; xGetBitmapValue(x, 0, ORDER_RGB); if(nRet== SUCCESS) { /* display the value */ LEADImage1->PaintSizeMode= smNormal; UnCheckImageMenuItems( ); Image_Normal->Checked= true; LEADImage1->InsertBitmapListItem(x, LEADDicom1->Bitmap); LEADImage1->BitmapListIndex= x; LEADImage1->ForceRepaint( ); } else ShowMessage("Error reading bitmap list!"); } if(nRet== SUCCESS) LEADImage1->BitmapListIndex= 0; Screen->Cursor= crDefault; } void __fastcall TMainFrm::DisplayValues(void) { int nRet; Cardinal uCount, x; LEADImage1->Visible= false; ClearBitmap(LEADImage1); Memo_Values->Visible= true; Memo_Values->Lines->Clear( ); LEADDicom1->EnableMethodErrors= false; /* get the values and display them */ nRet= LEADDicom1->GetConvertValue( ); if(nRet== SUCCESS) { uCount= LEADDicom1->StringValueCount; for(x=0; xLines->Add(LEADDicom1->StringValues[x]); } LEADDicom1->EnableMethodErrors= true; } void __fastcall TMainFrm::DisplayBinary(void) { Cardinal uCount, x; int nRet; char buf[2]; Memo_Values->Visible= true; LEADImage1->Visible= false; Memo_Values->Lines->Clear( ); ClearBitmap(LEADImage1); /* get the byte count */ uCount= LEADDicom1->CurrentElement->Length; if(uCount > 0) { /* get the bytes */ nRet= LEADDicom1->GetBinaryValue(uCount); buf[1]= '\0'; if(nRet== SUCCESS) for(x=0; xBinaryValueCount; ++x) { /* display each byte as a char separated by a space */ buf[0]= LEADDicom1->BinaryValues[x]; Memo_Values->Text= Edit_Tag->Text + buf + " "; } } } void __fastcall TMainFrm::ShowMenus(bool bLoaded) { Options_ConformanceTest->Visible= bLoaded; File_Save->Enabled= bLoaded; File_Save->Visible= bLoaded; File_Close->Visible= bLoaded; ViewMenu->Visible= bLoaded; DataSetMenu->Visible= bLoaded; ImageMenu->Visible= bLoaded; ProcessingMenu->Visible= bLoaded; Options_N2->Visible= bLoaded; } void __fastcall TMainFrm::View_HighLevelClick(TObject *Sender) { if(!View_HighLevel->Checked) { Screen->Cursor= crHourGlass; DataSet_InsertModule->Visible= true; DataSet_N4->Visible= true; FillTreeHighLevel( ); TreeView1->Selected= TreeView1->Items->GetFirstNode( ); Edit_Tag->SetFocus( ); /* added here to cause correct setting in following line */ TreeView1->SetFocus( ); ClearBitmap(LEADImage1); ClearControls( ); Screen->Cursor= crDefault; } } void __fastcall TMainFrm::Table_ValueRepresentationsClick(TObject *Sender) { Application->CreateForm(__classid(TVR_Frm), &VR_Frm); LEADDicom1->EnableMethodErrors= false; VR_Frm->ShowModal( ); LEADDicom1->EnableMethodErrors= true; VR_Frm->Free(); } AnsiString __fastcall TMainFrm::VRCodeDesc(Word nCode) { switch(nCode) { case VR_AE: return "AE"; case VR_AS: return "AS"; case VR_AT: return "AT"; case VR_CS: return "CS"; case VR_DA: return "DA"; case VR_DS: return "DS"; case VR_DT: return "DT"; case VR_FD: return "FD"; case VR_FL: return "FL"; case VR_IS: return "IS"; case VR_LO: return "LO"; case VR_LT: return "LT"; case VR_OB: return "OB"; case VR_OW: return "OW"; case VR_PN: return "PN"; case VR_SH: return "SH"; case VR_SL: return "SL"; case VR_SQ: return "SQ"; case VR_SS: return "SS"; case VR_ST: return "ST"; case VR_TM: return "TM"; case VR_UI: return "UI"; case VR_UL: return "UL"; case VR_UN: return "UN"; case VR_US: return "US"; case VR_UT: return "UT"; } return "UN"; } void __fastcall TMainFrm::Table_UniqueIdentifiersClick(TObject *Sender) { Application->CreateForm(__classid(TUID_Frm), &UID_Frm); LEADDicom1->EnableMethodErrors= false; UID_Frm->ShowModal( ); LEADDicom1->EnableMethodErrors= true; UID_Frm->Free ( ); } void __fastcall TMainFrm::Table_ElementTagClick(TObject *Sender) { Application->CreateForm(__classid(TTag_Frm), &Tag_Frm); LEADDicom1->EnableMethodErrors= false; Tag_Frm->ShowModal( ); LEADDicom1->EnableMethodErrors= true; Tag_Frm->Free ( ); } void __fastcall TMainFrm::Table_InformationObjectDefinitionsClick(TObject *Sender) { Application->CreateForm(__classid(TIOD_Frm), &IOD_Frm); LEADDicom1->EnableMethodErrors= false; IOD_Frm->ShowModal( ); LEADDicom1->EnableMethodErrors= true; IOD_Frm->Free ( ); } void __fastcall TMainFrm::Options_LoadClick(TObject *Sender) { Application->CreateForm(__classid(TLoadOptions_Frm), &LoadOptions_Frm); LEADDicom1->EnableMethodErrors= false; LoadOptions_Frm->ShowModal( ); LEADDicom1->EnableMethodErrors= true; LoadOptions_Frm->Free ( ); } void __fastcall TMainFrm::File_SaveClick(TObject *Sender) { int nRet; Word nSaveFlags; AnsiString strFileName; LEADDicom1->EnableMethodErrors= false; SaveDialog1->Filter= "DICOM Files|*.dic"; SaveDialog1->Title= "Save a DICOM File"; if(SaveDialog1->Execute( )) { strFileName = SaveDialog1->FileName; if(strcmp(StrLower(ExtractFileExt(strFileName).c_str()), ".dic") != 0) strFileName += ".dic"; Screen->Cursor= crHourGlass; nSaveFlags= 0; if(FSaveOptions_MetaHeader== META_HEADER_PRESENT) nSaveFlags |= DS_METAHEADER_PRESENT; if(FSaveOptions_MetaHeader== META_HEADER_ABSENT) nSaveFlags |= DS_METAHEADER_ABSENT; if(FSaveOptions_TransferSyn == TR_STX_LITTLE_ENDIAN) nSaveFlags |= DS_LITTLE_ENDIAN; if(FSaveOptions_TransferSyn == TR_STX_BIG_ENDIAN) nSaveFlags |= DS_BIG_ENDIAN; if(FSaveOptions_VR== VAL_REP_EXPLICIT) nSaveFlags |= DS_EXPLICIT_VR; if(FSaveOptions_VR== VAL_REP_IMPLICIT) nSaveFlags |= DS_IMPLICIT_VR; if(FSaveOptions_GroupLengths== GROUP_LEN_PRESENT) nSaveFlags |= DS_GROUP_LENGTHS; if(FSaveOptions_LengthEncoding== LEN_ENCOD_EXPLICIT) nSaveFlags |= DS_LENGTH_EXPLICIT; nRet= LEADDicom1->SaveDS(strFileName, nSaveFlags); Screen->Cursor= crDefault; if(nRet != SUCCESS) ShowMessage("Error " + IntToStr(nRet) + " saveing file!"); else Caption= FBaseCaption + " - " + strFileName; } LEADDicom1->EnableMethodErrors= true; } void __fastcall TMainFrm::Options_SaveClick(TObject *Sender) { Application->CreateForm(__classid(TSaveOptions_Frm), &SaveOptions_Frm); LEADDicom1->EnableMethodErrors= false; SaveOptions_Frm->ShowModal( ); LEADDicom1->EnableMethodErrors= true; SaveOptions_Frm->Free ( ); } void __fastcall TMainFrm::TreeView1Change(TObject *Sender, TTreeNode *Node) { if((Node != TreeView1->Selected) || !File_Save->Enabled) return; ClearBitmap(LEADImage1); ClearControls( ); ImageMenu->Visible= false; ProcessingMenu->Visible= false; if(IsModuleNode(Node)) { DataSet_DeleteModule->Visible= true; DataSet_N3->Visible= false; DataSet_EditValue->Visible= false; DataSet_DeleteElement->Visible= false; } else { DataSet_DeleteModule->Visible= false; DataSet_N3->Visible= true; DataSet_EditValue->Visible= true; DataSet_DeleteElement->Visible= true; LEADDicom1->SetCurrentElement(THandle(Node->Data)); DisplayElement(Node->Text); } } bool __fastcall TMainFrm::IsModuleNode(TTreeNode *Node) { if((Node->Level== 0) && View_HighLevel->Checked) return true; return false; } void __fastcall TMainFrm::Options_ConformanceTestClick(TObject *Sender) { LEADDicom1->EnableConformanceStatus= true; Screen->Cursor= crHourGlass; LEADDicom1->ConformanceTestDS( ); Screen->Cursor= crDefault; } void __fastcall TMainFrm::LEADDicom1ConformanceStatus(TObject *Sender, int nFlags) { AnsiString msg; int nRet; AnsiString sTag; AnsiString sTagL; AnsiString sTagR; /* display info about non-standard element */ switch(nFlags) { case CALLBACK_ERROR_UNKNOWN_CLASS: msg= "Unknown Class"; break; case CALLBACK_ERROR_UNKNOWN_TAG: msg= "Unknown Tag"; break; case CALLBACK_ERROR_UNKNOWN_VR: msg= "Unknown VR"; break; case CALLBACK_ERROR_WRONG_VR: msg= "Error in VR"; break; case CALLBACK_ERROR_MIN_VM: msg= "Error in MinVM"; break; case CALLBACK_ERROR_MAX_VM: msg= "Error in MaxVM"; break; case CALLBACK_ERROR_DIVIDE_VM: msg= "Error in DivideVM"; break; case CALLBACK_ERROR_IMAGE: msg= "Error in Image"; break; default: return; } sTag= IntToHex(int(LEADDicom1->CurrentElement->Tag), 8); sTagR= sTag.SubString(5, 4); sTagL= sTag.SubString(1, 4); sTag= sTagL + ":" + sTagR; msg= msg + "\nTag: " + sTag; nRet= Application->MessageBox(msg.c_str( ), "Non-Standard Element", MB_OKCANCEL); if(nRet== IDCANCEL) LEADDicom1->EnableConformanceStatus= false; } void __fastcall TMainFrm::UpdateDSImage(void) { int nSaveCompression, nSavePhotometric, nSaveBitsPerPixel, nRet; switch(FSaveOptions_ImageCompression) { case IMG_CMPR_NONE: nSaveCompression= DICOM_IMAGE_COMPRESSION_NONE; break; case IMG_CMPR_RUN_LEN: nSaveCompression= DICOM_IMAGE_COMPRESSION_RLE; break; case IMG_CMPR_JPG_LSY: nSaveCompression= DICOM_IMAGE_COMPRESSION_JPEG_LOSSY; break; default:/*IMG_CMPR_JPG_LSLESS:*/ nSaveCompression= DICOM_IMAGE_COMPRESSION_JPEG_LOSSLESS; break; } switch(FSaveOptions_ImagePhotometric) { case IMG_PHTMTR_MONO: nSavePhotometric= DICOM_IMAGE_PHOTOMETRIC_MONOCHROME2; break; case IMG_PHTMTR_PALET: nSavePhotometric= DICOM_IMAGE_PHOTOMETRIC_PALETTE_COLOR; break; default: /*IMG_PHTMTR_RGB:*/ nSavePhotometric= DICOM_IMAGE_PHOTOMETRIC_RGB; break; } switch(FSaveOptions_ImageBPP) { case IMG_BPP_8: nSaveBitsPerPixel= 8; break; case IMG_BPP_16: nSaveBitsPerPixel= 16; break; default: /* IMG_BPP_24 */ nSaveBitsPerPixel= 24; break; } if(LEADImage1->BitmapListCount > 1) { Screen->Cursor= crHourGlass; LEADDicom1->GetImageInformation(LEADImage1->BitmapListIndex); /* first remove existing image from Data Set */ LEADDicom1->DeleteBitmapValue(LEADImage1->BitmapListIndex, 1); /* now insert the modified image into the Data Set */ nRet= LEADDicom1->InsertBitmapValue(LEADImage1->Bitmap, LEADImage1->BitmapListIndex, nSaveCompression, nSavePhotometric, nSaveBitsPerPixel, FSaveOptions_QFactor); Screen->Cursor= crDefault; LEADImage1->ForceRepaint( ); } else { Screen->Cursor= crHourGlass; LEADDicom1->GetImageInformation(0); LEADDicom1->Bitmap= LEADImage1->Bitmap; nRet= LEADDicom1->SetBitmapValue(nSaveCompression, nSavePhotometric, nSaveBitsPerPixel, FSaveOptions_QFactor); LEADDicom1->Bitmap= 0; Screen->Cursor= crDefault; LEADImage1->ForceRepaint( ); } if(nRet != SUCCESS) ShowMessage("Error Updating DataSet!"); } void __fastcall TMainFrm::DataSet_EditValueClick(TObject *Sender) { TLEADImage *LEADImageTmp=NULL; int z, nRet; LEADDicom1->EnableMethodErrors= false; if(LEADImage1->Bitmap != 0) { /* update a bitmap | bitmap list item */ LEADImageTmp= new TLEADImage(this); LEADImageTmp->Parent= this; LEADImageTmp->Visible= false; LEADDlgFile1->LEADImage= LEADImageTmp; LEADDlgFile1->DlgFlags= DLG_OPEN_LOADBITMAP | DLG_OPEN_SHOW_PREVIEW | DLG_OPEN_USEFILESTAMP | DLG_OPEN_SHOW_FILEINFO; LEADDlgFile1->Filter= "All Files|*.*"; LEADDlgFile1->DialogTitle= "Pick image to insert"; nRet= LEADDlgFile1->ShowOpenDlg ( this ); if ( nRet == SUCCESS_DLG_OK ) { if(LEADImage1->BitmapListCount > 1) { z= LEADImage1->BitmapListIndex; LEADImage1->DeleteBitmapListItems(z, 1); LEADImage1->InsertBitmapListItem(z, LEADImageTmp->Bitmap); } else LEADImage1->Bitmap= LEADImageTmp->Bitmap; UpdateDSImage( ); } } else { Application->CreateForm(__classid(TEditValue_Frm), &EditValue_Frm); if(EditValue_Frm->ShowModal( )== mrOk) DisplayValues( ); EditValue_Frm->Free ( ); } LEADDicom1->EnableMethodErrors= true; if(LEADImageTmp) delete LEADImageTmp; } void __fastcall TMainFrm::UnCheckImageMenuItems(void) { Image_Normal->Checked= false; Image_Fit->Checked= false; Image_ZoomIn->Checked= false; Image_ZoomIn2x->Checked= false; Image_ZoomIn4X->Checked= false; Image_ZoomOut->Checked= false; Image_ZoomOut2X->Checked= false; Image_ZoomOut4X->Checked= false; } void __fastcall TMainFrm::Image_NormalClick(TObject *Sender) { UnCheckImageMenuItems( ); Image_Normal->Checked= true; LEADImage1->PaintSizeMode= smNormal; LEADImage1->ForceRepaint( ); } void __fastcall TMainFrm::Image_FitClick(TObject *Sender) { UnCheckImageMenuItems( ); Image_Fit->Checked= true; LEADImage1->PaintSizeMode= smFit; LEADImage1->ForceRepaint( ); } void __fastcall TMainFrm::Image_ZoomIn2xClick(TObject *Sender) { UnCheckImageMenuItems( ); Image_ZoomIn->Checked= true; Image_ZoomIn2x->Checked= true; LEADImage1->PaintSizeMode= smZoom; LEADImage1->PaintZoomFactor= 200; LEADImage1->ForceRepaint( ); } void __fastcall TMainFrm::Image_ZoomIn4XClick(TObject *Sender) { UnCheckImageMenuItems( ); Image_ZoomIn->Checked= true; Image_ZoomIn4X->Checked= true; LEADImage1->PaintSizeMode= smZoom; LEADImage1->PaintZoomFactor= 400; LEADImage1->ForceRepaint( ); } void __fastcall TMainFrm::Image_ZoomOut2XClick(TObject *Sender) { UnCheckImageMenuItems( ); Image_ZoomOut->Checked= true; Image_ZoomOut2X->Checked= true; LEADImage1->PaintSizeMode= smZoom; LEADImage1->PaintZoomFactor= 50; LEADImage1->ForceRepaint( ); } void __fastcall TMainFrm::Image_ZoomOut4XClick(TObject *Sender) { UnCheckImageMenuItems( ); Image_ZoomOut->Checked= true; Image_ZoomOut4X->Checked= true; LEADImage1->PaintSizeMode= smZoom; LEADImage1->PaintZoomFactor= 25; LEADImage1->ForceRepaint( ); } void __fastcall TMainFrm::Image_AnimationClick(TObject *Sender) { LEADImage1->AnimationLoop= Image_AnimationLoop->Checked; LEADImage1->AnimationEnable= true; } void __fastcall TMainFrm::ImageMenuClick(TObject *Sender) { bool bMultiPage; bMultiPage= LEADImage1->BitmapListCount > 1; Image_Animation->Visible= bMultiPage; Image_AnimationLoop->Visible= bMultiPage; Image_N7->Visible= bMultiPage; Image_FirstFrame->Visible= LEADImage1->BitmapListIndex > 0; Image_PreviousFrame->Visible= LEADImage1->BitmapListIndex > 0; Image_LastFrame->Visible= LEADImage1->BitmapListIndex < LEADImage1->BitmapListCount - 1; Image_NextFrame->Visible= LEADImage1->BitmapListIndex < LEADImage1->BitmapListCount - 1; Image_N8->Visible= bMultiPage; } void __fastcall TMainFrm::Image_AnimationLoopClick(TObject *Sender) { Image_AnimationLoop->Checked= !Image_AnimationLoop->Checked; } void __fastcall TMainFrm::LEADImage1Animate(TObject *Sender, bool bEnable) { static AnsiString sOldCaption("dummy"); if(bEnable) { sOldCaption= Caption; Caption= " ***** CLICK ON THE IMAGE to Stop Animation Palyback *****"; } else Caption= sOldCaption; for(int nIndex=0; nIndexItems->Count; nIndex++) MainMenu1->Items->Items[nIndex]->Enabled= !bEnable; TreeView1->Enabled= !bEnable; } void __fastcall TMainFrm::LEADImage1Click(TObject *Sender) { LEADImage1->AnimationEnable= false; } void __fastcall TMainFrm::Image_FirstFrameClick(TObject *Sender) { LEADImage1->BitmapListIndex= 0; } void __fastcall TMainFrm::Image_NextFrameClick(TObject *Sender) { LEADImage1->BitmapListIndex= LEADImage1->BitmapListIndex + 1; } void __fastcall TMainFrm::Image_PreviousFrameClick(TObject *Sender) { LEADImage1->BitmapListIndex= LEADImage1->BitmapListIndex - 1; } void __fastcall TMainFrm::Image_LastFrameClick(TObject *Sender) { LEADImage1->BitmapListIndex= LEADImage1->BitmapListCount - 1; } void __fastcall TMainFrm::Image_ImageInfoClick(TObject *Sender) { AnsiString msg; LEADDicom1->GetImageInformation(0); msg= "Compression: " + IntToStr(LEADDicom1->ImageInfo.Compression); msg= msg + "\nPhotometric: " + IntToStr(LEADDicom1->ImageInfo.Photometric) + " - " + LEADDicom1->ImageInfo.PhotometricString; msg= msg + "\nRows x Columns: " + IntToStr(LEADDicom1->ImageInfo.Rows) + " x " + IntToStr(LEADDicom1->ImageInfo.Columns); msg= msg + "\nBits Allocated: " + IntToStr(LEADDicom1->ImageInfo.BitsAllocated); msg= msg + "\nBits Stored: " + IntToStr(LEADDicom1->ImageInfo.BitsStored); msg= msg + "\nHigh Bit: " + IntToStr(LEADDicom1->ImageInfo.HighBit); msg= msg + "\nPixel Representation: " + IntToStr(LEADDicom1->ImageInfo.PixelRepresentation); msg= msg + "\nPlanar Configuration: " + IntToStr(LEADDicom1->ImageInfo.PlanarConfiguration); msg= msg + "\nResolutionX: " + IntToStr(LEADDicom1->ImageInfo.ResolutionX); msg= msg + "\nResolutionY: " + IntToStr(LEADDicom1->ImageInfo.ResolutionY); msg= msg + "\nSmallestImagePixelValue: " + IntToStr(LEADDicom1->ImageInfo.SmallestImagePixelValue); msg= msg + "\nSmallestImagePixelValueFlag: " + IntToStr(LEADDicom1->ImageInfo.SmallestImagePixelValueFlag); msg= msg + "\nLargestImagePixelValue: " + IntToStr(LEADDicom1->ImageInfo.LargestImagePixelValue); msg= msg + "\nLargestImagePixelValueFlag: " + IntToStr(LEADDicom1->ImageInfo.LargestImagePixelValueFlag); msg= msg + "\nRedEntries: " + IntToStr(LEADDicom1->ImageInfo.RedEntries); msg= msg + "\nRedFirst: " + IntToStr(LEADDicom1->ImageInfo.RedFirst); msg= msg + "\nRedBits: " + IntToStr(LEADDicom1->ImageInfo.RedBits); msg= msg + "\nGreenEntries: " + IntToStr(LEADDicom1->ImageInfo.GreenEntries); msg= msg + "\nGreenFirst: " + IntToStr(LEADDicom1->ImageInfo.GreenFirst); msg= msg + "\nGreenBits: " + IntToStr(LEADDicom1->ImageInfo.GreenBits); msg= msg + "\nBlueEntries: " + IntToStr(LEADDicom1->ImageInfo.BlueEntries); msg= msg + "\nBlueFirst: " + IntToStr(LEADDicom1->ImageInfo.BlueFirst); msg= msg + "\nBlueBits: " + IntToStr(LEADDicom1->ImageInfo.BlueBits); msg= msg + "\nPaletteEntries: " + IntToStr(LEADDicom1->ImageInfo.PaletteEntries); msg= msg + "\nPaletteFirst: " + IntToStr(LEADDicom1->ImageInfo.PaletteFirst); msg= msg + "\nBitsPerPixel: " + IntToStr(LEADDicom1->ImageInfo.BitsPerPixel); msg= msg + "\nGray: " + IntToStr(LEADDicom1->ImageInfo.Gray); msg= msg + "\nFrames: " + IntToStr(LEADDicom1->ImageInfo.Frames); ShowMessage(msg); } void __fastcall TMainFrm::Processing_FlipClick(TObject *Sender) { if(LEADImage1->Flip( )== SUCCESS) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_ReverseClick(TObject *Sender) { if(LEADImage1->Reverse( )== SUCCESS) UpdateDSImage( ); } void __fastcall TMainFrm::GrayScale81Click(TObject *Sender) { if(LEADImage1->GrayScale(8)== SUCCESS) UpdateDSImage( ); } void __fastcall TMainFrm::GrayScale121Click(TObject *Sender) { if(LEADImage1->GrayScale(12)== SUCCESS) UpdateDSImage( ); } void __fastcall TMainFrm::GrayScale161Click(TObject *Sender) { if(LEADImage1->GrayScale(16)== SUCCESS) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_InvertClick(TObject *Sender) { if(LEADImage1->Invert( ) == SUCCESS) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_ContrastClick(TObject *Sender) { LEADDlgColor1->Change= 50; /* set initial value */ LEADDlgColor1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgColor1->DlgFlags= DLG_CONTRAST_SHOW_PREVIEW | DLG_CONTRAST_SHOW_TOOL_ZOOMLEVEL | DLG_CONTRAST_AUTOPROCESS; if ( LEADDlgColor1->ShowContrastDlg ( this )== SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_SaturationClick(TObject *Sender) { LEADDlgColor1->Change= 50; /* set initial value */ LEADDlgColor1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgColor1->DlgFlags= DLG_SATURATION_SHOW_PREVIEW | DLG_SATURATION_SHOW_TOOL_ZOOMLEVEL | DLG_SATURATION_AUTOPROCESS; if ( LEADDlgColor1->ShowSaturationDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_HistogramEqualizeClick(TObject *Sender) { if ( LEADImage1->HistoEqualize(YUV_SPACE) == SUCCESS ) UpdateDSImage ( ); } void __fastcall TMainFrm::Processing_StretchIntensityClick(TObject *Sender) { if ( LEADImage1->StretchIntensity( )== SUCCESS ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_PosterizeClick(TObject *Sender) { LEADDlgColor1->Change= 50; /* set initial value */ LEADDlgColor1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgColor1->DlgFlags= DLG_POSTERIZE_SHOW_PREVIEW | DLG_POSTERIZE_SHOW_TOOL_ZOOMLEVEL | DLG_POSTERIZE_AUTOPROCESS; if ( LEADDlgColor1->ShowPosterizeDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_HalftoneClick(TObject *Sender) { int nRet; LEADDlgColor1->DlgFlags= DLG_HALFTONE_SHOW_TOOL_ZOOMLEVEL | DLG_HALFTONE_SHOW_PREVIEW; LEADDlgColor1->LEADImage= LEADImage1; nRet= LEADDlgColor1->ShowHalftoneDlg ( this ); if ( nRet == SUCCESS_DLG_OK ) { LEADImage1->Halftone ( LEADDlgColor1->HalftoneType, LEADDlgColor1->Angle, LEADDlgColor1->Dimension, 0 ); UpdateDSImage( ); } } void __fastcall TMainFrm::Processing_BrightnessClick(TObject *Sender) { LEADDlgColor1->Change= 50; /* set initial value */ LEADDlgColor1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgColor1->DlgFlags= DLG_BRIGHTNESS_SHOW_TOOL_ZOOMLEVEL | DLG_BRIGHTNESS_SHOW_PREVIEW | DLG_BRIGHTNESS_AUTOPROCESS; if ( LEADDlgColor1->ShowBrightnessDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_HueClick(TObject *Sender) { LEADDlgColor1->Change= 50; /* set initial value */ LEADDlgColor1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgColor1->DlgFlags= DLG_HUE_SHOW_PREVIEW | DLG_HUE_SHOW_TOOL_ZOOMLEVEL | DLG_HUE_AUTOPROCESS; if ( LEADDlgColor1->ShowHueDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_RotateClick(TObject *Sender) { LEADDlgImage1->BackgroundColor= clBlack; LEADDlgImage1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgImage1->DlgFlags= DLG_ROTATE_AUTOPROCESS | DLG_ROTATE_SHOW_PREVIEW | DLG_ROTATE_SHOW_BACKCOLOR | DLG_ROTATE_SHOW_RESIZE; if ( LEADDlgImage1->ShowRotateDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_ResizeClick(TObject *Sender) { LEADDlgImage1->OriginalResolutionX= LEADImage1->BitmapXRes; LEADDlgImage1->OriginalResolutionY= LEADImage1->BitmapYRes; LEADDlgImage1->OriginalBitsPerPixel= LEADImage1->BitmapBits; LEADDlgImage1->ResizeFlags= SIZE_NORMAL; LEADDlgImage1->NewWidth= LEADImage1->BitmapWidth; LEADDlgImage1->NewHeight= LEADImage1->BitmapHeight; LEADDlgImage1->OriginalWidth= LEADImage1->BitmapWidth; LEADDlgImage1->OriginalHeight= LEADImage1->BitmapHeight; LEADDlgImage1->DlgFlags= DLG_CANVASRESIZE_SHOW_BACKCOLOR + DLG_CANVASRESIZE_SHOW_CURRENT_HEIGHT + DLG_CANVASRESIZE_SHOW_CURRENT_WIDTH + DLG_CANVASRESIZE_SHOW_HORIZPOS + DLG_CANVASRESIZE_SHOW_VERTPOS + DLG_CANVASRESIZE_SHOW_KEEPASPECT + DLG_RESIZE_AUTOPROCESS; LEADDlgImage1->LEADImage= LEADImage1; /* assign the main control for processing */ if ( LEADDlgImage1->ShowResizeDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_SpatialFiltersClick(TObject *Sender) { LEADDlgImgEffect1->SpatialFilterType= FLT_GRADIENT_N; LEADDlgImgEffect1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgImgEffect1->DlgFlags= DLG_GRADIENTFILTER_SHOW_PREVIEW | DLG_GRADIENTFILTER_SHOW_TOOL_ZOOMLEVEL | DLG_GRADIENTFILTER_AUTOPROCESS; if ( LEADDlgImgEffect1->ShowGradientFilterDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_BinaryFiltersClick(TObject *Sender) { LEADDlgImgEffect1->BinaryFilterType= BFLT_EROSION_OMNI; /* set initial value */ LEADDlgImgEffect1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgImgEffect1->DlgFlags= DLG_EROSIONFILTER_SHOW_PREVIEW | DLG_EROSIONFILTER_SHOW_TOOL_ZOOMLEVEL | DLG_EROSIONFILTER_AUTOPROCESS; if ( LEADDlgImgEffect1->ShowErosionFilterDlg ( this ) == SUCCESS ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_ColorResolutionClick(TObject *Sender) { LEADDlgColor1->BitsPerPixel= LEADImage1->BitmapBits; LEADDlgColor1->LEADImage= LEADImage1; LEADDlgColor1->DlgFlagsEx= DLG_COLORRES_SHOW_BITALL | DLG_COLORRES_SHOW_DITHER_ALL | DLG_COLORRES_SHOW_PAL_ALL; LEADDlgColor1->DlgFlags= DLG_COLORRES_SHOW_PREVIEW | DLG_COLORRES_SHOW_OPENPALFILE | DLG_COLORRES_SHOW_ORDER | DLG_COLORRES_AUTOPROCESS | DLG_COLORRES_SHOW_TOOL_ZOOMLEVEL; LEADDlgColor1->PaletteFlags= 0; LEADDlgColor1->DitherFlags= 0; LEADDlgColor1->LEADImage= LEADImage1; /* assign the main control for processing */ if ( LEADDlgColor1->ShowColorResDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_WindowLevelClick(TObject *Sender) { double dWindowCenter; double dWindowWidth; Screen->Cursor= crHourGlass; LEADImage1->EnableMethodErrors = false; LEADImage1->GetMinMaxBits ( ); LEADImage1->GetMinMaxVal ( ); LEADDlgColor1->WindowLevelLowBit= LEADImage1->MinBit; LEADDlgColor1->WindowLevelHighBit= LEADImage1->MaxBit; LEADDlgColor1->WindowLevelLow= LEADImage1->MinVal; LEADDlgColor1->WindowLevelHigh= LEADImage1->MaxVal; LEADDlgColor1->WindowLevelFlags= FILLLUT_OUTSIDE + FILLLUT_LINEAR; LEADDlgColor1->DlgFlags= DLG_WINDOWLEVEL_AUTOPROCESS + DLG_WINDOWLEVEL_SHOW_PREVIEW + DLG_WINDOWLEVEL_SHOW_TOOL_ZOOMLEVEL + DLG_WINDOWLEVEL_SHOW_RANGE; LEADDlgColor1->LEADImage= LEADImage1; switch ( LEADImage1->IsGrayScale ) { case GRAY_ORDEREDNORMAL: { LEADDlgColor1->WindowLevelStartColor= RGB ( 0, 0, 0 ); LEADDlgColor1->WindowLevelEndColor= RGB ( 255, 255, 255 ); if(LEADImage1->GetLinearVOILUT(dWindowCenter, dWindowWidth, 0)== SUCCESS) { LEADDlgColor1->WindowLevelLow= (int)(dWindowCenter - (dWindowWidth)/2); LEADDlgColor1->WindowLevelHigh= (int)(dWindowCenter + (dWindowWidth)/2); } } break; case GRAY_ORDEREDINVERSE: { LEADDlgColor1->WindowLevelStartColor= RGB ( 255, 255, 255 ); LEADDlgColor1->WindowLevelEndColor= RGB ( 0, 0, 0 ); if(LEADImage1->GetLinearVOILUT(dWindowCenter, dWindowWidth, 0)== SUCCESS) { LEADDlgColor1->WindowLevelLow= (int)(dWindowCenter - (dWindowWidth)/2); LEADDlgColor1->WindowLevelHigh= (int)(dWindowCenter + (dWindowWidth)/2); } } break; case GRAY_NOTORDERED: { LEADDlgColor1->WindowLevelStartColor= RGB ( 0, 0, 0 ); LEADDlgColor1->WindowLevelEndColor= RGB ( 255, 255, 255 ); } break; default: { ShowMessage ( "Window Level is not supported for this bitmap order" ); return; } } try { LEADDlgColor1->ShowWindowLevelDlg ( this ); } catch ( const Exception &E ) { ShowMessage ( "Error : " + LEADImage1->ErrorMsg ); Screen->Cursor= crDefault; return; } Screen->Cursor= crDefault; LEADImage1->EnableMethodErrors = true; } void __fastcall TMainFrm::Processing_GammaCorrectClick(TObject *Sender) { LEADDlgColor1->GammaRedValue= 100; /* set initial value */ LEADDlgColor1->GammaGreenValue= 100; LEADDlgColor1->GammaBlueValue= 100; LEADDlgColor1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgColor1->DlgFlags= DLG_GAMMAADJUSTMENT_SHOW_PREVIEW | DLG_GAMMAADJUSTMENT_SHOW_TOOL_ZOOMLEVEL | DLG_GAMMAADJUSTMENT_AUTOPROCESS; if ( LEADDlgColor1->ShowGammaAdjustmentDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_IntensityDetectClick(TObject *Sender) { LEADDlgColor1->IntensityLow= 100; /* set initial values */ LEADDlgColor1->IntensityHigh= 155; LEADDlgColor1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgColor1->DlgFlags= DLG_INTENSITYDETECT_SHOW_PREVIEW | DLG_INTENSITYDETECT_SHOW_TOOL_ZOOMLEVEL | DLG_INTENSITYDETECT_AUTOPROCESS; if ( LEADDlgColor1->ShowIntensityDetectDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::Processing_HistoContrastClick(TObject *Sender) { LEADDlgColor1->Change= 50; /* set initial value */ LEADDlgColor1->LEADImage= LEADImage1; /* assign the main control for processing */ LEADDlgColor1->DlgFlags= DLG_HISTOCONTRAST_SHOW_PREVIEW | DLG_HISTOCONTRAST_SHOW_TOOL_ZOOMLEVEL | DLG_HISTOCONTRAST_AUTOPROCESS; if ( LEADDlgColor1->ShowHistoContrastDlg ( this ) == SUCCESS_DLG_OK ) UpdateDSImage( ); } void __fastcall TMainFrm::ProcessingMenuClick(TObject *Sender) { Processing_WindowLevel->Visible= false; if(LEADImage1->Bitmap != 0) if((LEADImage1->BitmapBits== 12) | (LEADImage1->BitmapBits== 16)) Processing_WindowLevel->Visible= (LEADImage1->IsGrayScale != GRAY_NO); } void __fastcall TMainFrm::DataSet_InsertElementClick(TObject *Sender) { Application->CreateForm(__classid(TInsertElement_Frm), &InsertElement_Frm); LEADDicom1->EnableMethodErrors= false; InsertElement_Frm->ShowModal( ); LEADDicom1->EnableMethodErrors= true; InsertElement_Frm->Free ( ); } void __fastcall TMainFrm::DataSet_DeleteElementClick(TObject *Sender) { TTreeNode *NodeX; int nRet; LEADDicom1->EnableMethodErrors= false; LEADDicom1->SetCurrentElement(THandle(TreeView1->Selected->Data)); nRet= LEADDicom1->DeleteElement( ); LEADDicom1->EnableMethodErrors= true; if(nRet != SUCCESS) ShowMessage("Error Deleting Element!"); else { /* remove item from TreeView */ NodeX= TreeView1->Selected; if(NodeX->AbsoluteIndex != 0) TreeView1->Selected= NodeX->GetPrev( ); else if(TreeView1->Items->Count > 1) TreeView1->Selected= NodeX->GetNext( ); TreeView1->Items->Delete(NodeX); Edit_Tag->SetFocus( ); /* added here to cause correct setting in following line */ TreeView1->SetFocus( ); DisplayElement(TreeView1->Selected->Text); } } void __fastcall TMainFrm::DataSet_InsertModuleClick(TObject *Sender) { Application->CreateForm(__classid(TInsertModule_Frm), &InsertModule_Frm); LEADDicom1->EnableMethodErrors= false; InsertModule_Frm->ShowModal( ); LEADDicom1->EnableMethodErrors= true; InsertModule_Frm->Free ( ); } int __fastcall TMainFrm::GetTreeModuleCount(void) { int n, nRetVal= 0; for(n=0; nItems->Count; ++n) if(TreeView1->Items->Item[n]->Level== 0) // root level ++nRetVal; return nRetVal; } void __fastcall TMainFrm::DataSet_DeleteModuleClick(TObject *Sender) { int nRet; TTreeNode *NodeX; LEADDicom1->EnableMethodErrors= false; NodeX= TreeView1->Selected; nRet= LEADDicom1->DeleteModule(Cardinal(NodeX->Data)); LEADDicom1->EnableMethodErrors= true; if(nRet != SUCCESS) ShowMessage("Error Deleting Module!"); else { /* remove module from TreeView */ if(NodeX->Index != 0) TreeView1->Selected= NodeX->getPrevSibling( ); else if(GetTreeModuleCount( ) > 1) TreeView1->Selected= NodeX->getNextSibling( ); TreeView1->Items->Delete(NodeX); Edit_Tag->SetFocus( ); /* added here to cause correct setting in following line */ TreeView1->SetFocus( ); } } void __fastcall TMainFrm::DataSet_DataSetInfoClick(TObject *Sender) { AnsiString sClass; AnsiString sFlags; LEADDicom1->EnableMethodErrors= true; try { LEADDicom1->GetInfoDS( ); LEADDicom1->FindClassIOD(LEADDicom1->InfoClass); sClass= LEADDicom1->CurrentIOD->Name; sFlags= "$" + IntToHex(LEADDicom1->InfoFlags, 0); ShowMessage("Class: " + sClass + "\nFlags: " + sFlags); } catch(ELEADDicomError *e) { ShowMessage("Error getting Data Set Info"); } } void __fastcall TMainFrm::Help_AboutClick(TObject *Sender) { Application->CreateForm(__classid(TAboutFrm), &AboutFrm); AboutFrm->ShowModal( ); AboutFrm->Free ( ); } void __fastcall TMainFrm::Help_LEADontheWebClick(TObject *Sender) { Screen->Cursor= crHourGlass; ShellExecute(Handle, "open", "http://www.leadtools.com", 0,0, SW_SHOWNORMAL); Screen->Cursor= crDefault; } void __fastcall TMainFrm::TreeView1DblClick(TObject *Sender) { if(TreeView1->Selected) if(!IsModuleNode(TreeView1->Selected)) DataSet_EditValue->Click( ); }