ソース情報
- リポジトリ
- fangfuzha/capture
- ソースの最終更新活動
- 2026年4月9日 09:53
- 検出された SKILL.md の言語
- 中国語
- スター
- 0
- フォーク
- 0
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/fangfuzha/capture --skill color-format-consistencyコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SOC 職業分類に基づく
SKILL.md を表示中
| name | color-format-consistency |
| description | 诊断并修复跨不同图形 API 的颜色格式不一致问题(sRGB 与线性颜色空间)。当跨 API 渲染出现颜色发白、太亮或不正确时调用。 |
本 skill 帮助诊断和修复多种图形 API 之间的颜色格式不匹配问题,特别是当捕获 API 与渲染框架之间传递图像数据时。
最常见的原因是 sRGB 与线性颜色空间不一致:
当这些环节不一致时,伽马校正就会被错误地应用。
ColorFormat::Bgra8 通常是线性格式)wgpu::TextureFormat 是什么?Bgra8UnormSrgb)还是线性格式(如 Bgra8Unorm)?SurfaceConfiguration.format 选用了什么格式?is_srgb() 来优先选择 sRGB 格式?Capture Output -> Texture Upload -> Shader Sampling -> Surface Presentation
| | | |
Linear? Linear/sRGB? Expected? Linear/sRGB?
问题:windows_capture::settings::ColorFormat::Bgra8 输出线性数据,但表面配置为 sRGB 格式。
解决方案:
// 优先使用非 sRGB 的表面格式
let surface_format = if surface_caps
.formats
.contains(&wgpu::TextureFormat::Bgra8Unorm)
{
wgpu::TextureFormat::Bgra8Unorm
} else {
// 退回到第一个非 sRGB 格式
*surface_caps
.formats
.iter()
.find(|f| !f.is_srgb())
.unwrap_or(&surface_caps.formats[0])
};
确保纹理格式与源数据一致:
// 对于线性源数据(如 Windows Capture BGRA8)
let texture_format = wgpu::TextureFormat::Bgra8Unorm;
// 对于 sRGB 源数据
let texture_format = wgpu::TextureFormat::Bgra8UnormSrgb;
对于像素精确的捕获,使用 Nearest 过滤:
let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
label: Some("Capture Sampler"),
address_mode_u: wgpu::AddressMode::ClampToEdge,
address_mode_v: wgpu::AddressMode::ClampToEdge,
address_mode_w: wgpu::AddressMode::ClampToEdge,
mag_filter: wgpu::FilterMode::Nearest,
min_filter: wgpu::FilterMode::Nearest,
mipmap_filter: wgpu::FilterMode::Nearest,
..Default::default()
});
| 源格式 | 纹理格式 | 表面格式 |
|---|---|---|
| Linear BGRA8 | Bgra8Unorm | Bgra8Unorm |
| sRGB BGRA8 | Bgra8UnormSrgb | Bgra8UnormSrgb |
| Linear RGBA8 | Rgba8Unorm | Rgba8Unorm |
| sRGB RGBA8 | Rgba8UnormSrgb | Rgba8UnormSrgb |
println!("Available formats: {:?}", surface_caps.formats);
println!("Is sRGB: {}", format.is_srgb());
#FF0000)并与源进行对比。