app+docs: 第三十九轮结案——官方条纹更不明显真因是我们开着官方从不开启的 7×7 细节增强(GPU 画布/Skia 预放大/合成截屏逐环 A/B 全部排除,暗区 ROW 0.31-0.46→0.14-0.23≈官方 0.15,设置页去掉误导推荐并注明代价,设备增强已恢复 0,123 单测全绿)
This commit is contained in:
@@ -62,6 +62,18 @@ class LiveRenderer(
|
||||
private var bitmap = Bitmap.createBitmap(320, 240, Bitmap.Config.ARGB_8888)
|
||||
private var bufW = 320
|
||||
private var bufH = 240
|
||||
|
||||
// Round 39 verdict (docs/android_app/rendering_diff_phone_20261006.md §17.7):
|
||||
// the "official background stripes are less visible" gap was NOT the display
|
||||
// chain at all. A/B on the device: hardware vs software canvas — identical
|
||||
// dark-region ROW; a Skia 6x pre-scale stage — identical; in-app bitmap dump
|
||||
// vs screenshot — identical, i.e. nothing between the pipeline output and the
|
||||
// screen adds alternation. The whole gap was the 7x7 detail enhancement
|
||||
// running at level 4 on this device (official app NEVER calls
|
||||
// SetDetailEnhancement — jadx, and round 22 already measured "level 2 makes
|
||||
// noise larger"). With enhancement off the dark-region ROW drops from
|
||||
// 0.31-0.46 to 0.14-0.21 x1e-2 arc ≈ the official 0.15. The renderer keeps
|
||||
// the round-38 single-stage nativeOut draw below.
|
||||
private val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||
color = Color.WHITE
|
||||
typeface = Typeface.SANS_SERIF
|
||||
@@ -234,13 +246,12 @@ class LiveRenderer(
|
||||
fit.cx - size[0] / 2f, fit.cy - size[1] / 2f,
|
||||
fit.cx + size[0] / 2f, fit.cy + size[1] / 2f,
|
||||
)
|
||||
// Single filtered scale buffer -> screen. The official viewer's 640x480
|
||||
// offscreen stage was tried (round 38) and REVERTED: in our portrait
|
||||
// fitRect the second stage lands on a 2.25x non-integer scale, and the
|
||||
// GPU's rendering of it measurably WORSENED the column-direction
|
||||
// alternation on the device (0.33 -> 0.55 x1e-2 arc) — an artifact the
|
||||
// official (landscape, integer 3x second stage) doesn't have. The 160x120
|
||||
// -> 1440x1920 single scale is 9x/16x integer, artifact-free.
|
||||
// Single filtered scale buffer -> screen. Round 39 additionally tried a
|
||||
// Skia 6x pre-scale stage (second stage an exact integer 2x, unlike the
|
||||
// round-38 640x480 attempt): the device A/B showed NO display-quality
|
||||
// gain over this single-stage draw, so it was reverted — the stripe gap
|
||||
// was the detail enhancement, not any scaling stage (see the class
|
||||
// comment above).
|
||||
if (src != null) canvas.drawBitmap(bitmap, src, dstRect, paint)
|
||||
else canvas.drawBitmap(bitmap, null, dstRect, paint)
|
||||
canvas.restore()
|
||||
|
||||
@@ -249,8 +249,10 @@ fun SettingsScreen(
|
||||
Text(
|
||||
"加强局部细节(官方同款 7×7 局部映射)。档位越高:①对比度门槛越高," +
|
||||
"只有更强的细节会被增强,弱对比区域(噪声所在处)被排除;" +
|
||||
"②强边缘的增强幅度更大。所以高档位是「更锐但更挑」," +
|
||||
"而不是「连噪声一起放大」。",
|
||||
"②强边缘的增强幅度更大。\n\n" +
|
||||
"注意:实测开启增强会放大暗场(低温背景)的固定条纹。官方 App 的" +
|
||||
"实时画面从不开启增强(逆向 jadx 全量搜索无 SetDetailEnhancement 调用)," +
|
||||
"想要与官方一致的背景观感请选「关闭」。",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(bottom = 8.dp),
|
||||
@@ -262,6 +264,10 @@ fun SettingsScreen(
|
||||
// local contrast dominates the divisor). On flat, noisy areas the
|
||||
// divisor floor holds the amplitude at 128/gain regardless of
|
||||
// level, which is why cranking it up sharpens instead of boiling.
|
||||
// Round 39: the official app NEVER calls SetDetailEnhancement
|
||||
// (jadx), and on-device A/B showed level 4 is what inflated the
|
||||
// dark-region row stripes (0.31-0.46 -> 0.14-0.21 when off) —
|
||||
// hence no "recommended" tag on any level and the notice above.
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.heightIn(max = 320.dp)
|
||||
@@ -272,7 +278,7 @@ fun SettingsScreen(
|
||||
1 to "1 级(轻微)",
|
||||
2 to "2 级",
|
||||
3 to "3 级",
|
||||
4 to "4 级(推荐)",
|
||||
4 to "4 级",
|
||||
6 to "6 级",
|
||||
8 to "8 级(强)",
|
||||
).forEach { (lvl, label) ->
|
||||
|
||||
Reference in New Issue
Block a user