Files
ios/Xuxucheck/docs/tools/px.py
T
admin d6aeede2bc 导入 XuXuCheck 工程(iOS 干化学尿液试纸分析 App)
从桌面工程复制而来,作为本仓库的 Xuxucheck/ 子目录。

为控制仓库体积做了两处删减:
- 移除 Frameworks/opencv2.xcframework 下的两个 visionOS 切片
  (xros-arm64、xros-arm64-simulator,合计约 106 MB),并同步删掉该
  xcframework 内 Info.plist 里对应的两条 AvailableLibraries 记录,
  只保留 ios-arm64 与 ios-arm64_x86_64-simulator。
- 移除全部 .DS_Store 与 xcuserdata/。

已用 xcodebuild 从本目录完整编译验证:BUILD SUCCEEDED,
ProcessXCFramework 以 --platform ios 成功选中框架,产物含 3699 个 cv:: 符号
(OpenCV 确实链入),嵌入 framework 3 个,与移除无用 pod 之后的状态一致。

仓库约 206 MB,其中 OpenCV 203 MB、其余源码与依赖约 3 MB。
2026-09-23 14:17:31 +08:00

55 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""读取截屏像素,定位颜色分界点。
用途:判断某块区域(顶部留白、底部白带、状态栏……)到底是什么颜色、有多高。
不要靠眼睛估计截图,直接读像素。
用法:
sips -s format bmp /tmp/shot.jpg --out /tmp/shot.bmp
python3 docs/tools/px.py /tmp/shot.bmp [x]
x 默认 10 —— 最左边一列通常只经过背景、不经过文字,跳变点最干净。
点(pt)= 像素 / 3,iPhone 16 Pro 是 3x;数值请以实际机型的 scale 为准。
为什么不用 swift:本机 `swift foo.swift` 会报
could not build module '_DarwinFoundation1',所以走 sips + 纯标准库这条路。
sips 输出的是 24bpp、自下而上(height 为负)的 BMP,下面按这个解析。
"""
import struct
import sys
path = sys.argv[1]
x = int(sys.argv[2]) if len(sys.argv) > 2 else 10
data = open(path, 'rb').read()
if data[:2] != b'BM':
sys.exit('not a BMP — 先用 sips 转一下')
datastart = struct.unpack_from('<I', data, 10)[0]
_, width, height, _planes, bpp, comp, _size, _x, _y, _ncol, _nimp = \
struct.unpack_from('<IiiHHIIiiII', data, 14)
print('BMP %dx%d bpp=%d comp=%d' % (width, height, bpp, comp))
bottom_up = height > 0
H = abs(height)
row_size = ((bpp * width + 31) // 32) * 4
Bpp = bpp // 8
def px(x, y):
"""y 用图像坐标,0 = 最上面一行"""
ry = (H - 1 - y) if bottom_up else y
off = datastart + ry * row_size + x * Bpp
b, g, r = data[off], data[off + 1], data[off + 2]
return '#%02X%02X%02X' % (r, g, b)
print('\n--- scan x=%d (背景列,打印所有颜色跳变) ---' % x)
last = None
for y in range(H):
k = px(x, y)
if k != last:
print('y=%4d %7.1fpt %s' % (y, y / 3.0, k))
last = k