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

📄 viewer.java

📁 客户端浏览医学图像的jsp源代码。可用于临床工作站。
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    if(height_space < width_space) {
      if(row == 1) column = column -1;
        else row = row -1;
      }else {
        if(column == 1) row = row -1;
        else column = column -1;
      }
    if(row < 1) row =1;
    if(column < 1) column =1;
    getCanvasSize();

    if(row * column == 1) less_B.setEnabled(false);
    showTile();
    // ScrollPane偺攚宨傪嵞昤夋偟偰傕傜偆
    scrollPane1.setVisible(false);
    scrollPane1.setBackground(Color.black);
    scrollPane1.setVisible(true);
  }

  // 拲栚夋憸偺曄峏
  public void changeActive(int i) {
    //僇儗儞僩偺DicomData ImageData傪擖傟懼偊傞
    int j = index[i];
    if(j == -1) return; // 夋憸偑柍偄応崌偼側偵傕偟側偄丅
    dicomData = null;
    imageData = null;
    dicomData = dicomData_tmp[j];
    imageData = imageData_tmp[j];
    infoPanel.setDicomData(dicomData);

    // 奺庬昞帵偺曄峏
    imageNo = i;
    imageNo_F.setText(String.valueOf(i +1));
    imageNo_S.setValue(i +1);
    if(imageData.color()) setRGBEnabled(false);
    else setRGBEnabled(true);
  }

  // Tile昞帵偺儊僜僢僪
  private void showTile() {
    int max = row * column;
    int len = dicomData_tmp.length;
    imageTiledCanvas.setTileType(row, column);
    int tmpNo = 0;

    // 偡偱偵撉傒崬傫偱偄傞夋憸偺僗僞乕僩斣崋傪摼傞
    if(imageNo - (max >> 1) <= 0) tile_start =0;
    else tile_start = imageNo - (max >> 1);
    if(tile_start + max > start + len) tile_start = start + len - max;
    if(tile_start < start) tile_start = start;
    imageTiledCanvas.setStartNo(tile_start);

    ImageData tmpImageData;

    for(int i = tile_start; i < tile_start + max; i++) {
      if (tmpNo >= len) break;

      // 夋憸偑弨旛偱偒傞傑偱懸偮
      tmpImageData = takeImageData(i);

      // 僼儔僌偑偨偭偰偄傞応崌偼偦傟偧傟夋憸張棟
      if(inv_flag) tmpImageData.inverse();
      // if(color_flag) tmpImageData.changeColor();
      if(rotateL_flag) tmpImageData.rotateL();
      if(rotateR_flag) tmpImageData.rotateR();
      if(flipLR_flag) tmpImageData.flipLR();
      if(flipUD_flag) tmpImageData.flipUD();
      if(reset_flag) tmpImageData.setDefaultPixel();

      // 慖戰夋憸偺僙僢僩
      if(i == imageNo) imageTiledCanvas.setActiveNo(tmpNo);

      // WW/WL偺僨僼僅儖僩偐傜偺嵎傪巊偭偰僀儊乕僕傪嶌惉偡傞
      imageTiledCanvas.setImage(tmpImageData.getImageWWWL2Current(ww[i], wl[i]), tmpNo);
      // imageTiledCanvas偵傕偦偺偲偒偺WW/WL偲専嵏忣曬傪捠抦偡傞
      imageTiledCanvas.setWW_WL(tmpImageData.getWW(), tmpImageData.getWL(), tmpNo);
      imageTiledCanvas.setStudyInfo(dicomData_tmp[index[i]], tmpNo);
      tmpNo++;
    }
    for(int i = tmpNo; i < max; i++) {
      imageTiledCanvas.setImage(null, i);
      imageTiledCanvas.setStudyInfo(null, tmpNo);
    }
     //夋憸嵞撉傒崬傒
//    imageTiledCanvas.setRepaint();

    // 僨乕僞偺弨旛偑偱偒傞傑偱懸偮
    takeData(imageNo);

    // 夋憸偑RGB僇儔乕偩偭偨応崌丄僐儞億乕僱儞僩傪False偵偡傞
    if(imageData.color()) setRGBEnabled(false);
    else setRGBEnabled(true);

    //夋憸嵞撉傒崬傒
    imageTiledCanvas.setRepaint();
  }

  // DICOM RGB 偺帪偵晄梫偵側傞僐儞億乕僱儞僩偨偪丅
  private void setRGBEnabled(boolean flag) {
    default_B.setEnabled(flag);
    // color_B.setEnabled(flag);
    inv_B.setEnabled(flag);
    wwwlSingle_C.setEnabled(flag);
    if(NUM == 1) wwwlALL_C.setEnabled(false);
    else wwwlALL_C.setEnabled(flag);
    if(!flag && (wwwlSingle_C.getState() || wwwlALL_C.getState())) {
      move_C.setState(true);
      imageTiledCanvas.setMoveState(true);
    }
  }

  // 偙偺傾僾儗僢僩偑僉乕儃乕僪僀儀儞僩傪庴偗傟傞傛偆偵愝掕偡傞
  public boolean isFocusTraversable() { return true; }

  //傾僾儗僢僩忣曬偺庢摼
  public String getAppletInfo() {
    return "Applet Information";
  }

  // static initializer for setting look & feel
  static {
    try {
      //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
    }
    catch (Exception e) {}
  }

  // 僠僃僢僋儃僢僋僗梡偺僀儀儞僩儕僗僫乕
  class MyCheckBoxListener implements ItemListener {
    public void itemStateChanged(ItemEvent e) {

      // WW/WL娭學偺僠僃僢僋儃僢僋僗偑曄壔偟偨応崌偼丄synchro_flag傕曄壔偝偣傞
      if(wwwlSingle_C.getState()) synchro_flag = false;
      else if(wwwlALL_C.getState()) synchro_flag = true;

      // 尰嵼偺僠僃僢僋儃僢僋僗偺忬懺傪imageTiledCanvas偵傕抦傜偣傞
      imageTiledCanvas.setMoveState(move_C.getState());
      imageTiledCanvas.setZoomState(zoom_C.getState());
      imageTiledCanvas.setLoupeState(loupe_C.getState());
    }
  }

  // 慖戰偝傟偰偄傞僠僃僢僋儃僢僋僗傪曄峏偡傞
  private void changeSelectCheckBox(Checkbox checkbox) {

    // 堷悢偺僠僃僢僋儃僢僋僗傪慖戰忬懺偵偡傞
    checkboxGroup1.setSelectedCheckbox(checkbox);

    // WW/WL娭學偺僠僃僢僋儃僢僋僗偑曄壔偟偨応崌偼丄synchro_flag傕曄壔偝偣傞
    if(checkbox == wwwlSingle_C) synchro_flag = false;
    else if(checkbox == wwwlALL_C) synchro_flag = true;
    
    // 尰嵼偺僠僃僢僋儃僢僋僗偺忬懺傪imageTiledCanvas偵傕抦傜偣傞
    imageTiledCanvas.setMoveState(move_C.getState());
    imageTiledCanvas.setZoomState(zoom_C.getState());
    imageTiledCanvas.setLoupeState(loupe_C.getState());
  }

  // 僉乕儃乕僪偵傛傝丄Zoom 傪曄壔偝偣傞丅
  private void key_changeZoom(double value) {
    double tmpZoom;

    // Canvas偺僒僀僘偵墳偠偰夋憸偑慡懱偑昞帵偱偒傞傛偆偵Zoom偺抣傪挷惍偡傞
    tmpZoom = 100.0 / canvasSize;
    // 0.25 <= zoom <= 2.0 偺斖埻撪偵擖傞傛偆偵偡傞
    if(tmpZoom > 2.0) tmpZoom = 2.0;
    else if(tmpZoom < 0.25) tmpZoom = 0.25;

    // Zoom偺庢摼
    zoom = tmpZoom * value;
    // 斖埻奜偺専弌
    if(zoom < 0.25) zoom = 0.25;
    else if(zoom > 2.0) zoom = 2.0;

    // 僀儊乕僕偵斀塮偝偣傞
    imageTiledCanvas.changeZoom(zoom);
    imageTiledCanvas.setRepaint();
  }

  // 僉乕儃乕僪偵傛傝丄WL/WW 傪曄壔偝偣傞丅
  private void key_changeWwWl(double key_ww, double key_wl) {
    int tmp_ww, tmp_wl, tmp_wwwl;

    // 僔儞僋儘偟偰偄側偄帪偼1枃偺夋憸偩偗曄壔偝偣傞
    if(!synchro_flag){
      // PixelMax - PixelMin傪媮傔傞
      tmp_wwwl = imageData.getPixelMax() - imageData.getPixelMin();

      // WW 傪庢摼偡傞
      tmp_ww = imageData.getDefaultWW() + ww[imageNo] + (int)(tmp_wwwl * key_ww);

      // 斖埻奜偺専弌
      if(tmp_ww < 0) tmp_ww = 0;
      else if(tmp_ww > tmp_wwwl) tmp_ww = tmp_wwwl;

      // WL 傪庢摼偡傞
      tmp_wl = imageData.getDefaultWL() + wl[imageNo] + (int)(tmp_ww * key_wl);
      // 斖埻奜偺専弌
      if(tmp_wl < imageData.getPixelMin()) tmp_wl = imageData.getPixelMin();
      else if(tmp_wl > imageData.getPixelMax()) tmp_wl = imageData.getPixelMax();

      // WW/WL傪僙僢僩偟丄夋憸傪昞帵
      imageTiledCanvas.setWW_WL(tmp_ww, tmp_wl, imageNo - tile_start);
      imageTiledCanvas.changeImage(imageData.wwANDwl(tmp_ww, tmp_wl), imageNo - tile_start);

    // 慡偰偺夋憸傪曄壔偝偣傞応崌丅
    }else {
      int max;
      int tmpNo =0;
      ImageData tmpImageData;
      max = row * column;

      for(int i = tile_start; i < tile_start + max; i++) {
        if (tmpNo >= dicomData_tmp.length) break;

        // ImageData傪庢摼偡傞
        tmpImageData = takeImageData(i);

        // PixelMax - PixelMin傪媮傔傞
        tmp_wwwl = tmpImageData.getPixelMax() - tmpImageData.getPixelMin();

        // WW 傪庢摼偡傞
        tmp_ww = tmpImageData.getDefaultWW() + ww[i] + (int)(tmp_wwwl * key_ww);
        // 斖埻奜偺専弌
        if(tmp_ww < 0) tmp_ww = 0;
        else if(tmp_ww > tmp_wwwl) tmp_ww = tmp_wwwl;

        // WL 傪庢摼偡傞
        tmp_wl = tmpImageData.getDefaultWL() + wl[i] + (int)(tmp_ww * key_wl);
        // 斖埻奜偺専弌
        if(tmp_wl < tmpImageData.getPixelMin()) tmp_wl = tmpImageData.getPixelMin();
        else if(tmp_wl > tmpImageData.getPixelMax()) tmp_wl = tmpImageData.getPixelMax();

        // WW/WL傪僙僢僩偟丄夋憸傪昞帵
        imageTiledCanvas.setWW_WL(tmp_ww, tmp_wl, tmpNo);
        imageTiledCanvas.setImage(tmpImageData.wwANDwl(tmp_ww, tmp_wl), tmpNo);
        tmpNo++;
      }
      for(int i = tmpNo; i < max; i++) {
        imageTiledCanvas.setImage(null, i);
      }
      //夋憸嵞撉傒崬傒
      imageTiledCanvas.setRepaint();
    }
  }

  // 僉乕儃乕僪僀儀儞僩梡偺儕僗僫乕僋儔僗
  class MyKeyListener implements KeyListener {
    boolean isWW = false; // WL偺憖嶌傪峴偆偲偒false, WW偺憖嶌傪峴偆偲偒true;

    // 僉乕傪僞僀僾偟偨偲偒
    public void keyTyped(KeyEvent e) {
      // char keyChar = e.getKeyChar();
        // 僨僶僢僋
        // System.out.println(keyChar);
    }

    // 僉乕傪墴偟偨偲偒
    public void keyPressed(KeyEvent e) {
      int keyCode = e.getKeyCode();

      // 僐儞僩儘乕儖亄壗偐偺僉乕偑墴偝傟偨偲偒偺張棟
      if(e.isControlDown()) {
        // Ctrl+W
        if(keyCode == KeyEvent.VK_W) {
          // WL
          isWW = false;
          if(e.isShiftDown()) {
            // + Shift
            // WL/WW Single
            changeSelectCheckBox(wwwlSingle_C);
          }else {
            // WL/WW ALL
            changeSelectCheckBox(wwwlALL_C);
          }
        // Ctrl+Q
        }else if(keyCode == KeyEvent.VK_Q) {
          // WW
          isWW = true;
          if(e.isShiftDown()) {
            // + Shift
            // WL/WW Single
            changeSelectCheckBox(wwwlSingle_C);
          }else {
            // WL/WW ALL
            changeSelectCheckBox(wwwlALL_C);
          }
        // Ctrl+O
        }else if(keyCode == KeyEvent.VK_O) {
          // Move mode
          changeSelectCheckBox(move_C);
        // Ctrl+Z
        }else if(keyCode == KeyEvent.VK_Z) {
          // Zooming mode
          changeSelectCheckBox(zoom_C);
        // Ctrl+U
        }else if(keyCode == KeyEvent.VK_U) {
          // Loupe mode
          changeSelectCheckBox(loupe_C);
        // Ctrl+D
        }else if(keyCode == KeyEvent.VK_D) {
          // Default WL/WW
          defaultWwWl();
        // Ctrl+I
        }else if(keyCode == KeyEvent.VK_I) {
          if(e.isShiftDown()) {
            // + Shift
            // 傾僲僥乕僔儑儞
            studyInfo_C.setState(!studyInfo_C.getState());
            imageTiledCanvas.setStudyInfo_flag(studyInfo_C.getState());
          }else {
            if(notCine) {
              // 夋憸敀崟斀揮
              inv_flag = true;
              showTile();
              inv_flag = false;
            }else {
              // 抶偄姫偒栠偟
              cineNext1_B.setFont(plain);
              cineNext2_B.setFont(plain);
              cinePrev1_B.setFont(bold);
              cinePrev2_B.setFont(plain);
              animationThread.changeInterval(1000);
              animationThread.changeNext(false);
            }
          }
        // Ctrl+T
        }else if(keyCode == KeyEvent.VK_T) {
          if(e.isShiftDown()) {
            // + Shift
            // 僞僌昞帵
            if(!tagInfoFrame.isShowing()) {
              tag_B.setLabel("Hide  Tag Info");
              tagInfoFrame.setImageNo(imageNo);
              tagInfoFrame.setVisible(true);
            }else {
              tag_B.setLabel("Show  Tag Info");
              tagInfoFrame.setVisible(false);
            }
          }else {
            if(notCine) {
              // Rest Zoom/Move
              getCanvasSize();
            }else {
              // 抶偄嵞惗
              cineNext1_B.setFont(bold);
              cineNext2_B.setFont(plain);
              cinePrev1_B.setFont(plain);
              cinePrev2_B.setFont(plain);

⌨️ 快捷键说明

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