通用窗口绘制图形并动态保存图像

时间:2015-10-08 11:20:20

标签: android c++ image windows-10 win-universal-app

我正在用C ++开发一个通用Windows 10应用程序,需求是这样的 - 有一个三角形/矩形/等的规范。如坐标,边框宽度,边框颜色等。现在,我需要创建一个图像,以便可以在其上绘制指定的三角形,然后将图像保存到临时位置。

我曾尝试使用ImageMagick等第三方库,但无法使用它,因为我首先开发的是通用应用,所以它需要跨平台,其次,它太大了库适合应用程序。

我也查看了Win2D,但它也需要在UI上放置Canvas元素。此外,需要在Draw事件处理程序中绘制,但我想动态执行,如Image2D getTriangle(double x1, double y1, double x2, double y2, double x3, double y3, Color color)

  1. 我研究了Android应用开发,他们有一些名为" android.graphics.Paint"可以使用。我可以利用通用Windows SDK中的某些东西吗?

  2. 我真的不想创建一个XAML元素。原因 - 在我使用它之前需要在UI上加载(技术上,需要进行"布局传递")并且我不想在屏幕上显示它 - 只需将图像保存在磁盘上。

  3. 与通用Windows一样,它应该能够在通用Windows支持的所有平台上运行,如Windows Phone,Surface,PC等。

2 个答案:

答案 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类提供与硬件无关的图像表示

  • 使用您的规范创建SVG xml文本
  • 或者,使用QPainter直接绘制内容
  • 以您选择的任何格式保存QImage。