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

📄 imagetiledcanvas.java

📁 客户端浏览医学图像的jsp源代码。可用于临床工作站。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * ImageTiledCanvas.java - 僀儊乕僕傪暲傋偰昞帵
 *
 * Copyright(C) 2000, Nagoya Institute of Technology, Iwata laboratory and Takahiro Katoji
 * http://mars.elcom.nitech.ac.jp/dicom/
 *
 * @author	Takahiro Katoji(mailto:katoco@mars.elcom.nitech.ac.jp)
 * @version
 *
 */

package dicomviewer;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.applet.*;

//public class ImageTiledCanvas extends Canvas implements Runnable{
public class ImageTiledCanvas extends Canvas{

  Viewer    parent;

  Image[]   image;                  // 昤夋偡傞DICOM僀儊乕僕
  Dimension canvasSize;             // 偙傟偺僒僀僘
  int       width, height;          // 尦夋憸偺僒僀僘
  int       imgW, imgH;             // 1枃偺夋憸偺昤夋僒僀僘
  int       px = 0, py = 0;         // 尦夋憸偺偙偺嵗昗偐傜傪昞帵偡傞
  int       x0, y0, x1, y1, x2, y2; // 儅僂僗偺億僀儞僩嵗昗乮儅僂僗僾儗僗丄僪儔僢僌丄儕儕乕僗乯
  double    zoom = 1.0;             // 奼戝弅彫棪
  int       zoomW, zoomH;           // 尦夋憸偺偙偺暆傪昞帵偡傞
  boolean   zoom_flag = false;      // 儅僂僗偱ZOOM傪曄峏偡傞偐偳偆偐丠
  boolean   hand = true; 		        // 僇乕僜儖偺宍
  boolean   loupe = false;          // 儖乕儁傪昤夋偡傞偐偳偆偐丠
  boolean   mouseDown;              // 儅僂僗偑墴偝傟偰偄傞忢懺偐偳偆偐丠
  boolean   move = false;           // 夋憸偺昤夋埵抲傪堏摦偝偣傞丅
  boolean   draggedflag = true;     // 僪儔僢僌thread婲摦偺偨傔偺flag
  boolean   nodraggedflag = true;   // 僪儔僢僌拞偱側偄帪偼true

  boolean   changeStudyInfo = false; //専嵏忣曬偑曄壔偟偨偐偳偆偐丠

  int       tileR, tileC;           // 暘妱悢乮峴丄楍乯
  int       imageIndex;             // 僙僢僩偝傟偰偄傞夋憸枃悢

  int       activeNo = 0;           // 拲栚夋憸斣崋
  boolean   changeActive = false;   // 拲栚夋憸偑儅僂僗偺僋儕僢僋偵傛偭偰曄壔偟偨偐丠
  int       start =0;               // 昤夋偡傞夋憸偺僗僞乕僩斣崋

  // 専嵏忣曬偺昞帵娭楢
  boolean   showStudyInfo = true;   // 専嵏忣曬傪昞帵偡傞偐偳偆偐丠
  String[]  patientID;              // (0010,0020)
  String[]  patientName;            // (0010,0010)
  String[]  patientAgeSex;          // (0010,1010) (0010,0040)
  String[]  studyID;                // (0020,0010)
  String[]  studyDate;              // (0008,0020)
  String[]  studyTime;              // (0008,0030)
  String[]  imageNo;                // (0020,0013)
  String[]  ww_wl;                  // 尰嵼偺WW/WL

  Font      font;                   // 専嵏忣曬昞帵梡偺僼僅儞僩
  FontMetrics fm;                   // 偦偺FontMetrics

