如何在鼠标移动事件时更改图像的窗口中心和宽度
How to change window center and width of an image on mouse move event
我有一个DICOM
图像,我想在图像上应用 W/L。正常情况下,当我将鼠标拖到图像上时,我正在尝试更改图像的颜色。但是当我尝试更改它时,它变得完全白色。
这就是我正在做的事情。
这只是代码的一部分。
var imageData = ctx.getImageData(0, 0, img.width, img.height);
var data = imageData.data;
var pixels = imageData.data,
len = pixels.length;
var a = 256 * slope / window_width,
b = 256 * ((intercept - window_level) / window_width);
for (i = 0; i < len; i += 4) {
//pixval = a * (pixels[i] * 256 + pixels[i + 1]) + b;
//pixels[i] = pixels[i + 1] = pixels[i + 2] = pixval
if (pixels[i + 3] == 0)
continue;
var pixelIndex = i;
var red = pixels[pixelIndex]; // red color
var green = pixels[pixelIndex + 1]; // green color
var blue = pixels[pixelIndex + 2]; // blue color
var alpha = pixels[pixelIndex + 3];
var pixelValue = a * (red * 256 + green + b);
pixels[i] = pixels[i + 1] = pixels[i + 2] = pixelValue;
pixels[i + 3] = 0xff;
//console.log(pixelValue == pixval);
}
这是带有完整代码的 JSFIDDLE。
主要问题是您在绘制图像数据时正在更改图像数据。 您需要存储图像数据的原始版本,然后在绘制时动态"应用"窗口级别。 否则,您只是将更改相互叠加。
尝试制作两个画布对象:一个(屏幕外)用于加载和存储图像数据,另一个用于绘制图像数据。 对代码进行这个相对较小的更改,它似乎工作正常。
您的起始值可能还有其他问题 - 我认为您可能缺少重新缩放斜率和截距 - 但修复第一个问题应该使一切更容易弄清楚。
这是jsfiddle:https://jsfiddle.net/8ne1pnaj/5/
var imageData = ctxData.getImageData(0, 0, img.width, img.height);
// ...
ctx.putImageData(imageData, 0, 0)
ctxData
是原始数据。 ctx
是绘图上下文。
相关文章:
- Javascript排序的图像弹出窗口..可以't单独弹出
- 使用JavaScript根据窗口/视口的高度动态调整图像大小
- Javascript:为页面上的所有图像制作模式弹出窗口
- 如何将 html5 画布另存为窗口 8 Metro 应用程序中的图像文件
- 若图像较大,则在窗口中调整Lightbox容器
- 如何在提交后关闭颜色框窗口,并刷新父页面上的图像
- 如何在弹出窗口中居中显示图像
- 接受从另一个浏览器窗口拖放图像
- 打开新窗口进行打印时不显示 JavaScript 图像
- 根据窗口大小调整 HTML 中 SVG 图像的大小
- TinyMCE 对话框.css未在图像弹出窗口中加载,会抛出 404
- 单击按钮并将其下载为图像格式时,如何使用引导模式弹出窗口显示D3图表
- 如何在鼠标移动事件时更改图像的窗口中心和宽度
- 图像宽度上的转换不适用于窗口滚动
- 在新窗口中打开时,未在画布中绘制图像
- 使用Javascript单击选择按钮时,在另一个窗口上显示图像
- nodejsjavascripts窗口/图像,而不使用html5画布
- Javascript窗口/图像加载时间 - 这应该不起作用,但它确实有效
- 谷歌地图API类型错误窗口.图像不是函数
- 弹出窗口图像链接和css文件