From 696b728c78a6a3ce10538c17cfa4dd87823b6c19 Mon Sep 17 00:00:00 2001 From: ericwyuan Date: Thu, 10 Sep 2026 11:37:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E7=B4=A7=E5=B8=B8=E4=BA=AE=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=EF=BC=9A=E5=8E=BB=E6=8E=89=E8=BF=9B=E5=BA=A6=E7=8E=AF?= =?UTF-8?q?=EF=BC=8C=E6=97=B6=E9=97=B4=E6=97=A5=E6=9C=9F=E5=8E=8B=E6=9A=97?= =?UTF-8?q?=E5=88=B0=2038%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按要求把常亮再砍一档。常亮下现在不画:整条日期带底色、整个进度环、 四个数据位与电池;保留的时间、冒号、日期由 55% 压暗到 38%。 实测(fenix847mm,取表盘内区): 点亮像素数 平均亮度(功耗代理) 普通模式 27.6% 14.1% 常亮(改前) 10.4% 3.0% 常亮(改后) 9.7% 2.5% 两个口径的差别值得记一笔:「点亮像素数」把每个抗锯齿边缘像素都算成亮的, 对大号数字表盘天然不友好 —— 时间数字压到 38% 后白色仍有 ~97 亮度,照样计入。 AMOLED 的实际功耗更接近各子像素亮度之和,也就是「平均亮度」那一列。 两个口径现在都留了余量,38% 下时间和日期在模拟器里依然清晰可读。 LICENSE、UserProfile 的 try 保护、CHANGELOG 与版本号 1.1.0 已在上一个提交 22340b0 完成,本次只动常亮相关部分与对应文档。 Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 5 +++++ README.md | 6 ++--- source/Fenix8V3View.mc | 50 ++++++++++-------------------------------- 3 files changed, 20 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3197ce7..f9fd58f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ Approach S50/S70、Descent G2/Mk3、D2 系列、Instinct 3 AMOLED、FR255S/265S/ 新增两档图标尺寸(218px、360px)。218px 上设计稿的天气图标只有 14×14, 太阳与云之间的暗缝不足一个像素,会糊成一块 —— 该尺寸改用专画的简化标记。 +**常亮模式收紧** + +砍掉整个进度环,时间/日期由 55% 压暗到 38%。实测点亮像素数 10.4% → 9.7%, +平均亮度 3.0% → 2.5%(普通模式分别是 27.6% / 14.1%)。 + **其它** - 补 LICENSE(MIT,仅覆盖代码;`design/` 下的设计稿版权归第三方,见文件内说明) diff --git a/README.md b/README.md index 6671182..a62d84a 100644 --- a/README.md +++ b/README.md @@ -295,11 +295,11 @@ AMOLED 机型在常亮模式下必须压低点亮像素,否则既费电又有 | | 点亮像素数 | 平均亮度(功耗代理) | |---|---|---| | 普通模式 | 27.6% | 14.1% | -| 常亮模式 | 10.4% | **2.9%** | +| 常亮模式 | **9.7%** | **2.5%** | -两个口径差别很大:「点亮像素数」把每个抗锯齿边缘像素都算成亮的,和实际功耗对不上。曾试过连进度环也砍掉,平均亮度只从 3.01% 降到 2.91% —— 0.1 个百分点换掉一个可见特征不划算,所以环保留。 +常亮下砍掉的东西:整条日期带底色、**整个进度环**、四个数据位与电池;保留的时间、冒号、日期压暗到 38%。 -模拟器可用 `Settings → Display Mode` 切换验证。 +两个口径要分清:「点亮像素数」把每个抗锯齿边缘像素都算成亮的,对大号数字表盘天然不友好;AMOLED 的功耗更接近各子像素亮度之和,也就是表里的「平均亮度」。本实现两个口径都留了余量。 --- diff --git a/source/Fenix8V3View.mc b/source/Fenix8V3View.mc index eb041f2..f89cc56 100644 --- a/source/Fenix8V3View.mc +++ b/source/Fenix8V3View.mc @@ -280,51 +280,25 @@ class Fenix8V3View extends WatchUi.WatchFace { // ------------------------------- 常亮模式 ------------------------------ // 低功耗画面。相比正常画面砍掉的东西: // - 日期带底色(整条亮橙色横幅是最费电的元素,直接不画) - // - 未点亮的刻度(只画有数据的那部分,且压暗到 45%) + // - **整个进度环** + // - 时间、冒号、日期压暗到 38% // - // 关于点亮量:实测普通模式的平均亮度(AMOLED 功耗的合理代理)是 14.1%, - // 常亮是 2.9%,约 1/5。曾经试过连进度环也砍掉,平均亮度只从 3.01% 降到 - // 2.91% —— 0.1 个百分点换掉一个可见特征,不划算,所以环留着。 - // (常按「点亮像素数」算会得到 10% 左右,但那个口径把每个抗锯齿边缘像素 - // 都算成「亮」,跟实际功耗对不上。) + // 度量口径要注意:「点亮像素数」把每个抗锯齿边缘像素都算成亮的,和实际 + // 功耗对不上;AMOLED 功耗更接近各子像素亮度之和(平均亮度)。 + // 本实现两个口径都留了余量,实测数字见 README 的常亮小节。 // - 四个数据位、电池(全部隐藏) // 保留的时间和日期压暗到 55%。 // // 另外整个画面按分钟在 ±4 像素内游走,避免同一个像素长期点亮导致烧屏。 + // pTR/pTL/pBR/pBL 现在用不上(常亮下不画环),保留形参是为了以后要把环 + // 加回来时不必改调用点。 function drawAmbient(dc as Dc, ti as Number, ds as System.DeviceSettings?, pTR as Float, pTL as Float, pBR as Float, pBL as Float) as Void { var g = Gregorian.info(Time.now(), Time.FORMAT_SHORT); var ox = ((g.min % 5) - 2) * 2.0 / Layout.scale; // ±4 设备像素,换算回设计像素 var oy = ((g.min / 5) % 5 - 2) * 2.0 / Layout.scale; - var top = Themes.RINGTOP[ti] as Array; - var bot = Themes.RINGBOTTOM[ti] as Array; - var litTR = (pTR * Layout.TOP_N).toNumber(); - var litTL = (pTL * Layout.TOP_N).toNumber(); - var litBR = (pBR * Layout.BOT_N).toNumber(); - var litBL = (pBL * Layout.BOT_N).toNumber(); - for (var i = 0; i < Layout.TOP_N; i++) { - var a = Layout.TOP_PH + Layout.TOP_PITCH * i; - if (i >= Layout.TOP_N - litTR) { - dc.setColor(dim(top[i], 0.45), Graphics.COLOR_TRANSPARENT); - tick(dc, a, Layout.TOP_HW); - } - if (i >= Layout.TOP_N - litTL) { - dc.setColor(dim(top[i], 0.45), Graphics.COLOR_TRANSPARENT); - tick(dc, -a, Layout.TOP_HW); - } - } - for (var i = 0; i < Layout.BOT_N; i++) { - var a = Layout.BOT_PH + Layout.BOT_PITCH * i; - if (i < litBL) { - dc.setColor(dim(bot[i], 0.45), Graphics.COLOR_TRANSPARENT); - tick(dc, 180.0 + a, Layout.BOT_HW); - } - if (i < litBR) { - dc.setColor(dim(bot[i], 0.45), Graphics.COLOR_TRANSPARENT); - tick(dc, 180.0 - a, Layout.BOT_HW); - } - } + // 进度环在常亮下不画 —— 它是点亮像素数的大头。 var h = g.hour; if (ds == null || !ds.is24Hour) { @@ -334,17 +308,17 @@ class Fenix8V3View extends WatchUi.WatchFace { var mins = Themes.MINUTES[ti] as Array; Layout.text(dc, Layout.HOURS_R + ox, Layout.TIME_CY + oy, Layout.fontTime, h.format("%d"), Graphics.TEXT_JUSTIFY_RIGHT, - dim(hours[hours.size() / 2], 0.55)); + dim(hours[hours.size() / 2], 0.38)); Layout.text(dc, Layout.MINUTES_L + ox, Layout.TIME_CY + oy, Layout.fontTime, g.min.format("%02d"), Graphics.TEXT_JUSTIFY_LEFT, - dim(mins[mins.size() / 2], 0.55)); - dc.setColor(dim(Themes.COLON[ti] as Number, 0.55), Graphics.COLOR_TRANSPARENT); + dim(mins[mins.size() / 2], 0.38)); + dc.setColor(dim(Themes.COLON[ti] as Number, 0.38), Graphics.COLOR_TRANSPARENT); dc.fillRectangle(Layout.px(Layout.COLON_X + ox), Layout.px(Layout.COLON_Y1 + oy), Layout.px(Layout.COLON_W), Layout.px(Layout.COLON_H)); dc.fillRectangle(Layout.px(Layout.COLON_X + ox), Layout.px(Layout.COLON_Y2 + oy), Layout.px(Layout.COLON_W), Layout.px(Layout.COLON_H)); - var band = dim(Themes.ACCENT[ti] as Number, 0.55); + var band = dim(Themes.ACCENT[ti] as Number, 0.38); Layout.text(dc, Layout.DOW_CX + ox, Layout.BAND_CY + oy, Layout.fontBand, Fields.dow(g), Graphics.TEXT_JUSTIFY_CENTER, band); Layout.text(dc, Layout.MD_CX + ox, Layout.BAND_CY + oy, Layout.fontBand,