- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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>
当然,此方法假设屏幕上的像素是正方形的,但实际上可能不是。您可以要求用户输入他们显示器的宽度和高度,然后分别进行校准。但我认为用户更有可能知道以英寸为单位的对 Angular 线尺寸(至少在我所在的美国)。
关于javascript - 是否可以在具有真实(真实世界)尺寸的 html Canvas 上绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30268778/
在 unsafeDupablePerformIO 的定义( source 、 docs )中,我找到了对唯一的 realWorld# 的引用。所以我想知道所有这些以 # 结尾的函数或值是在哪里定义的?
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭 5 年前。 Improve
在现代 v8 Javascript 中,String.prototype.slice 的算法复杂度是多少? 明确地说,我正在寻找真实世界的实用数据或经验法则。 快速测试 我试图通过在最新的 Chrom
我正在阅读文章 Double-checked locking and the Singleton pattern ,关于如何破坏双重检查锁定,以及 Stack Overflow 上的一些相关问题。 我
Goerzen 等人 present CSV 文件解析器的简单实现,用于向 Real World Haskell 的读者介绍 Parsec 解析组合器库。 这是他们的简洁程序的一个版本: import
ResultBox1->Text = (sin(TextBox1->Text)) * TextBox2->Text 这就是我想要的工作,但我正在处理字符串 我似乎无法转换字符串,进行触发,然后转换回字
我想验证给定的字符串是 URL。匹配文本中的 URL 也很好,但不是必需的。我已经搜索并进行了实验,但到目前为止,我还没有找到可以满足这些要求的东西: 不得接受在被视为链接时会带来安全风险的字符串。例
在第3章,有一个例子叫“MySecond.hs”,我真的不明白是这样的代码: safeSecond :: [a] -> Maybe a 它总是在文件的第一行,删除它不会造成任何麻烦。任何人都可以启发我
我正在尝试使用 HTML Canvas 表示 LED 矩阵的闪烁。对我来说重要的是,每个 LED 的尺寸和它们之间的距离代表它们在现实世界中的真实尺寸(例如,以毫米为单位)。 如果我为一台计算机找到一
根据another question ,现实世界 Haskell 的部分内容现已过时。我只学习了第 5 章,但在将一个简单示例编译为可执行二进制文件时遇到问题。 给出了两个模块: module Sim
我正在尝试通过 mentioned chapter 。在阅读和思考练习时,我遇到了一些困难。 首先,fill 和 nest 函数的签名不应该是 :: Int -> Doc -> String 吗?我认
第 3 章定义了以下递归类型来表示二叉树: data Tree a = Node a (Tree a) (Tree a) | Empty deriv
这个问题不是重复的 A question with the same title already exists ,但 answer在我看来,只部分解决了它,我也对它没有解决的问题感兴趣。 前言 真实世
我是一名优秀的程序员,十分优秀!