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

📄 main.pas

📁 用Delphi做的读取医学图片的控件及代码
💻 PAS
📖 第 1 页 / 共 4 页
字号:
     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);
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.HelpAboutItemClick(Sender: TObject);
begin
  AboutBox.ShowModal;
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
     SliceSlider.enabled := false;
     VideoBtn.enabled := false;
     //VideoBtn.down := false;

⌨️ 快捷键说明

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