init
115
nv/html/dwv/tests/visual/appgui.js
Normal file
@@ -0,0 +1,115 @@
|
||||
/**
|
||||
* Application GUI.
|
||||
*
|
||||
* Snapshots were created using synedra View Personal (http://www.synedra.com),
|
||||
* version 14 for Microsoft Windows:
|
||||
* - Right click on the thumbnail in the left 'Document tree area',
|
||||
* - Choose 'Convert to JPEG'.
|
||||
*/
|
||||
|
||||
// Default window level presets.
|
||||
dwv.tool.defaultpresets = {};
|
||||
|
||||
// Image decoders (for web workers)
|
||||
dwv.image.decoderScripts = {
|
||||
"jpeg2000": "../../decoders/pdfjs/decode-jpeg2000.js",
|
||||
"jpeg-lossless": "../../decoders/rii-mango/decode-jpegloss.js",
|
||||
"jpeg-baseline": "../../decoders/pdfjs/decode-jpegbaseline.js"
|
||||
};
|
||||
|
||||
// Window
|
||||
dwv.gui.getWindowSize = dwv.gui.base.getWindowSize;
|
||||
// get element
|
||||
dwv.gui.getElement = dwv.gui.base.getElement;
|
||||
// Progress
|
||||
dwv.gui.displayProgress = function (/*percent*/) {};
|
||||
|
||||
// check browser support
|
||||
dwv.browser.check();
|
||||
|
||||
// test data line
|
||||
dwv.addDataLine = function (id, fileroot, doc)
|
||||
{
|
||||
var mainDiv = document.getElementById("data-lines");
|
||||
|
||||
// dwv container
|
||||
var dwvDiv = document.createElement("div");
|
||||
dwvDiv.id = id;
|
||||
var layConDiv = document.createElement("div");
|
||||
layConDiv.className = "layerContainer";
|
||||
var imgCanvas = document.createElement("canvas");
|
||||
imgCanvas.className = "imageLayer";
|
||||
layConDiv.appendChild(imgCanvas);
|
||||
dwvDiv.appendChild(layConDiv);
|
||||
mainDiv.appendChild(dwvDiv);
|
||||
|
||||
// dwv application
|
||||
var config = {
|
||||
"containerDivId": id,
|
||||
"skipLoadUrl": true
|
||||
};
|
||||
var url = "../data/" + fileroot + ".dcm";
|
||||
var app = new dwv.App();
|
||||
app.init(config);
|
||||
// display loading time
|
||||
var listener = function (event) {
|
||||
if (event.type === "load-start") {
|
||||
console.time("load-data::"+fileroot);
|
||||
}
|
||||
else {
|
||||
console.timeEnd("load-data::"+fileroot);
|
||||
}
|
||||
};
|
||||
app.addEventListener("load-start", listener);
|
||||
app.addEventListener("load-end", listener);
|
||||
// load data
|
||||
app.loadURLs([url]);
|
||||
|
||||
// image
|
||||
var image = document.createElement("img");
|
||||
image.src = "./images/" + fileroot + ".jpg";
|
||||
image.setAttribute("class", "snapshot");
|
||||
mainDiv.appendChild(image);
|
||||
|
||||
// doc
|
||||
var docDiv = document.createElement("div");
|
||||
docDiv.setAttribute("class", "doc");
|
||||
var docUl = document.createElement("ul");
|
||||
var keys = Object.keys(doc);
|
||||
for ( var i = 0; i < keys.length; ++i ) {
|
||||
var li = document.createElement("li");
|
||||
var spanKey = document.createElement("span");
|
||||
spanKey.setAttribute("class", "key");
|
||||
spanKey.appendChild( document.createTextNode(keys[i]) );
|
||||
var spanValue = document.createElement("span");
|
||||
spanValue.setAttribute("class", "value");
|
||||
spanValue.appendChild( document.createTextNode(doc[keys[i]]) );
|
||||
if ( keys[i] === "origin" ) {
|
||||
|
||||
var spanOrig = document.createElement("span");
|
||||
spanOrig.setAttribute("class", "path");
|
||||
spanOrig.setAttribute("title", doc.path);
|
||||
spanOrig.appendChild( document.createTextNode(doc[keys[i]]) );
|
||||
li.appendChild( spanKey );
|
||||
li.appendChild( document.createTextNode( ": " ) );
|
||||
li.appendChild( spanOrig );
|
||||
docUl.appendChild(li);
|
||||
}
|
||||
else if ( keys[i] === "path" ) {
|
||||
// nothing to do
|
||||
}
|
||||
else {
|
||||
li.appendChild( spanKey );
|
||||
li.appendChild( document.createTextNode( ": " ) );
|
||||
li.appendChild( spanValue );
|
||||
docUl.appendChild(li);
|
||||
}
|
||||
}
|
||||
docDiv.appendChild(docUl);
|
||||
mainDiv.appendChild(docDiv);
|
||||
|
||||
// separator
|
||||
var sepDiv = document.createElement("div");
|
||||
sepDiv.setAttribute("class", "separator");
|
||||
mainDiv.appendChild(sepDiv);
|
||||
};
|
||||
BIN
nv/html/dwv/tests/visual/images/dicompyler-ct.0.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
nv/html/dwv/tests/visual/images/gdcm-CR-MONO1-10-chest.jpg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
nv/html/dwv/tests/visual/images/gdcm-CT-MONO2-8-abdo.jpg
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
nv/html/dwv/tests/visual/images/gdcm-US-RGB-8-epicard.jpg
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
nv/html/dwv/tests/visual/images/gdcm-US-RGB-8-esopecho.jpg
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 42 KiB |
BIN
nv/html/dwv/tests/visual/images/nema-ct1_j2ki.jpg
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
nv/html/dwv/tests/visual/images/nema-ct1_jpll.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
nv/html/dwv/tests/visual/images/nema-mr1_jply.jpg
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
nv/html/dwv/tests/visual/images/nema-nm1_j2kr.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
nv/html/dwv/tests/visual/images/nema-nm1_jpll.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
nv/html/dwv/tests/visual/images/nema-nm1_jply.jpg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
nv/html/dwv/tests/visual/images/nema-us1_j2ki.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
nv/html/dwv/tests/visual/images/nema-vl2_j2kr.jpg
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
nv/html/dwv/tests/visual/images/osirix-cerebrix.jpg
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
nv/html/dwv/tests/visual/images/osirix-goudurix.jpg
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
nv/html/dwv/tests/visual/images/osirix-toutatix-100.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
142
nv/html/dwv/tests/visual/index-jpeg.html
Normal file
@@ -0,0 +1,142 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>DWV DICOM jpg Check</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="description" content="DICOM Web Viewer (DWV) simple version">
|
||||
<meta name="keywords" content="DICOM,HTML5,JavaScript,medical,imaging,DWV">
|
||||
<!-- Style -->
|
||||
<style type="text/css">
|
||||
body { font-family: Arial, Helvetica, sans-serif; }
|
||||
.snapshot {
|
||||
float: left; margin: 5px;
|
||||
max-width: 200px; max-height: 200px;
|
||||
}
|
||||
.layerContainer {
|
||||
float: left; margin: 5px;
|
||||
width: 200px; height: 200px;
|
||||
}
|
||||
.doc { float: left; margin: 5px; }
|
||||
.path {
|
||||
border-bottom: 1px dashed #999;
|
||||
text-decoration: none;
|
||||
}
|
||||
.key {
|
||||
color: #999;
|
||||
}
|
||||
.separator { clear: both; }
|
||||
.footer {
|
||||
margin-top: 15px; padding: 5px;
|
||||
background-color: #ccc;
|
||||
}
|
||||
</style>
|
||||
<!-- Third party (dwv) -->
|
||||
<script type="text/javascript" src="../../ext/modernizr/modernizr.js"></script>
|
||||
<!-- Third party (load) -->
|
||||
<script type="text/javascript" src="../../decoders/rii-mango/lossless-min.js"></script>
|
||||
<script type="text/javascript" src="../../decoders/pdfjs/jpg.js"></script>
|
||||
<!-- Local -->
|
||||
<script type="text/javascript" src="../../src/app/application.js"></script>
|
||||
<script type="text/javascript" src="../../src/app/viewController.js"></script>
|
||||
<script type="text/javascript" src="../../src/dicom/dicomParser.js"></script>
|
||||
<script type="text/javascript" src="../../src/dicom/dictionary.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/filter.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/generic.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/help.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/html.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/info.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/layer.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/loader.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/style.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/tools.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/undo.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/decoder.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/dicomBufferToView.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/filter.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/geometry.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/image.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/luts.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/view.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/thread.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/dicomBufferToView.js"></script>
|
||||
<script type="text/javascript" src="../../src/io/urlsLoader.js"></script>
|
||||
<script type="text/javascript" src="../../src/io/dicomDataLoader.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/bucketQueue.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/matrix.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/point.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/scissors.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/shapes.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/stats.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/vector.js"></script>
|
||||
<script type="text/javascript" src="../../src/tools/toolbox.js"></script>
|
||||
<script type="text/javascript" src="../../src/tools/undo.js"></script>
|
||||
<script type="text/javascript" src="../../src/tools/windowLevel.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/browser.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/progress.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/string.js"></script>
|
||||
|
||||
<!-- Local -->
|
||||
<script type="text/javascript" src="appgui.js"></script>
|
||||
|
||||
<!-- Launch the app -->
|
||||
<script type="text/javascript">
|
||||
// launch when page is loaded
|
||||
document.addEventListener("DOMContentLoaded", function (/*event*/)
|
||||
{
|
||||
dwv.addDataLine("dwv0", "leadtools-8BitsJpegLossyGrayScale", {
|
||||
'origin': 'LeadTools',
|
||||
'path': '8BitsJpegLossyGrayScale.zip',
|
||||
't-syntax': '1.2.840.10008.1.2.4.50 (jpeg baseline)',
|
||||
'modality': 'OT', 'photo': 'MONOCHROME2',
|
||||
'bits': '8-8-7', 'pixel-vr': 'OW',
|
||||
});
|
||||
dwv.addDataLine("dwv1", "nema-mr1_jply", {
|
||||
'origin': 'Nema WG04',
|
||||
'path': 'compsamples_jpeg/IMAGES/JPLY/MR1_JPLY',
|
||||
't-syntax': '1.2.840.10008.1.2.4.51 (jpeg baseline)',
|
||||
'modality': 'MR', 'photo': 'MONOCHROME2',
|
||||
'bits': '16-12-11', 'pixel-vr': 'OB',
|
||||
});
|
||||
dwv.addDataLine("dwv2", "nema-nm1_jply", {
|
||||
'origin': 'Nema WG04',
|
||||
'path': 'compsamples_jpeg/IMAGES/JPLY/NM1_JPLY',
|
||||
't-syntax': '1.2.840.10008.1.2.4.51 (jpeg baseline)',
|
||||
'modality': 'NM', 'photo': 'MONOCHROME2',
|
||||
'bits': '16-12-11', 'pixel-vr': 'OB',
|
||||
});
|
||||
dwv.addDataLine("dwv3", "nema-ct1_jpll", {
|
||||
'origin': 'Nema WG04',
|
||||
'path': 'compsamples_jpeg/IMAGES/JPLL/CT1_JPLL',
|
||||
't-syntax': '1.2.840.10008.1.2.4.70 (jpeg lossless)',
|
||||
'modality': 'CT', 'photo': 'MONOCHROME2',
|
||||
'bits': '16-16-15', 'pixel-vr': 'OB',
|
||||
});
|
||||
dwv.addDataLine("dwv4", "nema-nm1_jpll", {
|
||||
'origin': 'Nema WG04',
|
||||
'path': 'compsamples_jpeg/IMAGES/JPLL/NM1_JPLL',
|
||||
't-syntax': '1.2.840.10008.1.2.4.70 (jpeg lossless)',
|
||||
'modality': 'NM', 'photo': 'MONOCHROME2',
|
||||
'bits': '16-16-15', 'pixel-vr': 'OB',
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="data-lines"></div>
|
||||
|
||||
<div class="footer">
|
||||
<p><b>Missing data</b>: JPEG Lossless, Nonhierarchical (Processes 14) (1.2.840.10008.1.2.4.57) and JPEG-LS (not supported)</p>
|
||||
<p>Data sources:</p>
|
||||
<ul>
|
||||
<li>Nema WG04 (jpeg) <a href="ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/">dataSets</a></li>
|
||||
<li>Leadtools datasets hosted at <a href="http://www.creatis.insa-lyon.fr/~jpr/PUBLIC/gdcm/gdcmSampleData/ColorDataSetLeadTool/">creatis</a></li>
|
||||
</ul>
|
||||
<p>The left image is created with DWV, the right one is a snapshot
|
||||
generated using <a href="https://www.synedra.com">Synedra</a> View Personnal.</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
142
nv/html/dwv/tests/visual/index-jpeg2000.html
Normal file
@@ -0,0 +1,142 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>DWV DICOM jpg2000 Check</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="description" content="DICOM Web Viewer (DWV) simple version">
|
||||
<meta name="keywords" content="DICOM,HTML5,JavaScript,medical,imaging,DWV">
|
||||
<!-- Style -->
|
||||
<style type="text/css">
|
||||
body { font-family: Arial, Helvetica, sans-serif; }
|
||||
.snapshot {
|
||||
float: left; margin: 5px;
|
||||
max-width: 200px; max-height: 200px;
|
||||
}
|
||||
.layerContainer {
|
||||
float: left; margin: 5px;
|
||||
width: 200px; height: 200px;
|
||||
}
|
||||
.doc { float: left; margin: 5px; }
|
||||
.path {
|
||||
border-bottom: 1px dashed #999;
|
||||
text-decoration: none;
|
||||
}
|
||||
.key {
|
||||
color: #999;
|
||||
}
|
||||
.separator { clear: both; }
|
||||
.footer {
|
||||
margin-top: 15px; padding: 5px;
|
||||
background-color: #ccc;
|
||||
}
|
||||
</style>
|
||||
<!-- Third party (dwv) -->
|
||||
<script type="text/javascript" src="../../ext/modernizr/modernizr.js"></script>
|
||||
<!-- Third party (load) -->
|
||||
<script type="text/javascript" src="../../decoders/pdfjs/jpx.js"></script>
|
||||
<script type="text/javascript" src="../../decoders/pdfjs/util.js"></script>
|
||||
<script type="text/javascript" src="../../decoders/pdfjs/arithmetic_decoder.js"></script>
|
||||
<!-- Local -->
|
||||
<script type="text/javascript" src="../../src/app/application.js"></script>
|
||||
<script type="text/javascript" src="../../src/app/viewController.js"></script>
|
||||
<script type="text/javascript" src="../../src/dicom/dicomParser.js"></script>
|
||||
<script type="text/javascript" src="../../src/dicom/dictionary.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/filter.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/generic.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/help.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/html.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/info.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/layer.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/loader.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/style.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/tools.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/undo.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/decoder.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/dicomBufferToView.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/filter.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/geometry.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/image.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/luts.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/view.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/thread.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/dicomBufferToView.js"></script>
|
||||
<script type="text/javascript" src="../../src/io/urlsLoader.js"></script>
|
||||
<script type="text/javascript" src="../../src/io/dicomDataLoader.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/bucketQueue.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/matrix.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/point.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/scissors.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/shapes.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/stats.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/vector.js"></script>
|
||||
<script type="text/javascript" src="../../src/tools/toolbox.js"></script>
|
||||
<script type="text/javascript" src="../../src/tools/undo.js"></script>
|
||||
<script type="text/javascript" src="../../src/tools/windowLevel.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/browser.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/progress.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/string.js"></script>
|
||||
|
||||
<!-- Local -->
|
||||
<script type="text/javascript" src="appgui.js"></script>
|
||||
|
||||
<!-- Launch the app -->
|
||||
<script type="text/javascript">
|
||||
// launch when page is loaded
|
||||
document.addEventListener("DOMContentLoaded", function (/*event*/)
|
||||
{
|
||||
dwv.addDataLine("dwv0", "osirix-cerebrix", {
|
||||
'origin': 'Osirix',
|
||||
'path': 'CEREBRIX/Neuro Crane/Axial_T1 - 5352/IM-0001-0100.dcm',
|
||||
't-syntax': '1.2.840.10008.1.2.4.91 (jpeg2000)',
|
||||
'modality': 'SC', 'photo': 'MONOCHROME2',
|
||||
'bits': '16-16-15', 'pixel-vr': 'OW',
|
||||
});
|
||||
dwv.addDataLine("dwv1", "nema-ct1_j2ki", {
|
||||
'origin': 'Nema WG04',
|
||||
'path': 'compsamples_j2k/IMAGES/J2KI/CT1_J2KI',
|
||||
't-syntax': '1.2.840.10008.1.2.4.91 (jpeg2000)',
|
||||
'modality': 'CT', 'photo': 'MONOCHROME2',
|
||||
'bits': '16-16-15', 'pixel-vr': 'OB',
|
||||
});
|
||||
dwv.addDataLine("dwv2", "nema-us1_j2ki", {
|
||||
'origin': 'Nema WG04',
|
||||
'path': 'compsamples_j2k/IMAGES/J2KI/US1_J2KI',
|
||||
't-syntax': '1.2.840.10008.1.2.4.91 (jpeg2000)',
|
||||
'modality': 'US', 'photo': 'YBR_ICT (planar=0)',
|
||||
'bits': '8-8-7', 'pixel-vr': 'OB',
|
||||
});
|
||||
dwv.addDataLine("dwv3", "nema-nm1_j2kr", {
|
||||
'origin': 'Nema WG04',
|
||||
'path': 'compsamples_j2k/IMAGES/J2KR/NM1_J2KR',
|
||||
't-syntax': '1.2.840.10008.1.2.4.90 (jpeg2000)',
|
||||
'modality': 'NM', 'photo': 'MONOCHROME2',
|
||||
'bits': '16-16-15', 'pixel-vr': 'OB',
|
||||
});
|
||||
dwv.addDataLine("dwv4", "nema-vl2_j2kr", {
|
||||
'origin': 'Nema WG04',
|
||||
'path': 'compsamples_j2k/IMAGES/J2KR/VL2_J2KR',
|
||||
't-syntax': '1.2.840.10008.1.2.4.90 (jpeg2000)',
|
||||
'modality': 'OT', 'photo': 'YBR_RCT (planar=0)',
|
||||
'bits': '8-8-7', 'pixel-vr': 'OB',
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="data-lines"></div>
|
||||
|
||||
<div class="footer">
|
||||
<p>Data sources:</p>
|
||||
<ul>
|
||||
<li>Osirix <a href="http://www.osirix-viewer.com/datasets/">datasets</a></li>
|
||||
<li>Nema WG04 (jpeg2000) <a href="ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/">dataSets</a></li>
|
||||
</ul>
|
||||
<p>The left image is created with DWV, the right one is a snapshot
|
||||
generated using <a href="https://www.synedra.com">Synedra</a> View Personnal.</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
153
nv/html/dwv/tests/visual/index.html
Normal file
@@ -0,0 +1,153 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>DWV DICOM Check</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="description" content="DICOM Web Viewer (DWV) simple version">
|
||||
<meta name="keywords" content="DICOM,HTML5,JavaScript,medical,imaging,DWV">
|
||||
<!-- Style -->
|
||||
<style type="text/css">
|
||||
body { font-family: Arial, Helvetica, sans-serif; }
|
||||
.snapshot {
|
||||
float: left; margin: 5px;
|
||||
max-width: 200px; max-height: 200px;
|
||||
}
|
||||
.layerContainer {
|
||||
float: left; margin: 5px;
|
||||
width: 200px; height: 200px;
|
||||
}
|
||||
.doc { float: left; margin: 5px; }
|
||||
.path {
|
||||
border-bottom: 1px dashed #999;
|
||||
text-decoration: none;
|
||||
}
|
||||
.key {
|
||||
color: #999;
|
||||
}
|
||||
.separator { clear: both; }
|
||||
.footer {
|
||||
margin-top: 15px; padding: 5px;
|
||||
background-color: #ccc;
|
||||
}
|
||||
</style>
|
||||
<!-- Third party (dwv) -->
|
||||
<script type="text/javascript" src="../../ext/modernizr/modernizr.js"></script>
|
||||
<!-- Local -->
|
||||
<script type="text/javascript" src="../../src/app/application.js"></script>
|
||||
<script type="text/javascript" src="../../src/app/viewController.js"></script>
|
||||
<script type="text/javascript" src="../../src/dicom/dicomParser.js"></script>
|
||||
<script type="text/javascript" src="../../src/dicom/dictionary.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/filter.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/generic.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/help.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/info.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/html.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/layer.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/loader.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/style.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/tools.js"></script>
|
||||
<script type="text/javascript" src="../../src/gui/undo.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/decoder.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/dicomBufferToView.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/filter.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/geometry.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/image.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/luts.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/view.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/thread.js"></script>
|
||||
<script type="text/javascript" src="../../src/image/dicomBufferToView.js"></script>
|
||||
<script type="text/javascript" src="../../src/io/urlsLoader.js"></script>
|
||||
<script type="text/javascript" src="../../src/io/dicomDataLoader.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/bucketQueue.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/matrix.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/point.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/scissors.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/shapes.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/stats.js"></script>
|
||||
<script type="text/javascript" src="../../src/math/vector.js"></script>
|
||||
<script type="text/javascript" src="../../src/tools/toolbox.js"></script>
|
||||
<script type="text/javascript" src="../../src/tools/undo.js"></script>
|
||||
<script type="text/javascript" src="../../src/tools/windowLevel.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/browser.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/progress.js"></script>
|
||||
<script type="text/javascript" src="../../src/utils/string.js"></script>
|
||||
|
||||
<!-- Local -->
|
||||
<script type="text/javascript" src="appgui.js"></script>
|
||||
|
||||
<!-- Launch the app -->
|
||||
<script type="text/javascript">
|
||||
// launch when page is loaded
|
||||
document.addEventListener("DOMContentLoaded", function (/*event*/)
|
||||
{
|
||||
dwv.addDataLine("dwv0", "osirix-toutatix-100", {
|
||||
'origin': 'Osirix',
|
||||
'path': 'TOUTATIX/Cardiac 1CTA_CORONARY_ARTERIES_TESTBOLUS (Adult)/Heart w-o 1.5 B25f 55% /IM-0001-0100.dcm',
|
||||
't-syntax': '1.2.840.10008.1.2.1',
|
||||
'modality': 'CT', 'photo': 'Monochrome2',
|
||||
'bits': '16-12-11', 'pixel-vr': 'OW',
|
||||
});
|
||||
dwv.addDataLine("dwv1", "osirix-goudurix", {
|
||||
'origin': 'Osirix',
|
||||
'path': 'GOUDURIX/Specials 1_CORONARY_CTA_COMBI_SMH/70 % 1.0 B30f/IM-0001-0100.dcm',
|
||||
't-syntax': '1.2.840.10008.1.2',
|
||||
'modality': 'CT', 'photo': 'Monochrome2',
|
||||
'bits': '16-12-11', 'pixel-vr': 'OX',
|
||||
});
|
||||
dwv.addDataLine("dwv2", "dicompyler-ct.0", {
|
||||
'origin': 'dicompyler',
|
||||
'path': 'dicompyler/ct/ct.0.dcm',
|
||||
't-syntax': '1.2.840.10008.1.2',
|
||||
'modality': 'CT', 'photo': 'Monochrome2',
|
||||
'bits': '16-16-15', 'pixel-vr': 'OX',
|
||||
});
|
||||
dwv.addDataLine("dwv3", "gdcm-CR-MONO1-10-chest", {
|
||||
'origin': 'GDCM (+ DCIM prefix)',
|
||||
'path': 'CR-MONO1-10-chest.dcm',
|
||||
't-syntax': '1.2.840.10008.1.2.1',
|
||||
'modality': 'CR', 'photo': 'Monochrome1',
|
||||
'bits': '16-10-9', 'pixel-vr': 'OW',
|
||||
});
|
||||
dwv.addDataLine("dwv4", "gdcm-CT-MONO2-8-abdo", {
|
||||
'origin': 'GDCM',
|
||||
'path': 'CT-MONO2-8-abdo.dcm',
|
||||
't-syntax': '1.2.840.10008.1.2',
|
||||
'modality': 'CT', 'photo': 'Monochrome2',
|
||||
'bits': '8-8-7', 'pixel-vr': 'OX',
|
||||
});
|
||||
dwv.addDataLine("dwv5", "gdcm-US-RGB-8-epicard", {
|
||||
'origin': 'GDCM',
|
||||
'path': 'US-RGB-8-epicard.dcm',
|
||||
't-syntax': '1.2.840.10008.1.2.2',
|
||||
'modality': 'US', 'photo': 'RGB (planar=1)',
|
||||
'bits': '8-8-7', 'pixel-vr': 'OB',
|
||||
});
|
||||
dwv.addDataLine("dwv6", "gdcm-US-RGB-8-esopecho", {
|
||||
'origin': 'GDCM',
|
||||
'path': 'US-RGB-8-esopecho.dcm',
|
||||
't-syntax': '1.2.840.10008.1.2.1',
|
||||
'modality': 'US', 'photo': 'RGB (planar=0)',
|
||||
'bits': '8-8-7', 'pixel-vr': 'OB',
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="data-lines"></div>
|
||||
|
||||
<div class="footer">
|
||||
<p><b>Missing data</b>: 8 bits with pixel VR OW</p>
|
||||
<p>Data sources:</p>
|
||||
<ul>
|
||||
<li>Osirix <a href="http://www.osirix-viewer.com/datasets/">datasets</a></li>
|
||||
<li>Gdcm: :pserver:xxx@cvs.creatis.insa-lyon.fr:2402/cvs/public</li>
|
||||
</ul>
|
||||
<p>The left image is created with DWV, the right one is a snapshot
|
||||
generated using <a href="https://www.synedra.com">Synedra</a> View Personnal.</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
179
nv/html/dwv/tests/visual/sauce.js
Normal file
@@ -0,0 +1,179 @@
|
||||
// namespaces
|
||||
var dwv = dwv || {};
|
||||
/** @namespace */
|
||||
dwv.tests = dwv.tests || {};
|
||||
|
||||
/* global require */
|
||||
var process = process || {};
|
||||
|
||||
/**
|
||||
* Saucelabs script.
|
||||
* Has to be launched from the root dir with grunt: `grunt sauce`
|
||||
* If it is the first time, install all dependencies by running:
|
||||
* `npm install` (from the root dir, will install locally).
|
||||
*
|
||||
* Results are published publicly at: https://saucelabs.com/u/ivmartel
|
||||
*
|
||||
* Removed to solve dependencies... TODO Find another way?
|
||||
* Gruntfile:
|
||||
grunt.initConfig({
|
||||
execute: {
|
||||
sauce_full: {
|
||||
options: {
|
||||
args: ['full']
|
||||
},
|
||||
src: ['tests/visual/sauce.js']
|
||||
}
|
||||
}
|
||||
});
|
||||
grunt.loadNpmTasks('grunt-execute');
|
||||
grunt.registerTask('sauce', ['execute:sauce_full']);
|
||||
*/
|
||||
|
||||
// selenium webdriver
|
||||
var webdriver = require('../../node_modules/selenium-webdriver');
|
||||
// used to update the saucelab job name
|
||||
var SauceLabs = require("saucelabs");
|
||||
var saucelabs = new SauceLabs({
|
||||
username: "ivmartel",
|
||||
password: "my-password"
|
||||
});
|
||||
|
||||
/**
|
||||
* Launch a sauce GUI test.
|
||||
* @see https://wiki.saucelabs.com/display/DOCS/Platform+Configurator
|
||||
* for saucelabs possibilities.
|
||||
* @see http://seleniumhq.github.io/selenium/docs/api/javascript/index.html
|
||||
* for the webdriver API.
|
||||
*
|
||||
* @param {Object} caps Desired capabilities for the webdriver. Minimum of
|
||||
* {'browserName', 'version', 'platform'}.
|
||||
*/
|
||||
dwv.tests.sauceTest = function (caps) {
|
||||
var driver = new webdriver.Builder().
|
||||
withCapabilities({
|
||||
'browserName': caps.browserName,
|
||||
'version': caps.version,
|
||||
'platform': caps.platform,
|
||||
'username': saucelabs.options.username,
|
||||
'accessKey': saucelabs.options.password
|
||||
}).
|
||||
usingServer("http://" + saucelabs.options.username + ":" + saucelabs.options.password +
|
||||
"@ondemand.saucelabs.com:80/wd/hub").
|
||||
build();
|
||||
|
||||
driver.getSession().then(function (sessionid){
|
||||
driver.sessionID = sessionid.id_;
|
||||
});
|
||||
|
||||
var root = "https://ivmartel.github.io/dwv/demo/stable/viewers/mobile/index.html";
|
||||
var dataUrl = "https%3A%2F%2Fraw.githubusercontent.com%2Fivmartel%2Fdwv%2Fmaster%2Ftests%2Fdata%2F";
|
||||
dataUrl += "%3Ffile%3Dbbmri-53323851.dcm";
|
||||
dataUrl += "%26file%3Dbbmri-53323707.dcm";
|
||||
dataUrl += "%26file%3Dbbmri-53323563.dcm";
|
||||
|
||||
driver.get(root + '?input=' + dataUrl + '&dwvReplaceMode=void').then( function () {
|
||||
// wait for the tool list to be displayed
|
||||
return driver.wait(webdriver.until.elementLocated(webdriver.By.className('toolSelect')), 10000);
|
||||
}).then( function () {
|
||||
// get the image layer
|
||||
return driver.findElement(webdriver.By.className('imageLayer'));
|
||||
}).then( function (element) {
|
||||
// simulate a mouse move on the image layer
|
||||
return driver.actions().
|
||||
mouseDown(element).
|
||||
mouseMove(element, {x: 0, y: 50}).
|
||||
mouseUp().
|
||||
perform();
|
||||
}).then( function () {
|
||||
// sleep to allow to refresh
|
||||
return driver.sleep(5 * 1000);
|
||||
}).then( function () {
|
||||
// get the image layer
|
||||
return driver.findElement(webdriver.By.className('imageLayer'));
|
||||
}).then( function (element) {
|
||||
// simulate a mouse move on the image layer
|
||||
return driver.actions().
|
||||
mouseDown(element).
|
||||
mouseMove(element, {x: 0, y: -50}).
|
||||
mouseUp().
|
||||
perform();
|
||||
}).then( function () {
|
||||
// sleep to allow to refresh
|
||||
return driver.sleep(5 * 1000);
|
||||
}).then( function () {
|
||||
// update the sauce test name and quit
|
||||
var cb = function () {
|
||||
console.log("Finished!");
|
||||
driver.quit();
|
||||
};
|
||||
var bname = caps.browserName.toLowerCase();
|
||||
bname = bname.replace(/\s+/g, '');
|
||||
saucelabs.updateJob(driver.sessionID, {
|
||||
name: 'dwv-' + bname,
|
||||
build: '0.14.0',
|
||||
passed: true
|
||||
}, cb);
|
||||
});
|
||||
};
|
||||
|
||||
dwv.tests.sauceFirefox = function () {
|
||||
var caps = {
|
||||
browserName: 'Firefox',
|
||||
version: '44.0',
|
||||
platform: 'Linux'
|
||||
};
|
||||
dwv.tests.sauceTest(caps);
|
||||
};
|
||||
dwv.tests.sauceChrome = function () {
|
||||
var caps = {
|
||||
browserName: 'Chrome',
|
||||
version: '48.0',
|
||||
platform: 'Windows 10'
|
||||
};
|
||||
dwv.tests.sauceTest(caps);
|
||||
};
|
||||
dwv.tests.sauceSafari = function () {
|
||||
var caps = {
|
||||
browserName: 'Safari',
|
||||
version: '9.0',
|
||||
platform: 'OS X 10.11'
|
||||
};
|
||||
dwv.tests.sauceTest(caps);
|
||||
};
|
||||
dwv.tests.sauceIE = function () {
|
||||
var caps = {
|
||||
browserName: 'MicrosoftEdge',
|
||||
version: '20.10240',
|
||||
platform: 'Windows 10'
|
||||
};
|
||||
dwv.tests.sauceTest(caps);
|
||||
|
||||
var caps2 = {
|
||||
browserName: 'Internet Explorer',
|
||||
version: '11.0',
|
||||
platform: 'Windows 10'
|
||||
};
|
||||
dwv.tests.sauceTest(caps2);
|
||||
};
|
||||
|
||||
dwv.tests.sauceAndroid = function () {
|
||||
var caps = {
|
||||
browserName: 'Android',
|
||||
version: '5.1',
|
||||
platform: 'Linux'
|
||||
};
|
||||
dwv.tests.sauceTest(caps);
|
||||
};
|
||||
|
||||
// main launcher
|
||||
if (process.argv.length === 3 && process.argv[2] === "full") {
|
||||
dwv.tests.sauceFirefox();
|
||||
|
||||
//dwv.tests.sauceChrome();
|
||||
|
||||
// no mouse actions in safari...
|
||||
//dwv.tests.sauceSafari();
|
||||
|
||||
//dwv.tests.sauceIE();
|
||||
}
|
||||