- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
最近我开始接触 HTML canvas
绘图和视网膜支持它。没有在 canvas
上绘制进一步的配置线-元素在视网膜显示器上看起来有点模糊。
我知道视网膜显示器的像素是它的四倍,因此默认情况下必须填充一些设备像素(否则图片将只有预期大小的一半)。
示例:
绘制 HTML canvas
与 width: 50px
和 height: 50px
.
<canvas height="50px" width="50px">
正常 屏幕上的浏览器只是绘制它(50*50 像素)。视网膜显示器上的浏览器接收 50x50px Canvas ,但由于它是视网膜 50*50 设备像素会比预期的要小。因此浏览器在视网膜上绘制 100*100 像素。
Canvas 上的清晰线条(黑色/白色单像素线条)现在变得有点模糊,因为浏览器必须填充附近的像素并使用附近的周围环境 - 一些像素变成灰色。
如何解决:
这段代码应该可以解决问题:
// Returns: 1 on 'normal' screens, 2 on retina displays
var PIXEL_RATIO = (function () {
var ctx = document.createElement("canvas").getContext("2d"),
dpr = window.devicePixelRatio || 1,
bsr = ctx.webkitBackingStorePixelRatio ||
ctx.mozBackingStorePixelRatio ||
ctx.msBackingStorePixelRatio ||
ctx.oBackingStorePixelRatio ||
ctx.backingStorePixelRatio || 1;
return dpr / bsr;
})();
function makeCanvasHiPPI(canvas) {
canvas.style.width = canvas.width + "px";
canvas.style.height = canvas.height + "px";
canvas.width *= PIXEL_RATIO;
canvas.height *= PIXEL_RATIO;
var context = canvas.getContext('2d');
context.scale(PIXEL_RATIO, PIXEL_RATIO)
}
我认为代码的作用:
通过在 Canvas 上使用这段代码,浏览器被告知使用 50*50px(即 canvas.style
设置的值),如上例所示 - 在普通屏幕上为 50*50px,在视网膜上为 100*100px。 但是它在内部将 Canvas 处理为两倍大小的 Canvas (至少在视网膜设备上),因此能够绘制通常由浏览器填充的像素。
棘手的部分(我不太明白):
缩放。双'canvas.width'?很好,现在我们可以写入更多像素 - 更多信息。好的。
但现在它被缩放了,因此我们不会真的写入额外的像素(只有 0 - 50 会出现在 Canvas 上)——这次谁来填充设备像素?我在没有缩放的情况下尝试了它,它允许我在 0 - 100 范围内的视网膜(~1 设备像素)上绘制更细的线条——尽管这些像素仍然有点模糊,缩放后的线条更粗,但非常清晰。模糊仅在大量缩放时可见。
专业规模:
Pro 无比例:
canvas.width
真正代表我可以写入的像素。例如:context.moveTo(0, context.canvas.height/2);
context.lineTo(context.canvas.width, context.canvas.height/2);
有效。这不适用于缩放,因为 context.canvas.width
返回未缩放的值。
我的问题:
context.canvas.width / PIXEL_RATIO
吗? (缩放)?这确实解决了问题,但在代码中看起来不太好(OCD 开始)。我会继续这样做,直到我得到更好的东西。最佳答案
这条线在没有缩放的情况下可能看起来很清晰,因为 Canvas 在您的情况下具有高 dpi 后备存储:http://www.html5rocks.com/en/tutorials/canvas/hidpi/
我不明白有关误导性返回值的问题。一切似乎都非常一致。您是否尝试过在“未缩放”的情况下将线宽设置为 0.5?
这实际上取决于您的用例。如果“未缩放”足够好,那就去吧。否则,如果您需要为您的应用程序控制 DPI,请选择高 DPI 方法。
关于javascript - 了解 HTML Retina Canvas 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35820750/
我没有 Retina 设备,但我一直在网上看到这个讨论。我已阅读有关为配备 Retina 显示屏的设备提供 2 倍图像尺寸的解决方案,以确保位图不会变得模糊。 但是,我不明白这是如何工作的。首先,正如
根据我的研究,我了解到您想将图像的大小加倍以使其在视网膜显示器上看起来更清晰。 对于尺寸为500X500 px的图片,我想将它们存储为1000X1000。 如有错误请指正 现在的问题是,通过使用 Go
目前,我的应用程序中的所有 UIImageView 都设置为 scaleToFill 模式,仅使用一个视网膜图像而不设置任何非视网膜图像。我想在非视网膜显示器上,额外的分辨率将自行丢失。 问题:这种方
我有以下媒体查询,以选择 iPad 视网膜和更小的显示器。 @media only screen and (min-device-width : 768px) and (max-device-widt
在深入研究我的下一个项目之前,我正在寻求建议。我想支持 iOS 现在支持的所有各种分辨率(视网膜、非视网膜 iPhone 和所有 3 款 iPad)。 开发人员完成这项工作最常用的方法是什么?我看到过
有没有一种方法可以在 Windows 上模拟 Retina 显示屏来测试 HiDPI 显示屏(例如 Retina)的网站? 我在标准的 24"1920x1080 显示器上运行 Windows。昨晚我在
我遇到了麻烦。我正在使用带有 UIKit 的 cocos2d。 Cocos2d版本为1.0.1。 我已经按照文档中的建议将平铺 map 添加到项目中: http://www.cocos2d-iphon
有人可以告诉我 iPhone/iPad 和 iPhone(Retina)/iPad(Retina) 的理想图像分辨率是多少吗?我从苹果网站和维基百科上获取了这些测量值。见下文: 普通 iPhone 4
这是我第一次开发应用程序。 根据 Apple iOS 人机界面指南,UIBarButtonItem 图像尺寸约为 20 x 20 和约 40 x 40。 我知道20x20是针对iPhone4之前版本的
我正在使用 Assets 目录来管理我应用程序的所有图像,并且我“正常”加载这些图像 [UIImage imageNamed:@"my-image"]; 我想做的是从 Assets 目录加载图像的非视
这可能是一个小众问题,实际上更像是一个小问题,但是: 我可以让 Xcode 自动构建到 iPhone Retina 模拟器和 iPad 非 Retina 模拟器吗? 即使使用 27"iMac,Reti
我有一个问题可能听起来很奇怪,但作为一个新手,我猜 no question 是一个愚蠢的问题...... 我是否需要为所有四台设备使用单独的 Storyboard? 现在我有两个 Storyboard
我是 opengl es 2.0 开发的新手。我从屏幕截图中获得的 UIImage 在非视网膜设备(iphone 4 和 ipad)上看起来不错,但是当我从视网膜设备上获得屏幕截图时,它似乎放大了。这
我正在使用 XCode 4.5 版。对于每个 Xib,我可以选择大小为“Retina 3.5 全屏”或“Retina 4 全屏”。 我的疑问是:如果我选择 Retina 4 全屏,我的应用程序能否在旧
我正在使用最新的 xCode 5,我正在尝试为我的通用应用程序设置启动图像。当我选择 Launch images for iPhone 时,一切正常。但是现在,当我尝试为 iPad 选择启动图像时,x
今天,我更新了Xcode4.5,并在我的电脑上安装了Xcode4.3,安装后我打开Xcode4.5,当我想运行我的应用程序时,只有IOS Device,iPad 6.0模拟器和 iPhone 6.0
我正在使用模拟器为 iPhone 5 准备我的应用程序,我发现了一个奇怪的问题,在我的一个 View 中,我的几个按钮在 iPhone(Retina 4 英寸) 模拟器,但在 iPhone(Retin
我们的目标是模拟开发人员可以使用原生 iOS 应用执行的操作:即,使用基于单位的单一布局来适应 Retina 显示屏 (640x960) 和非 Retina 显示屏 (320x480)。 所有 iOS
这是我第一次提问,因为我是新来的。非常感谢您的回答!感谢您抽出时间。 使用Xcode 5.1.1 这是我的问题,在模拟器或实际设备上测试时,结果不同。请参阅食物图像上所附的屏幕截图。当我在模拟器iPh
我更新了一个旧应用程序,修复了一个小错误。该应用程序是使用 Xcode 5.1 编译的。(无法使用 Assets 目录或添加 iPhone 6 和 6 Plus 图像。)但是,当我尝试提交它进行审核时
我是一名优秀的程序员,十分优秀!