工具實戰(zhàn):PanTool、ZoomTool與WwwcTool窗寬窗位全解析)
cornerstoneTools基礎(chǔ)工具實戰(zhàn)PanTool、ZoomTool與WwwcTool窗寬窗位全解析【免費下載鏈接】cornerstoneToolsA framework for tools built on top of Cornerstone.項目地址: https://gitcode.com/gh_mirrors/co/cornerstoneToolscornerstoneTools 是構(gòu)建在 Cornerstone 之上的工具框架A framework for tools built on top of Cornerstone為醫(yī)學(xué)影像瀏覽提供開箱即用的交互能力。本文帶你快速上手 cornerstoneTools 三大基礎(chǔ)工具PanTool 平移、ZoomTool 縮放以及最核心的 WwwcTool 窗寬窗位調(diào)節(jié)一篇講透用法與背后的實現(xiàn)邏輯。為什么是這三個 cornerstoneTools 工具打開任何醫(yī)學(xué)影像瀏覽器使用頻率最高的操作無非三類移動視野、縮放圖像、調(diào)節(jié)窗寬窗位。cornerstoneTools 恰好為這三類場景提供了標(biāo)準(zhǔn)實現(xiàn)工具功能支持交互? PanTool平移圖像鼠標(biāo)、觸摸 ZoomTool縮放圖像鼠標(biāo)、觸摸? WwwcTool調(diào)節(jié)窗寬/窗位WW/WC鼠標(biāo)、觸摸三者都繼承自統(tǒng)一的 BaseTool.js因此使用方式完全一致學(xué)會一個就學(xué)會了全部。三步上手cornerstoneTools 添加工具通用流程無論添加哪個工具都只需三步初始化、添加工具、設(shè)置激活模式。// 1. 初始化 cornerstoneTools cornerstoneTools.init(); // 2. 添加工具 cornerstoneTools.addTool(cornerstoneTools.PanTool); // 3. 激活工具1 表示鼠標(biāo)左鍵觸發(fā) cornerstoneTools.setToolActive(Pan, { mouseButtonMask: 1 });下圖展示了 cornerstoneTools 工具添加的典型代碼寫法LengthTool 示例其他工具同理 小貼士mouseButtonMask使用位掩碼比如同時允許左鍵和中鍵可以寫1 | 4。PanTool 平移實戰(zhàn)圖像移動為何如此順滑激活 PanTool 后按住鼠標(biāo)拖拽即可平移圖像。它的實現(xiàn)位于 PanTool.js核心只有兩步計算位移_getTranslation把鼠標(biāo)在頁面上的移動量除以當(dāng)前縮放比例換算成圖像坐標(biāo)系的平移量應(yīng)用平移_applyTranslation將平移量累加到viewport.translation再調(diào)用setViewport刷新畫面。值得一提的是PanTool 還會根據(jù)圖像的rowPixelSpacing/columnPixelSpacing像素間距做比例校正保證像素不是正方形時圖像在垂直和水平方向上的移動速度仍然一致不會出現(xiàn)拖快拖慢的違和感。ZoomTool 縮放實戰(zhàn)3 種縮放策略任選ZoomTool 源碼見 ZoomTool.js它內(nèi)置了3 種縮放策略strategy通過配置項defaultStrategy切換default默認(rèn)以鼠標(biāo)當(dāng)前指向的圖像點為中心縮放目標(biāo)位置在頁面上保持不動。這是最符合直覺的交互。translate縮放的同時自動平移視口——放大時朝鼠標(biāo)方向推近縮小時逐漸回到圖像中心觀感更流暢。zoomToCenter始終圍繞圖像中心縮放實現(xiàn)最簡單。常用配置項一覽cornerstoneTools.addTool(cornerstoneTools.ZoomTool, { configuration: { invert: false, // 是否反轉(zhuǎn)縮放方向 preventZoomOutsideImage: false, // 是否禁止縮放到圖像外 minScale: 0.25, // 最小縮放倍率 maxScale: 20.0 // 最大縮放倍率 } });?? 注意如果希望鼠標(biāo)滾輪直接縮放而不是拖拽應(yīng)使用配套的ZoomMouseWheelTool見 ZoomMouseWheelTool.js。WwwcTool 窗寬窗位實戰(zhàn)一次拖拽調(diào)節(jié) WW/WC窗寬Window Width決定對比度窗位Window Center決定亮度是 CT 閱片最核心的工具。WwwcTool 源碼見 WwwcTool.js激活后水平拖拽調(diào)窗寬、垂直拖拽調(diào)窗位向右拖 → 窗寬變大對比度降低向上拖 → 窗位變大圖像變亮一個容易忽略的細(xì)節(jié)動態(tài)范圍歸一化WwwcTool 采用的basicLevelingStrategy會把拖拽距離按圖像的動態(tài)范圍做了歸一化除以 1024 的映射。這意味著無論是 8 位還是 16 位圖像在屏幕上拖動相同的像素距離調(diào)節(jié)的百分比一致——手感完全相同。這是很多自研實現(xiàn)容易遺漏的體驗細(xì)節(jié)。此外configuration.orientation支持設(shè)置為 90讓水平/垂直拖拽的作用互換適配不同的 UI 布局習(xí)慣。進(jìn)階理解 cornerstoneTools 的四種工具狀態(tài)工具添加后并非只有開/關(guān)兩種狀態(tài)。在 ToolMode.js 中定義了四種模式狀態(tài)含義active激活可交互、可創(chuàng)建新標(biāo)注passive被動可操作已有數(shù)據(jù)不能新建enabled只讀僅渲染不響應(yīng)輸入disabled禁用不渲染、不響應(yīng)切換狀態(tài)用對應(yīng)的 API 即可例如cornerstoneTools.setToolPassive(Pan); // 切到被動 cornerstoneTools.setToolEnabled(Pan); // 切到只讀合理的狀態(tài)切換比如標(biāo)注工具平時passive、點擊按鈕后變active是構(gòu)建專業(yè)影像工作臺的關(guān)鍵。實戰(zhàn)小結(jié)快速避坑清單? 三個工具都支持鼠標(biāo)和觸摸移動端無需額外適配? ZoomTool 縮放倍率范圍通過minScale/maxScale控制避免過度放大? WwwcTool 拖拽方向與 WW/WC 的關(guān)系可用orientation調(diào)整? 多工具共存時同一時刻只有active狀態(tài)的工具響應(yīng)對應(yīng)的鼠標(biāo)按鍵? 工具注冊入口在 src/tools/index.js可按需引入掌握 cornerstoneTools 的 PanTool、ZoomTool 與 WwwcTool你就擁有了醫(yī)學(xué)影像瀏覽最基礎(chǔ)的完整交互閉環(huán)。想繼續(xù)深入可以結(jié)合 docs/latest/SUMMARY.md 中的官方文檔進(jìn)一步探索標(biāo)注工具LengthTool、AngleTool 等與分割工具BrushTool、Scissors 系列的實現(xiàn)?!久赓M下載鏈接】cornerstoneToolsA framework for tools built on top of Cornerstone.項目地址: https://gitcode.com/gh_mirrors/co/cornerstoneTools創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考