瀏覽代碼

feat(processing): add original size functionality to image processing module

sw 1 月之前
父節點
當前提交
b21c6fbf35
共有 1 個文件被更改,包括 35 次插入1 次删除
  1. 35 1
      src/pages/view/components/viewers/stack.image.viewer.tsx

+ 35 - 1
src/pages/view/components/viewers/stack.image.viewer.tsx

@@ -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');