initiate
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
|
||||
var __assign = function() {
|
||||
__assign = Object.assign || function __assign(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
return __assign.apply(this, arguments);
|
||||
};
|
||||
|
||||
var _defaultOptions = {
|
||||
channel: 4,
|
||||
width: null,
|
||||
height: null,
|
||||
schema: 'base64://'
|
||||
};
|
||||
|
||||
var CornerstoneBase64ImageLoader = /** @class */ (function () {
|
||||
function CornerstoneBase64ImageLoader(cornerstone, options) {
|
||||
if (options === void 0) { options = _defaultOptions; }
|
||||
this._cornerstone = cornerstone;
|
||||
this._options = options;
|
||||
this._lastImageIdDrawn = null;
|
||||
this._UPNG = null;
|
||||
this._canvas = document.createElement('canvas');
|
||||
this.arrayBufferToImage = this.arrayBufferToImage.bind(this);
|
||||
this.getArrayBuffer = this.getArrayBuffer.bind(this);
|
||||
this.decodeBase64 = this.decodeBase64.bind(this);
|
||||
this.createImage = this.createImage.bind(this);
|
||||
this.imageLoader = this.imageLoader.bind(this);
|
||||
this.replaceImage = this.replaceImage.bind(this);
|
||||
}
|
||||
CornerstoneBase64ImageLoader.prototype.arrayBufferToImage = function (arrayBuffer) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var image = new Image();
|
||||
var arrayBufferView = new Uint8Array(arrayBuffer);
|
||||
var blob = new Blob([arrayBufferView]);
|
||||
var urlCreator = window.URL || window.webkitURL;
|
||||
var imageUrl = urlCreator.createObjectURL(blob);
|
||||
image.src = imageUrl;
|
||||
image.onload = function () {
|
||||
urlCreator.revokeObjectURL(imageUrl);
|
||||
resolve(image);
|
||||
};
|
||||
image.onerror = function (error) {
|
||||
urlCreator.revokeObjectURL(imageUrl);
|
||||
reject(error);
|
||||
};
|
||||
});
|
||||
};
|
||||
CornerstoneBase64ImageLoader.prototype.getArrayBuffer = function (str) {
|
||||
var buf = new ArrayBuffer(str.length);
|
||||
var bufView = new Uint8Array(buf);
|
||||
Array.from(str).map(function (ch, idx) {
|
||||
bufView[idx] = ch.charCodeAt(0);
|
||||
return ch;
|
||||
});
|
||||
return bufView;
|
||||
};
|
||||
CornerstoneBase64ImageLoader.prototype.decodeBase64 = function (base64PixelData) {
|
||||
var pixelDataAsString = window.atob(base64PixelData);
|
||||
var arrayBuffer = this.getArrayBuffer(pixelDataAsString);
|
||||
return arrayBuffer;
|
||||
};
|
||||
CornerstoneBase64ImageLoader.prototype.createImage = function (image, imageId) {
|
||||
var _this = this;
|
||||
var rows = image.naturalHeight;
|
||||
var columns = image.naturalWidth;
|
||||
var getImageData = function () {
|
||||
var context;
|
||||
if (_this._lastImageIdDrawn === imageId) {
|
||||
context = _this._canvas.getContext('2d');
|
||||
}
|
||||
else {
|
||||
_this._canvas.height = image.naturalHeight;
|
||||
_this._canvas.width = image.naturalWidth;
|
||||
context = _this._canvas.getContext('2d');
|
||||
context.drawImage(image, 0, 0);
|
||||
_this._lastImageIdDrawn = imageId;
|
||||
}
|
||||
return context.getImageData(0, 0, image.naturalWidth, image.naturalHeight);
|
||||
};
|
||||
var getPixelData = function () {
|
||||
var imageData = getImageData();
|
||||
return imageData.data;
|
||||
};
|
||||
var getCanvas = function () {
|
||||
if (_this._lastImageIdDrawn === imageId) {
|
||||
return _this._canvas;
|
||||
}
|
||||
_this._canvas.height = image.naturalHeight;
|
||||
_this._canvas.width = image.naturalWidth;
|
||||
var context = _this._canvas.getContext('2d');
|
||||
context.drawImage(image, 0, 0);
|
||||
_this._lastImageIdDrawn = imageId;
|
||||
return _this._canvas;
|
||||
};
|
||||
var setLastImageIdDrawn = function (nextLastImageIdDrawn) {
|
||||
if (nextLastImageIdDrawn === void 0) { nextLastImageIdDrawn = null; }
|
||||
_this._lastImageIdDrawn = nextLastImageIdDrawn;
|
||||
};
|
||||
return {
|
||||
imageId: imageId,
|
||||
minPixelValue: 0,
|
||||
maxPixelValue: 255,
|
||||
slope: 1,
|
||||
intercept: 0,
|
||||
windowCenter: 128,
|
||||
windowWidth: 255,
|
||||
render: this.cornerstone.renderWebImage,
|
||||
getPixelData: getPixelData,
|
||||
getCanvas: getCanvas,
|
||||
getImage: function () { return image; },
|
||||
setLastImageIdDrawn: setLastImageIdDrawn,
|
||||
rows: rows,
|
||||
columns: columns,
|
||||
height: rows,
|
||||
width: columns,
|
||||
color: true,
|
||||
rgba: false,
|
||||
columnPixelSpacing: null,
|
||||
rowPixelSpacing: null,
|
||||
invert: false,
|
||||
sizeInBytes: rows * columns * this._options.channel
|
||||
};
|
||||
};
|
||||
CornerstoneBase64ImageLoader.prototype.imageLoader = function (imageId) {
|
||||
var _this = this;
|
||||
// const schema = imageId.split('://')[0]
|
||||
var base64PixelData = imageId.replace(this._options.schema, '');
|
||||
var arrayBuffer;
|
||||
if (this._options.width && this._options.height && this._UPNG) {
|
||||
var columns = this._options.width;
|
||||
var rows = this._options.height;
|
||||
arrayBuffer = new Uint8Array(columns * rows * this._options.channel);
|
||||
arrayBuffer = this._UPNG.encode([arrayBuffer.buffer], columns, rows, 0);
|
||||
}
|
||||
else {
|
||||
arrayBuffer = this.decodeBase64(base64PixelData);
|
||||
}
|
||||
var imagePromise = this.arrayBufferToImage(arrayBuffer);
|
||||
var promise = new Promise(function (resolve, reject) {
|
||||
imagePromise.then(function (image) {
|
||||
var imageObject = _this.createImage(image, imageId);
|
||||
resolve(imageObject);
|
||||
}, reject);
|
||||
});
|
||||
return {
|
||||
promise: promise
|
||||
};
|
||||
};
|
||||
CornerstoneBase64ImageLoader.prototype.replaceImage = function (layer, arrayBuffer) {
|
||||
var _this = this;
|
||||
if (!this._UPNG) {
|
||||
return null;
|
||||
}
|
||||
var png = this._UPNG.encode([arrayBuffer.buffer], layer.image.columns, layer.image.rows, 0);
|
||||
var imagePromise = this.arrayBufferToImage(png);
|
||||
return imagePromise.then(function (image) {
|
||||
layer.image = _this.createImage(image, layer.image.imageId);
|
||||
});
|
||||
};
|
||||
Object.defineProperty(CornerstoneBase64ImageLoader.prototype, "options", {
|
||||
get: function () {
|
||||
return __assign({}, this._options);
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
Object.defineProperty(CornerstoneBase64ImageLoader.prototype, "cornerstone", {
|
||||
get: function () {
|
||||
return this._cornerstone;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
Object.defineProperty(CornerstoneBase64ImageLoader.prototype, "UPNG", {
|
||||
get: function () {
|
||||
return this._UPNG;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
CornerstoneBase64ImageLoader.prototype.setUPNG = function (UPNG) {
|
||||
this._UPNG = UPNG;
|
||||
};
|
||||
CornerstoneBase64ImageLoader.prototype.registerLoaders = function () {
|
||||
this.cornerstone.registerImageLoader('base64', this.imageLoader);
|
||||
};
|
||||
return CornerstoneBase64ImageLoader;
|
||||
}());
|
||||
|
||||
var _imageLoader;
|
||||
var _options = __assign({}, _defaultOptions);
|
||||
var cornerstoneBase64ImageLoader = {
|
||||
external: {
|
||||
set cornerstone(cs) {
|
||||
_imageLoader = new CornerstoneBase64ImageLoader(cs, _options);
|
||||
_imageLoader.registerLoaders();
|
||||
},
|
||||
get cornerstone() {
|
||||
return _imageLoader.cornerstone;
|
||||
},
|
||||
get UPNG() {
|
||||
return _imageLoader.UPNG;
|
||||
},
|
||||
set UPNG(_UPNG) {
|
||||
_imageLoader.setUPNG(_UPNG);
|
||||
}
|
||||
},
|
||||
initOptions: function () {
|
||||
_options = __assign({}, _defaultOptions);
|
||||
},
|
||||
set options(newOptions) {
|
||||
_options = __assign({}, _options, newOptions);
|
||||
},
|
||||
get options() {
|
||||
return __assign({}, _options);
|
||||
},
|
||||
get imageLoader() {
|
||||
return _imageLoader;
|
||||
}
|
||||
};
|
||||
|
||||
export default cornerstoneBase64ImageLoader;
|
||||
//# sourceMappingURL=cornerstone-base64-image-loader.es5.js.map
|
||||
Reference in New Issue
Block a user