point pixel DPI

探讨了HTML页面在不同显示器上预览与实际打印尺寸的差异,解析了px、pt及DPI之间的换算关系,并通过调整系统DPI实现预览与打印尺寸的一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直没弄清过这几个跟分辨率有关的概念,直到我的膝盖中了一箭……

因为最近要用html制作要打印的表格,开始纠结改用px还是pt作单位。最后选择了pt,因为做这玩意就是用来打印的,1英寸72pt,绝对单位最清楚。

可是屏幕显示的预览页边距和实际打印的不一样,问题在于,宽度究竟应该是几何?

A4纸,宽度8.27英寸,595pt。预览界面肯定不能用595px,px往往不等于pt。那他们之间的比例是多少?已知windows的DPI(暂以为和打印的DPI是一个概念)是96,所以1px等于0.75pt。所以界面宽度应该是793px。但是测试结果表明还是不对。由于平时用多显示器,知道不同尺寸显示器的像素物理尺寸是不同的,所以屏幕显示的尺寸对应物理尺寸应该还有一个系数。计算14英寸(水平分辨率1366)的宽度为12.2英寸,对应DPI应该是112。显然windows的96与其不吻合。看到一篇文章,说系统设置应该选取和显示器的实际DPI最接近的值,但是系统给的几个选项不一定是相等的,只是比较接近。于是手动调整系统DPI为112,此时预览界面终于和A4纸一样宽了,QPringPreviewDialog显示比例100%时也和纸张等宽。但是这个显示器DPI设置让我很不适应,又改回96。此时,自制的预览界面仍和A4纸等宽,但QPringPreviewDialog调成100%时不和纸张等宽了,要调成117%才行。112/96=117。看来windows的DPI应该从缩放比例的角度来理解,而不是绝对尺寸。只有当设置的DPI等于面板的实际DPI时,屏幕才能完全反映文档尺寸,否则很多情况下都要通过缩放来解决。

另外,明明都是A4纸的宽度,为什么QWebView显示的比QPringPreviewDialog要大一些?算了,反正打印出来是对的就行了

本文含有一些对事实的描述,但并未形成明确的结论,因为对这些算术问题实在是懒得纠缠……欢迎有兴趣深究的朋友留言指教大笑

### 解决 Auto.js 中 Pixel 颜色显示不正确的问题 在处理 Auto.js 中的颜色识别问题时,可能遇到颜色读取不准的情况。这通常由几个因素引起: #### 1. 屏幕缩放比例的影响 当设备设置了不同的缩放级别时,可能会导致获取到的像素颜色与实际不符。为了确保准确性,在执行任何操作之前应先调整屏幕缩放到默认值。 ```javascript // 设置屏幕缩放到100% app.setScreenScale(1); ``` #### 2. 获取真实分辨率下的坐标位置 由于不同设备具有不同的物理分辨率和逻辑分辨率(DPI),因此需要转换成真实的屏幕坐标来精确匹配目标区域内的颜色[^1]。 ```javascript function getRealCoordinates(x, y){ var scale = device.getDisplayInfo().density; return { x: Math.floor(x * scale), y: Math.floor(y * scale) }; } ``` #### 3. 使用更精准的方法检测颜色 为了避免因环境光等因素造成的误差,建议采用多次采样平均的方式提高判断精度;也可以通过增加容差范围使判定更加灵活可靠。 ```javascript function getColorAtPoint(x,y,tolerance=5){ let colorArray=[]; for(let i=-tolerance;j<=tolerance;j++){ try{ const pointColor=image.pixel(getRealCoordinates(x+i,y+j)); if(pointColor!=null&&pointColor!==-1){ colorArray.push([parseInt((pointColor&0xff0000)>>16), parseInt((pointColor&0x00ff00)>>8), parseInt(pointColor&0x0000ff)]); } }catch(e){} } } function averageRGB(colors){ let rSum=gSum=bSum=count=0; colors.forEach(([r,g,b])=>{ rSum+=r;gSum+=g;bSum+=b;count++; }); return `rgb(${Math.round(rSum/count)},${Math.round(gSum/count)},${Math.round(bSum/count)})`; } return averageRGB(colorArray); } ``` 上述方法可以有效提升Auto.js脚本中对于特定像素点颜色识别的能力,减少误判情况的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值