gpt4 book ai didi

javascript - 是否可以在具有真实(真实世界)尺寸的 html Canvas 上绘制?

转载 作者:行者123 更新时间:2023-11-29 15:35:03 32 4
gpt4 key购买 nike

我正在尝试使用 HTML Canvas 表示 LED 矩阵的闪烁。对我来说重要的是,每个 LED 的尺寸和它们之间的距离代表它们在现实世界中的真实尺寸(例如,以毫米为单位)。

如果我为一台计算机找到一个“像素到 milimiter”倍增器(我为我的家用计算机做了实验),它几乎肯定会在其他计算机上失败(就像在工作中一样,使用不同的点距显示器) .

所以,我想知道是否有一种方法可以在 Canvas 上绘制物理事物并以与设备无关的方式获得它们的实际视觉尺寸。

我计划只使用台式电脑(可能是笔记本电脑),因此我的情况不需要移动设备。

最佳答案

据我所知,不可能从 HTML 页面中可靠地检测到显示器的物理尺寸。你只能知道它有多少像素。

如果这是一项硬性要求,我最好的建议是让用户以某种方式校准应用程序。或许您可以询问他们的显示器有多大,然后据此扩展您的应用。

这是一个如何完成的简单示例:

<html>
<head>
<style type="text/css">
</style>
<script type="text/javascript">

function recalculate()
{
var mmPerInch = 25.4;
var textBoxValue = document.getElementById("input_inchsize").value;
var monitorSizeInInches = parseInt(textBoxValue);
if(!monitorSizeInInches)
{
alert("Invalid monitor size");
return;
}

var screenDiagonalInPixels = Math.sqrt((screen.width * screen.width) + (screen.height * screen.height));
var screenPixelsPerMm = screenDiagonalInPixels / (monitorSizeInInches * mmPerInch);

draw100MmSquare(screenPixelsPerMm);
}

function draw100MmSquare(pixelsPerMm)
{
var canvas = document.getElementsByTagName("canvas")[0];
var context = canvas.getContext('2d');

context.fillStyle = "rgb(255,00,00)";
context.fillRect (0,0,100 * pixelsPerMm,100 * pixelsPerMm);
}

window.addEventListener("load", function() {
document.getElementById("button_calibrate").addEventListener("click", recalculate, false);
}, false);
</script>
</head>
<body>
<p>How big is your monitor, in inches?</p>
<input type="number" id="input_inchsize">
<button id="button_calibrate">Calibrate</button>
<p>After hitting "Calibrate", a box should appear below that measures 100mm to a side on your screen</p>
<canvas width="1000" height="1000">

</canvas>
</body>
</html>

这是一个 JSFiddle you can try.

当然,此方法假设屏幕上的像素是正方形的,但实际上可能不是。您可以要求用户输入他们显示器的宽度和高度,然后分别进行校准。但我认为用户更有可能知道以英寸为单位的对 Angular 线尺寸(至少在我所在的美国)。

关于javascript - 是否可以在具有真实(真实世界)尺寸的 html Canvas 上绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30268778/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com