我正在用C ++开发一个通用Windows 10应用程序,需求是这样的 - 有一个三角形/矩形/等的规范。如坐标,边框宽度,边框颜色等。现在,我需要创建一个图像,以便可以在其上绘制指定的三角形,然后将图像保存到临时位置。
我曾尝试使用ImageMagick等第三方库,但无法使用它,因为我首先开发的是通用应用,所以它需要跨平台,其次,它太大了库适合应用程序。
我也查看了Win2D,但它也需要在UI上放置Canvas元素。此外,需要在Draw事件处理程序中绘制,但我想动态执行,如Image2D getTriangle(double x1, double y1, double x2, double y2, double x3, double y3, Color color)
。
我研究了Android应用开发,他们有一些名为" android.graphics.Paint"可以使用。我可以利用通用Windows SDK中的某些东西吗?
我真的不想创建一个XAML元素。原因 - 在我使用它之前需要在UI上加载(技术上,需要进行"布局传递")并且我不想在屏幕上显示它 - 只需将图像保存在磁盘上。
与通用Windows一样,它应该能够在通用Windows支持的所有平台上运行,如Windows Phone,Surface,PC等。
答案 0 :(得分:2)
我终于找到了我的问题的解决方案,并希望它能指导那些偶然发现的人。 用于在通用Windows应用程序中动态创建图像的库仍然是Win2D。但是当Direct2D在屏幕上写入图像时,Win2D中有一个offscreen drawing library,可以帮助将图像绘制到文件中。基本上,我们使用 CanvasRenderTarget 创建渲染目标,并使用 CanvasDrawingSession 进行绘制。完成后,我们使用 SaveAsync 将图像保存到磁盘。
Win2D也可以作为nuGet包使用,因为它是一个带有维护.uwp包的微软项目,它似乎可以在通用Windows目标的所有平台上运行。
示例代码 -
CanvasDevice^ device = CanvasDevice::GetSharedDevice();
CanvasRenderTarget^ offscreen = ref new CanvasRenderTarget(device, width, height, 96);
{
CanvasDrawingSession^ ds = offscreen->CreateDrawingSession();
ds->Clear(Colors::Black);
ds->DrawRoundedRectangle(Rect (0, 0, 100, 100), 0, 0, Colors::White);
}
offscreen->SaveAsync(filepath)
答案 1 :(得分:0)
您可能设法将规范转换为xml / svg格式(如果不是这样),然后使用某些QT库进行渲染和保存:
http://doc.qt.io/qt-5/qsvgrenderer.html
QSvgRenderer类用于绘制SVG文件的内容
http://doc.qt.io/qt-5/qimage.html
QImage类提供与硬件无关的图像表示