mirror of
https://github.com/zs-yg/kortapp-z.git
synced 2025-12-06 16:10:42 +08:00
65 lines
1.7 KiB
C++
65 lines
1.7 KiB
C++
#include <windows.h>
|
|
#include <vector>
|
|
#include <fstream>
|
|
#include <cmath>
|
|
#include <d2d1.h>
|
|
|
|
// 高性能边框路径生成
|
|
void GenerateBorderPath(int width, int height, int radius, const char* outputPath) {
|
|
std::ofstream out(outputPath);
|
|
const float pi = 3.1415926f;
|
|
const int segments = 24; // 高分段数确保平滑
|
|
|
|
std::vector<POINTFLOAT> points;
|
|
|
|
// 优化后的圆角路径生成
|
|
auto addArc = [&](float startAngle, float endAngle, float cx, float cy) {
|
|
for (int i = 0; i <= segments; ++i) {
|
|
float angle = startAngle + (endAngle - startAngle) * i / segments;
|
|
points.push_back({
|
|
cx + radius * cosf(angle),
|
|
cy + radius * sinf(angle)
|
|
});
|
|
}
|
|
};
|
|
|
|
// 左上角
|
|
addArc(pi, 3*pi/2, radius, radius);
|
|
|
|
// 右上角
|
|
addArc(3*pi/2, 2*pi, width - radius, radius);
|
|
|
|
// 右下角
|
|
addArc(0, pi/2, width - radius, height - radius);
|
|
|
|
// 左下角
|
|
addArc(pi/2, pi, radius, height - radius);
|
|
|
|
// 闭合路径
|
|
points.push_back(points[0]);
|
|
|
|
// 写入优化格式
|
|
if (out.is_open()) {
|
|
for (const auto& p : points) {
|
|
out << p.x << "," << p.y << "\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
|
|
int argc;
|
|
LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc);
|
|
|
|
if (argc != 5) return 1;
|
|
|
|
int width = _wtoi(argv[1]);
|
|
int height = _wtoi(argv[2]);
|
|
int radius = _wtoi(argv[3]);
|
|
|
|
char outputPath[MAX_PATH];
|
|
wcstombs(outputPath, argv[4], MAX_PATH);
|
|
|
|
GenerateBorderPath(width, height, radius, outputPath);
|
|
return 0;
|
|
}
|