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