|
@@ -339,6 +339,35 @@ function InvertImage(): void {
|
|
|
console.log('Inverting Image');
|
|
|
}
|
|
|
|
|
|
+function setOriginalSize(viewport) {
|
|
|
+ // 1) 先正常 fit(或本来就是 fit 状态)
|
|
|
+ viewport.resetCamera();
|
|
|
+
|
|
|
+ // 2) 计算“fit → 1:1”的放大倍数
|
|
|
+ const { dimensions, spacing } = viewport.getImageData();
|
|
|
+ console.log(`dimensions:${dimensions}, spacing:${spacing}`);
|
|
|
+ const canvas = viewport.canvas;
|
|
|
+
|
|
|
+ // 水平方向 1:1 需要的倍率
|
|
|
+ const cssPixelsPerDicomPx = canvas.clientWidth / (dimensions[0] * spacing[0]);
|
|
|
+ // 垂直方向 1:1 需要的倍率
|
|
|
+ const cssPixelsPerDicomPy =
|
|
|
+ canvas.clientHeight / (dimensions[1] * spacing[1]);
|
|
|
+ // 取两者最小值,保证整张图不会被裁剪
|
|
|
+ const zoomFactor = Math.min(cssPixelsPerDicomPx, cssPixelsPerDicomPy);
|
|
|
+ console.log(`zoomFactor:${zoomFactor}`);
|
|
|
+ console.log(
|
|
|
+ `canvas.clientWidth:${canvas.clientWidth}, dimensions[0]:${dimensions[0]}, spacing[0]:${spacing[0]}`
|
|
|
+ );
|
|
|
+ console.log(
|
|
|
+ `canvas.clientHeight:${canvas.clientHeight}, dimensions[1]:${dimensions[1]}, spacing[1]:${spacing[1]}`
|
|
|
+ );
|
|
|
+ // 3) 直接放大
|
|
|
+ const zoom = viewport.getZoom();
|
|
|
+ viewport.setZoom((zoom * 1) / zoomFactor);
|
|
|
+ viewport.render();
|
|
|
+}
|
|
|
+
|
|
|
const StackViewer = ({
|
|
|
imageIndex = 0,
|
|
|
imageUrls = [],
|
|
@@ -561,10 +590,15 @@ const StackViewer = ({
|
|
|
console.log('Fitting Image Size');
|
|
|
break;
|
|
|
}
|
|
|
- case 'Original Size':
|
|
|
+ case 'Original Size': {
|
|
|
// Implement the logic to set the image to original size
|
|
|
console.log('Setting Image to Original Size');
|
|
|
+ setOriginalSize(
|
|
|
+ cornerstone.getEnabledElementByViewportId(currentViewportId)
|
|
|
+ .viewport as cornerstone.StackViewport
|
|
|
+ );
|
|
|
break;
|
|
|
+ }
|
|
|
case 'Zoom Image':
|
|
|
// Implement the logic to zoom the image
|
|
|
console.log('Zooming Image');
|