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

📄 viewer.java

📁 客户端浏览医学图像的jsp源代码。可用于临床工作站。
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    this.notifyAll();
    tmpdicomData = null;
    tmpimageData = null;
  }

  // 僗儗僢僪偐傜偺僨乕僞傪撉傔傞傑偱懸偮
  public synchronized void takeData(int i) {
    while(index[i] < 0)
      try{ this.wait(); }catch(InterruptedException e) {}
    int j = index[i];
    dicomData = null;
    imageData = null;
    dicomData = dicomData_tmp[j];
    imageData = imageData_tmp[j];
    infoPanel.setDicomData(dicomData);
    this.notifyAll();
  }

  // 僗儗僢僪偐傜偺僨乕僞傪撉傔傞傑偱懸偮
  public synchronized ImageData takeImageData(int i) {
    while(index[i] < 0)
      try{ this.wait(); }catch(InterruptedException e) {}
    int j = index[i];
    this.notifyAll();
    return imageData_tmp[j];
  }

  // 僗儗僢僪傪巭傔偰傕椙偄偐偳偆偐妋擣偡傞
  public synchronized boolean confirmStopRequest() {
    return requestStop;
  }

  // 巭傔偰傛偄偐偺僼儔僌傪曄峏偡傞
  public synchronized void changeStopRequest(boolean flag) {
    requestStop = flag;
    this.notifyAll();
  }

  // 僗儗僢僪偑掆巭偟偨傜掆巭偟怴偟偄僗儗僢僪傪奐巒偡傞丅
  public synchronized void startLoaderThread(int start, int len, int oldstart) {
    // 傕偟僗儗僢僪偑掆巭偟偰偄側偗傟偽丄掆巭梫媮傪偩偡丅
    if(loader.isAlive()) changeStopRequest(true);
    // 掆巭梫媮偑偱偰偄傞娫傑偮
    while(requestStop) {
      try{
        //this.wait();
        // 僨僢僪儘僢僋傪旔偗傞偨傔偵200ms偱偄偭偨傫wait傪傗傔傞
        this.wait(200);
        // 僗儗僢僪偑掆巭嵪傒側傜掆巭梫媮傪夝彍
        if(!loader.isAlive()) changeStopRequest(false);
      }catch(InterruptedException e) {}
    }
    loader = null;
    // 怴偟偄僗儗僢僪偺奐巒
    loader = new LoaderThread(start, len, oldstart, this);
    loader.start();
    this.notifyAll();
  }

  //TextField偺擖椡抣傪幚悢偲偟偰摼傞
  private double getFieldValue(TextField textF) {
    double tmp;
    try {
      // 幚悢偲偟偰惓偟偄抣側傜丄偦偺抣傪f偵戙擖
      tmp = Double.valueOf(textF.getText()).doubleValue();
    } catch(java.lang.NumberFormatException e) {
      // 悢抣傪庢摼偱偒側偄応崌偼丄0.0傪戙擖
      tmp = 0.0;
    }
    return tmp;
  }

  // ImageTiledCanvas撪偺僪儔僢僌偵傛傝WW/WL傪曄峏偡傞丅
  public void drag_changeZoom(int draggedZoom) {
    // Zoom偺庢摼
    zoom -= 0.005 * (double)draggedZoom;
    // 斖埻奜偺専弌
    if(zoom < 0.25) zoom = 0.25;
    else if(zoom > 2.0) zoom = 2.0;
    // 僀儊乕僕偵斀塮偝偣傞
    imageTiledCanvas.changeZoom(zoom);
  }

  // Canvas偺僒僀僘傪曄峏偡傞
  private void changeCanvasSize() {
    double tmpZoom;

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

    // 媮傔偨canvasSize偲zoom傪imageTiledCanvas偵捠抦偡傞
    imageTiledCanvas.changeCanvasSize(canvasSize * 0.01);
    imageTiledCanvas.changeZoom(zoom);
    imageTiledCanvas.setRepaint();
  }

  // 嵟揔側CanvasSize傪媮傔傞
  private void getCanvasSize() {
    int w_size, h_size, tmpSize;
    Dimension paneSize;
    paneSize = scrollPane1.getSize();

    // ScrollPane偺戝偒偝傪應偭偰丄偦傟偵偪傚偆偳擖傞戝偒偝傪媮傔傞
    w_size = (int)((double)paneSize.width / (double)(width * column) * 100d);
    h_size = (int)((double)paneSize.height / (double)(height * row) * 100d);
    // 廲墶偱彫偝偄傎偆偵崌傢偣傞乮ScrollPane偐傜偼傒弌偝側偄傛偆偵偡傞偨傔乯
    if(h_size < w_size) tmpSize = h_size;
    else tmpSize = w_size;
    if(tmpSize > 100) tmpSize = 100;
    canvasSize = tmpSize;

    // 媮傔偨戝偒偝偱Canvas偺戝偒偝傪曄峏偡傞
    changeCanvasSize();
  }

  // ImageCanvas ImageTiledCanvas撪偺僪儔僢僌偵傛傝WW/WL傪曄峏偡傞
  // 僪儔僢僌拞
  public void drag_changeWwWl(int draggedWW, int draggedWL) {
    int tmp_ww, tmp_wl;

    // 僪儔僢僌拞偼忢偵1枃偺夋憸偩偗曄壔偝偣傞
    // WW 傪庢摼偡傞
    tmp_ww = imageData.getWW() + draggedWW;
    // 斖埻奜偺専弌
    if(tmp_ww < 0) tmp_ww = 0;
    else if(tmp_ww > imageData.getPixelMax() - imageData.getPixelMin())
      tmp_ww = imageData.getPixelMax() - imageData.getPixelMin();

    // WL 傪庢摼偡傞
    tmp_wl = imageData.getWL() + draggedWL;
    // 斖埻奜偺専弌
    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);
  }
  // 僪儔僢僌廔椆帪
  public void dragDone_changeWwWl(int draggedWW, int draggedAllWW, int draggedWL, int draggedAllWL) {
    int tmp_ww, tmp_wl;

    // 僔儞僋儘偟偰偄側偄帪偼1枃偺夋憸偩偗曄壔偝偣傞
    if(!synchro_flag){
      this.drag_changeWwWl(draggedWW,draggedWL);

      // WW/WL偺曄壔検傪婰榐偡傞
      ww[imageNo] += draggedAllWW;
      wl[imageNo] += draggedAllWL;

    // 慡偰偺夋憸傪曄壔偝偣傞応崌丅
    }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);

        // 僪儔僢僌拞偵曄壔偝偣偰偄偨夋憸(拲栚夋憸)偺応崌
        if(i == imageNo) {
          // WW 傪庢摼偡傞
          tmp_ww = tmpImageData.getWW() + draggedWW;
          // 斖埻奜偺専弌
          if(tmp_ww < 0) tmp_ww = 0;
          else if(tmp_ww > tmpImageData.getPixelMax() - tmpImageData.getPixelMin())
            tmp_ww = tmpImageData.getPixelMax() - tmpImageData.getPixelMin();

          // WL 傪庢摼偡傞
          tmp_wl = tmpImageData.getWL() + draggedWL;
          // 斖埻奜偺専弌
          if(tmp_wl < tmpImageData.getPixelMin()) tmp_wl = tmpImageData.getPixelMin();
          else if(tmp_wl > tmpImageData.getPixelMax()) tmp_wl = tmpImageData.getPixelMax();


        // 拲栚夋憸埲奜
        }else {

          // WW 傪庢摼偡傞
          tmp_ww = tmpImageData.getWW() + draggedAllWW;
          // 斖埻奜偺専弌
          if(tmp_ww < 0) tmp_ww = 0;
          else if(tmp_ww > tmpImageData.getPixelMax() - tmpImageData.getPixelMin())
            tmp_ww = tmpImageData.getPixelMax() - tmpImageData.getPixelMin();
          
          // WL 傪庢摼偡傞
          tmp_wl = tmpImageData.getWL() + draggedAllWL;
          // 斖埻奜偺専弌
          if(tmp_wl < tmpImageData.getPixelMin()) tmp_wl = tmpImageData.getPixelMin();
          else if(tmp_wl > tmpImageData.getPixelMax()) tmp_wl = tmpImageData.getPixelMax();
        }

        // WW/WL傪僙僢僩偟丄夋憸傪昞帵                    //仾0乣1ms
        imageTiledCanvas.setWW_WL(tmp_ww, tmp_wl, tmpNo); //  0乣1ms
        imageTiledCanvas.setImage(tmpImageData.wwANDwl(tmp_ww, tmp_wl), tmpNo);
