|
|
@@ -732,31 +732,30 @@ export function InvertImage(currentViewportId: string): void {
|
|
|
export function setOriginalSize(currentViewportId: string) {
|
|
|
const viewport = cornerstone.getEnabledElementByViewportId(currentViewportId)
|
|
|
.viewport as cornerstone.StackViewport;
|
|
|
- // 1) 先正常 fit(或本来就是 fit 状态)
|
|
|
+
|
|
|
+ // 1) 先reset到fit状态
|
|
|
viewport.resetCamera();
|
|
|
|
|
|
- // 2) 计算“fit → 1:1”的放大倍数
|
|
|
- const { dimensions, spacing } = viewport.getImageData();
|
|
|
- console.log(`dimensions:${dimensions}, spacing:${spacing}`);
|
|
|
+ // 2) 计算像素级1:1需要的zoom(完全忽略spacing!)
|
|
|
+ const { dimensions } = viewport.getImageData();
|
|
|
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]}`
|
|
|
+ // fit状态下,图像缩放到canvas的比例
|
|
|
+ const fitScale = Math.min(
|
|
|
+ canvas.clientWidth / dimensions[0],
|
|
|
+ canvas.clientHeight / dimensions[1]
|
|
|
);
|
|
|
- // 3) 直接放大
|
|
|
- const zoom = viewport.getZoom();
|
|
|
- viewport.setZoom((zoom * 1) / zoomFactor);
|
|
|
+
|
|
|
+ // 要达到像素级1:1,需要的zoom = 1 / fitScale
|
|
|
+ const finalZoom = 1 / fitScale;
|
|
|
+
|
|
|
+ console.log(`[setOriginalSize] Pixel-perfect 1:1 zoom calculation:`);
|
|
|
+ console.log(` - Image dimensions: ${dimensions[0]}x${dimensions[1]}`);
|
|
|
+ console.log(` - Canvas size: ${canvas.clientWidth}x${canvas.clientHeight}`);
|
|
|
+ console.log(` - Fit scale: ${fitScale.toFixed(4)}`);
|
|
|
+ console.log(` - Final zoom (1:1): ${finalZoom.toFixed(4)}`);
|
|
|
+
|
|
|
+ viewport.setZoom(finalZoom);
|
|
|
viewport.render();
|
|
|
}
|
|
|
|