  //帪娫僥僗僩
  int count = 0,count2 = 0;
  // 僐儞僗僩儔僋僞
  public ImageTiledCanvas(int w, int h, Viewer applet){
    parent = applet;
    zoomH = height = imgH = h;
    zoomW = width  = imgW = w;
    // 儅僂僗僾儗僗丄儕儕乕僗帪偺僀儀儞僩傪愝掕
    addMouseListener(new SetPoint());
    // 儅僂僗僪儔僢僌帪偺僀儀儞僩傪愝掕
    addMouseMotionListener(new SetPoint_move());
    // 僼僅儞僩偺嶌惉
    font = new Font("Helvetica", Font.PLAIN, 12);
    fm = getFontMetrics(font);
  }

  // 側傜傋傞悢傪愝掕偡傞丅
  // 偙偺儊僜僢僪偺屇傃弌偟屻偱側偄偲丄夋憸偼add偱偒側偄丅
  public void setTileType(int r, int c) {
    int max = r * c;

    // 暘妱悢偺庢摼
    tileR = r;
    tileC = c;
    // 暘妱悢偵墳偠偰偙傟帺恎偺戝偒偝傪曄壔偝偣傞
    canvasSize = new Dimension(width * tileC, height * tileR);
    setSize(canvasSize);
    // 暘妱悢偵墳偠偰曄悢偺妋曐
    image           = new Image[max];
    patientID       = new String[max];
    patientName     = new String[max];
    patientAgeSex   = new String[max];
    studyID         = new String[max];
    studyDate       = new String[max];
    studyTime       = new String[max];
    imageNo         = new String[max];
    ww_wl           = new String[max];
    imageIndex = 0;
  }

  // 僀儊乕僕傪嵟屻偵捛壛偡傞丅
  // 偡偱偵昞帵偱偒傞偐偢偩偗昞帵偟偰偄傞応崌偼丄
  // 愭摢傪嶍彍偟偰捛壛偡傞丅
  public void addImage(Image argImage) {
    if(imageIndex < image.length) {
      image[imageIndex] = argImage;
      imageIndex++;
    } else {
      System.arraycopy(image, 1, image, 0, image.length -1);
      image[imageIndex -1] = argImage;
    }
    repaint();
  }

  // 僀儊乕僕傪愭摢偵捛壛偡傞丅
  // 偡偱偵嵟戝悢昞帵偟偰偄傞応崌偼丄嵟屻傪嶍彍偡傞丅
  public void addPreImage(Image argImage) {
    System.arraycopy(image, 0, image, 1, image.length -1);
    image[0] = argImage;
    if(imageIndex < image.length) imageIndex++;
    repaint();
  }

  // 僀儊乕僕傪index偵僙僢僩偡傞丅
  public void setImage(Image argImage, int index) {
    image[index] = argImage;
    imageIndex = index;
//    repaint();
  }



  // 専嵏忣曬傪昞帵偡傞偐偟側偄偐傪僙僢僩偡傞
  public void setStudyInfo_flag(boolean flag){
    showStudyInfo = flag;
    repaint();
  }

