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

📄 main.~pas

📁 在delphi7 下开发医学图象浏览器,对医学图象进行编辑,分析的
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
  lExt := ExtractFileExt(lFilename);
  if length(lExt) > 0 then

    for lI := 1 to length(lExt) do
      lExt[lI] := upcase(lExt[lI]);
  if (lExt = '.BMP') or (lExt = '.JPG') then
  begin
    PGOpenDialog.FileName := '';
    PGOpenDialog.InitialDir := extractfiledir(lFilename);
    CreateMDIChild(lFilename, false, false, true, false);
    exit;
  end;
  OpenDialog.InitialDir := extractfiledir(lFilename);
  if (lExt = '.IMG') or (lExt = '.HDR') then
  begin
    lHdrName := ExtractFilePath(lFilename) + ParseFileName(ExtractFileName(lFilename)) + '.hdr';
    if fileexists(lHdrName) then
    begin
      AssignFile(lf, lHdrName);
      Reset(lf);
      lLen := filesize(lf);
      closefile(lf);
      if lLen = (348) then
      begin
        CreateMDIChild(lHdrName, true, false, false, false);
        exit;
      end;
    end;
  end; //try analyze format
  CreateMDIChild(lFilename, false, false, false, false);
end;

(*procedure Snoop;
//FileSnooper => compares bytes of two files for differences
label 767;
var I,lLen,lTag : Integer;
lF,lF2: file of byte;
lBuff,lBuff2: bytep;
lStart,lEnd,lPos,lVal,lSz: integer;
begin
     lStart := 1;
     lEnd := 3055;
     lSz :=  lEnd-lStart+1;
     AssignFile(lF,'C:\efilm\heart16ori.dcm');
     reset(lF);
     GetMem( lBuff,lSz );
     Seek(lF,lStart);
     BlockRead(lF, lBuff^, lSz);
     CloseFile(lF);
     AssignFile(lF2,'C:\efilm\heart16.dcm');
     reset(lF2);
     GetMem( lBuff2, lSz);
     Seek(lF2,lStart);
     BlockRead(lF2, lBuff2^, lSz);
     CloseFile(lF2);
     lPos := 0;
     lVal := 0;
     while lPos < lEnd do begin
       inc(lPos);
         if (lBuff[lPos] <> lBuff2[lPos]) then begin
            showmessage(inttostr(lPos+lStart-1)+'abba:'+inttostr(lBuff[lPos]) +'/'+inttostr(lBuff2[lPos]));
            inc(lVal);
            if lVal > 10 then
               goto 767;
            //lPos := lEnd;
         end;
     end;
767:
     FreeMem( lBuff2);
     FreeMem( lBuff);
     showmessage('filesnooper is done');
end; Snoop utility(*  *)

procedure TMainForm.FormCreate(Sender: TObject);
var
  lSearchRec: TSearchRec;
  lDICOMdata: dicomdata;
  lHdrOK, lIMgOK: boolean;
  lDynStr, lFile: string;
begin
  {convert an image to dicom at startup->
  lFile := 'c:\efilm\rgb.dcm' ;
  if fileexists(lFile) then deletefile(lFile);
  lFile := 'c:\efilm\rgb.dc' ;
   read_dicom_data(false,false,true,false,true,true,true, lDICOMdata, lHdrOK, lImgOK, lDynStr,lFile );
   ConvertImg(lFile, lDICOMdata,1);}
  DecimalSeparator := '.';
  SchemeDrop.Items.Clear;
  SchemeDrop.Items.Add('White & Black');
  SchemeDrop.Items.Add('Black & White');
  SchemeDrop.Items.Add('Hot Metal');
  SchemeDrop.ItemIndex := 1;
  Screen.OnActiveFormChange := UpdateMenuItems;
  DragAcceptFiles(Handle, True);
  GetRegistryData;
  if BestFitItem.checked then
  begin
    ZoomSLider.enabled := false;
    Pct100btn.enabled := false;
  end
  else
  begin
    ZoomSlider.enabled := true;
    Pct100btn.enabled := true;
  end;
  if FindFirst(extractfilepath(paramstr(0)) + '\*.lut', faAnyFile, lSearchRec) <> 0 then
  begin
    FindClose(lSearchRec);
    exit;
  end;
  SchemeDrop.Items.Add(ParseFileName(ExtractFileName(lSearchRec.Name)));
  while (FindNext(lSearchRec) = 0) do
  begin
    SchemeDrop.Items.Add(ParseFileName(ExtractFileName(lSearchRec.Name)));
  end;
  FindClose(lSearchRec);
  UpdateMenuItems(nil);



  //处理命令行参数
  //
  //2004-10-12
  if ParamCount>2 then
  begin
    ViewDICOM(ParamStr(1));
  end;

end;

procedure TMainForm.CreateMDIChild(Name: string; lAnz, lECAT, l2dImage, lRaw: boolean);
var
  Child: TMDIChild;
begin
  LockWindowUpdate(MainForm.Handle);
  Child := TMDIChild.Create(Application);

  Child.Caption := Name;
  if lRaw then
  begin
    clear_dicom_data(Child.gDicomData);
    Child.gDicomData.XYZdim[1] := RawForm.WidEdit.value;
    Child.gDicomData.XYZdim[2] := RawForm.HtEdit.value;
    Child.gDicomData.XYZdim[3] := RawForm.SliceEdit.value;
    Child.gDicomData.XYZdim[4] := 1;
    Child.gDicomData.ImageStart := RawForm.OffsetEdit.value;
    if RawForm.LittleEndCheck.checked then
      Child.gDicomData.little_endian := 1
    else
      Child.gDicomData.little_endian := 0;
    Child.gDicomData.Allocbits_per_pixel := RawForm.BitsEdit.value;
    if Child.gDicomData.Allocbits_per_pixel = 24 then
    begin
      Child.gDicomData.SamplesPerPixel := 3;
      Child.gDicomData.Allocbits_per_pixel := 8;
      if RawForm.PlanarRGBCheck.Checked then
        Child.gDicomData.PlanarConfig := 1
      else
        Child.gDicomData.PlanarConfig := 0;
    end;
    Child.gDicomData.Storedbits_per_pixel := Child.gDicomData.Allocbits_per_pixel;
  end;
  if not Child.LoadData(Name, lAnz, lECAT, l2dImage, lRaw) then
  begin
    Child.free;
    exit;
  end;
  TMDIChild(MainForm.ActiveMDIChild).LoadFileList;
  LockWindowUpdate(0);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  Screen.OnActiveFormChange := nil;

end;

procedure TMainForm.UpdateMenuItems(Sender: TObject);
begin
  WindowCascadeItem.Enabled := MDIChildCount > 0;
  WindowTileItem.Enabled := MDIChildCount > 0;
  WindowArrangeItem.Enabled := MDIChildCount > 0;
  WindowMinimizeItem.Enabled := MDIChildCount > 0;
  Print1.enabled := MDIChildCount > 0;
  Exportaspicture1.enabled := MDIChildCount > 0;
  Close1.enabled := MDIChildCount > 0;
  ColUpdate;
  //CycleWindowItem.Enabled := MDIChildCount > 1;
end;

procedure TMainForm.FileOpenItemClick(Sender: TObject);
var
  I, lLen, lTag: Integer;
  lF: file of byte;
begin
  lTag := (Sender as TMEnuItem).Tag;
  if lTag = 1 then
    OpenDialog.Filter := 'Analyze Header (*.hdr)|*.hdr'
      {else
        OpenDialog.Filter := 'Medical Image|*.*'};
  if OpenDialog.Execute then
  begin
    for I := 0 to OpenDialog.Files.Count - 1 do
    begin
      if AddMRU(OpenDialog.Files[i]) then
      begin
        OpenDialog.InitialDir := extractfiledir(OpenDialog.Files[i]);
        Filemode := 0;
        AssignFile(lf, OpenDialog.Files[i]);
        Reset(lf);
        lLen := filesize(lf);
        closefile(lf);
        Filemode := 2;
        if lTag = 2 then //ecat
          CreateMDIChild(OpenDialog.Files[i], false, true, false, false)
        else if (lLen = 348) and (ExtractFileExt(OpenDialog.Filename) = '.hdr') then
          CreateMDIChild(OpenDialog.Files[i], true, false, false, false)
        else
          CreateMDIChild(OpenDialog.Files[i], false, false, false, false);
      end; //fileexists
    end;
  end;
  //OpenDialog.Filter := 'Medical Image|*.*';
  OpenDialog.Filter := 'Medical Image|*.*';
  ConLabelClick;
end;

procedure TMainForm.FileExitItemClick(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.WindowCascadeItemClick(Sender: TObject);
begin
  Cascade;
  //if (not BestFitItem.checked) or (MainForm.MDIChildCount = 0) then exit;
  {for I :=  (MDIChildCount - 1) downto 0 do
        MDIChildren[I].}
        //AutoMaximise;
end;

procedure TMainForm.WindowTileItemClick(Sender: TObject);
begin
  Tile;
end;

procedure TMainForm.WindowArrangeItemClick(Sender: TObject);
begin
  ArrangeIcons;
end;

procedure TMainForm.WindowMinimizeItemClick(Sender: TObject);
var
  I: Integer;
begin
  if MDIChildCount = 0 then
    exit;
  for I := MDIChildCount - 1 downto 0 do
    MDIChildren[I].WindowState := wsMinimized;
end;

procedure TMainForm.Opengraphic1Click(Sender: TObject);
var
  I: integer;
begin
  //PGOpenDialog1.filename := '';
  //OpenDialog.Filter := 'Images (*.bmp;*.jpg)|*.bmp;*.jpg|Bitmaps (*.bmp)|*.bmp|JPEGs (*.jpg]|*.jpg';
  //PGOpenDialog.Filter := GraphicFilter(TGraphic);
  if PGOpenDialog.Execute then
  begin
    for I := 0 to PGOpenDialog.Files.Count - 1 do
    begin
      if AddMRU(PGOpenDialog.Files[i]) then
      begin
        PGOpenDialog.InitialDir := extractfilepath(PGOpenDialog.Files[i]);
        PGSaveDialog.InitialDir := PGOpenDialog.InitialDir;
        //PGSaveDialog.FileName := extractfilename(PGOpenDialog.FileName);
        //PGOpenDialog.FileName := extractfilename(PGOpenDialog.FileName);
        CreateMDIChild(PGOpenDialog.Files[i], false, false, true, false);
      end;
    end; //for I..nfiles
  end; //if execute
  //OpenDialog.Filter :='Medical Image|*.*';
end;

procedure TMainForm.SliceSliderChange(Sender: TObject);
begin
  if MDIChildCount = 0 then
    exit;
  //LockWindowUpdate(MainForm.Handle);
  TMDIChild(MainForm.ActiveMDIChild).DisplayImage(false, false, SliceSlider.position,
    TMDIChild(MainForm.ActiveMDIChild).gWinWid,
    TMDIChild(MainForm.ActiveMDIChild).gWinCen {WinWidEdit.value,WincenEdit.value});
  conlabelclick;
  //LockWindowUpdate(0);

end;

procedure TMainForm.ColUpdate;
//var lVox: integer;
begin
  if MainForm.MDIChildCount = 0 then
  begin
    ApplyCon.enabled := false;
    ApplyBright.enabled := false;
    FileContrast.enabled := false;
    AutoBal.enabled := false;
    SchemeDrop.enabled := false;
    WinWidEdit.enabled := false;
    WinCenEdit.enabled := false;
    VideoBtn.Enabled := false;
    SliceSlider.Enabled := false;
    exit;
  end;
  (*StatusBar.Panels[1].text := inttostr(MainForm.MDIChildCount)+'x'+inttostr(random(255));
  if MainForm.MDIChildCount = 0 then begin
       ApplyCon.visible := false;
       ApplyBright.visible := false;
       FileContrast.visible := false;
       AutoBal.visible := false;
       SchemeDrop.visible:= false;
       WinWidEdit.visible := false;
       WinCenEdit.visible := false;
       exit;
  end; *)
       //MainForm.ZoomBox.ItemIndex := TMDIChild(MainForm.ActiveMDIChild).gZoom;
  if TMDIChild(MainForm.ActiveMDIChild).Memo1.visible then
    HdrBtn.Down := true
  else
    HdrBtn.Down := false;
  //mainform.Caption := inttostr(TMDIChild(MainForm.ActiveMDIChild).gCustomPalette);
  if (not TMDIChild(MainForm.ActiveMDIChild).FDICOM) then
  begin
    // or  (TMDIChild(MainForm.ActiveMDIChild).gDICOMdata.SamplesPerPixel > 1) or (TMDIChild(MainForm.ActiveMDIChild).gCustomPalette > 0) {or ((lVox > 7) and (lVox < 17)) }then begin
    ApplyCon.enabled := false;
    ApplyBright.enabled := false;
    FileContrast.enabled := false;
    AutoBal.enabled := false;
    //mainform.caption := 'NOT_DICOM'+inttostr(random(32));
    SchemeDrop.enabled := false;
    WinWidEdit.enabled := false;
    WinCenEdit.enabled := false;
  end
  else
  begin
    //mainform.caption := 'DICOM'+inttostr(random(32));
    MainForm.SchemeDrop.ItemIndex := TMDIChild(MainForm.ActiveMDIChild).gScheme;
    WinCenEdit.value := TMDIChild(MainForm.ActiveMDIChild).gWinCen;
    WinWidEdit.value := TMDIChild(MainForm.ActiveMDIChild).gWinWid;
    FileCOntrast.enabled := true;
    if (TMDIChild(MainForm.ActiveMDIChild).gDICOMdata.Allocbits_per_pixel < 9) then
    begin
      //fargo FileCOntrast.enabled := false;
      ApplyCon.enabled := false;
      ApplyBright.enabled := false;
      WinWidEdit.enabled := false;
      WinCenEdit.enabled := false;
    end
    else
    begin
      if TMDIChild(MainForm.ActiveMDIChild).gDicomData.WindowWidth <> 0 then
        FileCOntrast.enabled := true
      else
        FileCOntrast.enabled := false;
      ApplyCon.enabled := true;
      ApplyBright.enabled := true;
      WinWidEdit.enabled := true;
      WinCenEdit.enabled := true;
    end;
    AutoBal.enabled := true;
    SchemeDrop.enabled := true;
  end;
  ConLabelClick;
  //if TMDIChild(MainForm.ActiveMDIChild).gWinWid = 0 then   ConLabel.caption := '';
  if (not TMDIChild(MainForm.ActiveMDIChild).FDICOM) or (TMDIChild(MainForm.ActiveMDIChild).gDicomdata.XYZdim[3] < 2)
    then
  begin

⌨️ 快捷键说明

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