📄 viewer.java
字号:
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 + -