📄 imagetiledcanvas.java
字号:
/*
* 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 + -