|
1 | 1 | # WindowImagePlayer API 文档 |
2 | 2 |
|
3 | | - |
| 3 | +**GIF 演示(请等待加载)**: |
4 | 4 |
|
| 5 | + |
5 | 6 |
|
6 | 7 | `WindowImagePlayerHost` 是一个基于 WinForms 的组件,通过在桌面上动态控制大量原生窗口的位置和尺寸来复现图像序列。它支持增量渲染、性能优化配置以及自动化运行模式。 |
7 | 8 |
|
8 | | -这个工具可以用于创作视觉效果或者音乐卡点,使用数个Windows窗口渲染指定文件夹内所有黑白图片。 |
| 9 | +该工具主要用于创作视觉效果(如:Bad Apple 窗口版)或音乐卡点,利用多个 Windows 窗口渲染指定文件夹内的所有图像(支持黑白及灰度判定)。 |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +## 1. 解决方案项目说明 |
| 14 | + |
| 15 | +本仓库包含两个主要项目,以便于开发者集成和测试: |
| 16 | + |
| 17 | +| 项目名称 | 类型 | 说明 | |
| 18 | +| :--- | :--- | :--- | |
| 19 | +| **`WindowsDraw.API`** | 类库 (Library) | **核心项目**。包含播放器核心逻辑和 `WindowImagePlayerHost` 类。集成开发时请引用此项目。 | |
| 20 | +| **`WindowsDraw.Test`** | 启动项 (App) | **演示项目**。展示了如何调用 API 进行播放,可作为参考 Demo 直接运行。 | |
| 21 | + |
| 22 | +> **调用建议**:在你的生产项目中,请添加对 `WindowsDraw.API` 项目的引用,并确保引入 `using WindowImagePlayer;` 命名空间。 |
| 23 | +
|
| 24 | +--- |
9 | 25 |
|
10 | | -## 1. 快速入门 |
| 26 | +## 2. 快速入门 |
11 | 27 |
|
12 | | -在 `Program.cs` 中直接初始化并运行: |
| 28 | +在你的项目(建议为 Windows 窗体应用或控制台应用)中调用: |
13 | 29 |
|
14 | 30 | ```csharp |
| 31 | +using WindowImagePlayer; // 引用 API 项目命名空间 |
| 32 | +
|
15 | 33 | static void Main() |
16 | 34 | { |
17 | 35 | Application.EnableVisualStyles(); |
18 | 36 | Application.SetCompatibleTextRenderingDefault(false); |
19 | 37 |
|
| 38 | + // 实例化 API 项目中的宿主类 |
20 | 39 | var player = new WindowImagePlayerHost(@"C:\PathToImages") |
21 | 40 | { |
22 | 41 | AutoStart = true, // 启动后立即播放 |
23 | 42 | AutoCloseWhenFinished = true, // 播放完自动退出 |
24 | 43 | StepSize = 30, // 采样步长 |
25 | | - FrameInterval = 50 // 50ms 一帧 |
| 44 | + FrameInterval = 50, // 50ms 一帧 |
| 45 | + WindowColor = Color.White // 窗口颜色 |
26 | 46 | }; |
27 | 47 |
|
28 | 48 | Application.Run(player); |
29 | 49 | } |
30 | 50 | ``` |
31 | 51 |
|
32 | | -## 2. 构造函数 |
| 52 | +--- |
33 | 53 |
|
34 | | -### `WindowImagePlayerHost(string targetFolderPath)` |
35 | | -初始化播放器宿主。 |
36 | | -* **参数**: `targetFolderPath` (string) - 包含图像文件(.jpg, .png, .bmp)的文件夹路径。文件将按文件名排序播放。 |
| 54 | +## 3. API 详细规格 |
37 | 55 |
|
38 | | ---- |
| 56 | +### 构造函数:`WindowImagePlayerHost(string targetFolderPath)` |
| 57 | +* **参数**: `targetFolderPath` (string) - 包含图像文件(.jpg, .png, .bmp)的文件夹路径。 |
39 | 58 |
|
40 | | -## 3. 公开配置属性 |
| 59 | +### 公开配置属性 |
41 | 60 |
|
42 | 61 | | 属性名 | 类型 | 默认值 | 说明 | |
43 | 62 | | :--- | :--- | :--- | :--- | |
44 | | -| `AutoStart` | `bool` | `false` | 为 `true` 时,启动程序不显示控制面板,直接开始播放。 | |
45 | | -| `AutoCloseWhenFinished` | `bool` | `true` | 为 `true` 时,播放完最后一帧会自动关闭宿主程序。 | |
46 | | -| `StepSize` | `int` | `25` | 采样步长(单位:像素)。值越小画面越精细,但生成的窗口数量越多。建议范围 20-50。 | |
47 | | -| `BrightnessThreshold` | `float` | `0.4f` | 黑色判定阈值(0.0-1.0)。亮度低于此值的区域会生成窗口。 | |
48 | | -| `FrameInterval` | `int` | `200` | 帧间隔(单位:毫秒)。控制播放速度。 | |
49 | | -| `ResetRatio` | `double` | `1.9` | 重刷阈值。新一帧窗口数超过当前池 `N` 倍时,会销毁所有窗口重建以提高性能。 | |
50 | | -| `WindowColor` | `Color` | `White` | 像素窗口的背景颜色。 | |
51 | | -| `WindowTitle` | `string` | `" "` | 像素窗口的标题栏文字。 | |
52 | | -| `CurrentIndex` | `int` | `0` | (只读) 当前正在播放的图像索引。 | |
53 | | - |
54 | | ---- |
55 | | - |
56 | | -## 4. 公开方法 |
57 | | - |
58 | | -### `StartPlayback()` |
59 | | -手动开始播放。如果 `AutoStart` 为 `false`,可调用此方法启动逻辑。 |
60 | | - |
61 | | -### `StopPlayback()` |
62 | | -停止播放并销毁当前桌面上所有的像素窗口。 |
| 63 | +| **`AutoStart`** | `bool` | `false` | 为 `true` 时,不显示控制面板,运行即播放(静默模式)。 | |
| 64 | +| **`AutoCloseWhenFinished`** | `bool` | `true` | 为 `true` 时,播放完最后一帧会自动结束进程。 | |
| 65 | +| **`StepSize`** | `int` | `25` | 采样步长(像素)。值越小画面越细但窗口越多,建议 20-50。 | |
| 66 | +| **`BrightnessThreshold`** | `float` | `0.4f` | 亮度阈值(0.0-1.0)。低于此值的颜色将被绘制为窗口。 | |
| 67 | +| **`FrameInterval`** | `int` | `200` | 帧率控制(毫秒)。 | |
| 68 | +| **`ResetRatio`** | `double` | `1.9` | 窗口池重刷比例。用于处理画面剧烈闪烁时的性能平衡。 | |
| 69 | +| **`WindowColor`** | `Color` | `White` | 生成的像素窗口背景色。 | |
| 70 | +| **`WindowTitle`** | `string` | `" "` | 像素窗口的标题栏文本。 | |
63 | 71 |
|
64 | 72 | --- |
65 | 73 |
|
66 | | -## 5. 运行模式说明 |
| 74 | +## 4. 运行模式说明 |
67 | 75 |
|
68 | | -1. **控制台模式 (`AutoStart = false`)**: |
69 | | - * 程序启动后会显示一个中心窗口,点击“开始播放”按钮后触发。 |
70 | | - * 适合手动调试或选择播放时机。 |
| 76 | +1. **控制台交互模式 (`AutoStart = false`)**: |
| 77 | + * 启动后显示一个 300x150 的控制窗口,点击“开始播放”按钮后触发渲染。 |
| 78 | + * 适合调试参数或手动触发效果。 |
71 | 79 |
|
72 | | -2. **静默模式 (`AutoStart = true`)**: |
73 | | - * 宿主窗口将完全透明且不显示在任务栏。 |
74 | | - * 程序启动后直接根据图片序列在屏幕上绘制窗口。 |
75 | | - * 配合 `AutoCloseWhenFinished = true` 可以实现完全自动化的视觉效果演示。 |
| 80 | +2. **静默执行模式 (`AutoStart = true`)**: |
| 81 | + * 控制窗体完全透明且不显示在任务栏,用户直接看到桌面窗口跳动效果。 |
| 82 | + * 适合配合脚本或自动化演示。 |
76 | 83 |
|
77 | 84 | --- |
78 | 85 |
|
79 | | -## 6. 注意事项 |
| 86 | +## 5. 重要注意事项 |
80 | 87 |
|
81 | | -* **性能消耗**: `StepSize` 设置得过小(如 < 15)会导致系统瞬间产生数千个窗口,可能造成系统卡顿或图形驱动响应缓慢。 |
82 | | -* **资源清理**: 类内部已实现 `OnFormClosing` 逻辑,关闭宿主窗口时会自动释放并销毁所有池中的子窗口。 |
83 | | -* **排序依赖**: 图像文件必须具有可排序的文件名(如 `frame_001.jpg`, `frame_002.jpg`)。 |
84 | | -* **如果使用静默模式,请务必提供关闭方法(比如应用程序为“控制台应用程序”而不是“Windows应用程序”)或者指定 `AutoCloseWhenFinished` 为 `True`否则将会死循环!** |
| 88 | +* **性能消耗**: `StepSize` 设置得过小(如 < 15)会导致系统瞬间产生数千个窗口,可能造成桌面窗口管理器 (DWM) 卡顿。 |
| 89 | +* **文件依赖**: 图像文件必须按顺序命名(如 `001.jpg`, `002.jpg`),API 内部会按名称进行升序排列。 |
| 90 | +* **进程残留警告**: **如果使用静默模式 (`AutoStart = true`),请务必将 `AutoCloseWhenFinished` 设为 `true`**。否则在播放结束后,由于主窗口隐藏,用户很难手动关闭进程,可能导致内存残留。 |
| 91 | +* **资源清理**: 类内部已封装 `OnFormClosing` 逻辑,关闭主程序时会强制销毁所有创建的子窗口。 |
0 commit comments