//        imageTiledCanvas.setImage(tmpImageData.wwANDwl(tmp_ww, tmp_wl), tmpNo); //  0乣1ms
        tmpNo++;

      }
      for(int i = tmpNo; i < max; i++) imageTiledCanvas.setImage(null, i);
      // 慡偰偺WW/WL偺僨僼僅儖僩抣偲偺嵎傪曐懚偡傞
//      for(int i=0; i<NUM; i++) ww[i] += draggedAllWW;
//      for(int i=0; i<NUM; i++) wl[i] += draggedAllWL;
      for(int i=0; i<NUM; i++) {
        ww[i] += draggedAllWW;
        wl[i] += draggedAllWL;
      }
    }
  }
  

  // WW/WL傪僨僼僅儖僩抣偵栠偡
  private void defaultWwWl() {
    int tmp_ww, tmp_wl;

    if(!synchro_flag){
      tmp_ww = imageData.getDefaultWW();
      tmp_wl = imageData.getDefaultWL();

      // 拲栚夋憸偺WW/WL偺傒傪僨僼僅儖僩抣偵偟丄僀儊乕僕傪岎姺偡傞
      imageTiledCanvas.setWW_WL(tmp_ww, tmp_wl, imageNo - tile_start);
      imageTiledCanvas.changeImage(imageData.wwANDwl(tmp_ww, tmp_wl), imageNo - tile_start);

      // 拲栚夋憸偺WW/WL偺僨僼僅儖僩抣偐傜偺嵎傪0偲偡傞
      ww[imageNo] =0;
      wl[imageNo] =0;

    }else {
      int max;
      int tmpNo =0;
      ImageData tmpImageData;
      max = row * column;

      // WW/WL傪僨僼僅儖僩偵偟偰慡偰偺夋憸傪昞帵偟側偍偡丅
      for(int i = tile_start; i < tile_start + max; i++) {
        if (tmpNo >= dicomData_tmp.length) break;

        tmpImageData = takeImageData(i);
        tmp_ww = tmpImageData.getDefaultWW();
        tmp_wl = tmpImageData.getDefaultWL();

        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);
      }
      // 慡偰偺WW/WL偺僨僼僅儖僩抣偲偺嵎傪0偲偡傞
      for(int i=0; i<NUM; i++) ww[i] = 0;
      for(int i=0; i<NUM; i++) wl[i] = 0;
      //夋憸嵞撉傒崬傒
      imageTiledCanvas.setRepaint();
      
    }
  }

  // 僔僱儌乕僪
  private void cineMode() {
    // Cine僗僞乕僩偝偣傞
    if(animationThread == null) {
      notCine = false;
      cine_B.setLabel("Stop");
      cineNext1_B.setFont(bold);
      cineNext2_B.setFont(plain);
      cinePrev1_B.setFont(plain);
      cinePrev2_B.setFont(plain);
      cineNext1_B.setEnabled(true);
      cinePrev1_B.setEnabled(true);
      cineNext2_B.setEnabled(true);
      cinePrev2_B.setEnabled(true);
      animationThread = new AnimationThread(this);
      animationThread.start();

    // 偡偱偵僗僞乕僩偟偰偄傞応崌偼僗僩僢僾偡傞
    }else {
      notCine = true;
      cine_B.setLabel("Cine Mode");
      cineNext1_B.setEnabled(false);
      cineNext2_B.setEnabled(false);
      cinePrev1_B.setEnabled(false);
      cinePrev2_B.setEnabled(false);
      animationThread.requestStop();
      animationThread = null;
    }
  }

  // imageNo傪曄峏偡傞
  public void changeImageNo() {
    // 僗儗僢僪僗僞乕僩乮dicomData, imageData傪儘乕僪偡傞乯
    int len = dicomData_tmp.length;

    if(imageNo - (len >> 1) <= 0) start =0;
    else start = imageNo - (len >> 1);
    if(start + len > NUM) start = NUM - len;

    startLoaderThread(start, len, start_old);
    //loader = new LoaderThread(start, len, start_old, this);
    start_old = start;
    //loader.start();

    showTile();
    //scrollPane1.doLayout();
    //scrollPane1.validate();
  }

  // 夋憸暘妱悢傪憹傗偡
  private void moreFrame() {
    double    height_space, width_space;
    double    tmpSize = canvasSize * 0.01;
    Dimension paneSize = scrollPane1.getSize();

    if(!less_B.isEnabled()) less_B.setEnabled(true);

    // 懡偔僗儁乕僗偑嬻偄偰偄傞曽偵暘妱悢傪憹傗偡
    height_space = (double)paneSize.height - (double)(height * tmpSize * row);
    width_space = (double)paneSize.width - (double)(width * tmpSize * column);
    if(height_space > width_space) row = row +1;
    else column = column +1;
    if(row >9) row =9;
    if(column >9) column =9;
    getCanvasSize();

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

  // 夋憸暘妱悢傪尭傜偡
  private void lessFrame() {
    double    height_space, width_space;
    double    tmpSize = canvasSize * 0.01;
    Dimension paneSize = scrollPane1.getSize();

    if(!more_B.isEnabled()) more_B.setEnabled(true);

    // 僗儁乕僗偺彮側偄傎偆偺暘妱悢傪尭傜偡
    height_space = (double)paneSize.height - (double)(height * tmpSize * row);
    width_space = (double)paneSize.width - (double)(width * tmpSize * column);

⌨️ 快捷键说明

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