  // 専嵏忣曬傪index偵僙僢僩偡傞
  public void setStudyInfo(DicomData dicomData, int index) {
    String tag;

    // 専嵏偺忣曬偑側偗傟偽Null傪戙擖
    if(dicomData == null) {
      patientID[index] = null;
      patientName[index] = null;
      patientAgeSex[index] = null;
      studyID[index] = null;
      studyDate[index] = null;
      studyTime[index] = null;
      imageNo[index] = null;
      ww_wl[index] = null;

    // 専嵏忣曬偑懚嵼偡傞応崌丄偦傟偧傟偺僞僌傪挷傋偰抣傪僙僢僩
    }else {
      tag = "(0010,0020)";
      if(dicomData.isContain(tag))
        patientID[index] = dicomData.getAnalyzedValue(tag);
      else
        patientID[index] = null;

      tag = "(0010,0010)";
      if(dicomData.isContain(tag))
        patientName[index] = dicomData.getAnalyzedValue(tag);
      else
        patientName[index] = null;

      tag = "(0010,1010)";
      if(dicomData.isContain(tag)) {
        patientAgeSex[index] = dicomData.getAnalyzedValue(tag);
        tag = "(0010,0040)";
        if(dicomData.isContain(tag))
          patientAgeSex[index] += " " + dicomData.getAnalyzedValue(tag);
      }else {
        tag = "(0010,0040)";
        if(dicomData.isContain(tag))
          patientAgeSex[index] = dicomData.getAnalyzedValue(tag);
        else
          patientAgeSex[index] = null;
      }

      tag = "(0020,0010)";
      if(dicomData.isContain(tag))
        studyID[index] = dicomData.getAnalyzedValue(tag);
      else
        studyID[index] = null;

      tag = "(0008,0020)";
      if(dicomData.isContain(tag))
        studyDate[index] = dicomData.getAnalyzedValue(tag);
      else
        studyDate[index] = null;

      tag = "(0008,0030)";
      if(dicomData.isContain(tag))
        studyTime[index] = dicomData.getAnalyzedValue(tag);
      else
        studyTime[index] = null;

      tag = "(0020,0013)";
      if(dicomData.isContain(tag))
        imageNo[index] = dicomData.getAnalyzedValue(tag);
      else
        imageNo[index] = null;
    }
  }

  // 昞帵梡偺WW/WL偺抣傪僙僢僩偡傞
  public void setWW_WL(int ww, int wl, int index) {
    ww_wl[index] = "" + wl + "/" + ww;
  }

  // index斣偺僀儊乕僕傪岎姺偡傞丅
  public void changeImage(Image argImage, int index) {
    image[index] = argImage;
//    repaint();
  }

  // 拲栚夋憸斣崋傪僙僢僩偡傞
  public void setActiveNo(int index) {
    this.activeNo = index;
  }

  // 嵟弶偵昞帵偡傞夋憸偺夋憸斣崋
  public void setStartNo(int start_imgNo) {
    start = start_imgNo;
  }

  // 僉儍儞僶僗僒僀僘傪曄峏偡傞
  public void setCanvasSize(int w, int h) {
    canvasSize = new Dimension(w, h);
    setSize(canvasSize);
    repaint();
  }

  public void setRepaint(){
    repaint();
  }
  
  public void paint(Graphics g) {
    update(g);
  }

  public void update(Graphics g)
  {
    count2 += 1;
    // 儅僂僗傪墴偟偰棧偟偨暘偩偗僀儊乕僕傪堏摦偝偣傞丅
    // 扐偟丄偼偠偭偙埲忋摦偐側偄傛偆偵偡傞
    if(px+zoomW > imgW) px = imgW - zoomW;
    if(py+zoomH > imgH) py = imgH - zoomH;
    if(px < 0) px = 0;
    if(py < 0) py = 0;

    // 僆僼僗僋儕乕儞偺弨旛(夋憸堦枃暘丄Loupe梡)
    Graphics  offg, loupeg, offallg;
    Image     offImage, loupeImage, offallImage;
    offImage = createImage(width, height);
    offg = offImage.getGraphics();
    offallImage = createImage(width, height);
    offallg = offallImage.getGraphics();
    loupeImage = createImage(200, 200);
    loupeg = loupeImage.getGraphics();

    int imgNo = 0;
    int tmp_x, tmp_y;

    // 僀儊乕僕傪昤偔
    for (int j=0; j < tileR; j++) {
      if(imgNo > imageIndex) break;
      for (int i=0; i < tileC; i++) {
        if(imgNo > imageIndex) break;

        // 夋憸傪昤偔嵗昗傪媮傔傞
        tmp_x = width * i;
        tmp_y = height * j;

        // 僀儊乕僕傪昤偔
        // 傑偢丄夋憸1枃傪僆僼僗僋儕乕儞偵昤夋
        // 夋憸偑懚嵼偟側偄応崌
        if(image[imgNo] == null){
          // 崟偔揾傝偮傇偡
          offg.setColor(Color.black);

⌨️ 快捷键说明

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