2015-10-08 68 views
0

我正在C++中開發通用Windows 10應用程序,需求是這樣的 - 有一個三角形/矩形/等的規範。如座標,邊框寬度,邊框顏色等。現在,我需要創建一個圖像,以便可以在其上繪製指定的三角形,然後將圖像保存到臨時位置。通用窗口繪製圖形和動態保存圖像

我已經嘗試過第三方庫,如ImageMagick,但無法使用它,因爲首先我正在開發一個通用應用程序,所以它需要跨平臺,其次,它太大了庫適合應用程序。

我也看了Win2D,但它也需要一個Canvas元素放在UI上。另外,在繪圖事件處理程序中需要完成繪圖,但我想在飛行中完成,例如Image2D getTriangle(double x1, double y1, double x2, double y2, double x3, double y3, Color color)

  1. 我看着Android應用程序的開發和他們有一種稱爲可用於「android.graphics.Paint」。 Universal Windows SDK中是否有一些我可以利用的東西?

  2. 我真的不想創建一個XAML元素。原因 - 它需要在用戶界面上加載才能使用它(技術上,需要去「佈局傳遞」),我不想在屏幕上顯示它 - 只需將圖像保存在磁盤上即可。

  3. 像通用的Windows,它應該能夠通過通用的Windows,如Windows手機,表面,PC等支持的所有平臺上運行

+0

如果你想要一個多平臺軟件,有很多繪圖工具:從低層次的openGL(ES?)到像Qt庫。 –

+0

@AdrianMaire我實際上需要生成這些圖像來優化後期的紋理加載,所以openGL不是一個選項。另外,它應該能夠在通用Windows支持的任何平臺上運行。基本上我正在尋找的是一種不調用GL或在XAML上添加圖像的方式。 –

+0

那麼,如果我是正確的,你標記了Android,它不是universal-windows。 您想要加載圖像,生成圖像還是保存圖像? –

回答

1

我終於爲我的問題得到了解決方案,並希望它會引導其他人在這裏絆倒。 在Universal Windows App中用於創建圖像的庫仍然是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) 
+0

如果你用一些代碼更新你的答案,這對wup 10社區會非常有幫助。謝謝 –

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。
+0

qt是否足夠輕量化以製作移動應用程序?由於尺寸較大,我已經刪除了ImageMagick。此外,我正在使用Visual Studio來構建通用Windows應用程序,因此qt可能不適合... –

+0

是的,有Android版本作爲示例。無論如何,你只需要qimage和qpainter/qsvg。我會說小於1MB –