2017-07-28 59 views
0

我想在圖像上使用Image Magick庫(Magick ++ API)繪製一堆線,總執行時間似乎相當長。Image Magick緩慢繪圖

有沒有什麼方法可以優化IMagick的繪圖性能?

int SIZE = 700, LINES_NUM = 6000; 

Image outputImage(Geometry(SIZE, SIZE), Color("white")); 

for (int i = 0; i < LINES_NUM; i++) { 
    outputImage.draw(DrawableLine(lines[i].x1,lines[i].y1, 
            lines[i].x2,lines[i].y2)); 
} 
+1

ImageMagick真的是你可以使用的唯一庫嗎?它以無處不在,不快速而聞名。 – tadman

+0

@tadman不,我可以切換到任何東西。你會推薦什麼來獲得最佳性能? – zavg

+1

我使用Node.js和無頭帆布包進行批量圖像處理的運氣非常好,它利用了Chrome/WebKit中非常強大和快速的''元素代碼。對於一個純粹的C++版本,你可能會嘗試使用比這更快的OpenGL,但實際上在使用時更加笨拙和棘手。還有OpenGL派生的繪圖庫。 – tadman

回答

0

儘量避免重複調用Magick::Image.draw

std::vector<Magick::Drawable> drawList; 
for (int i = 0; i < LINES_NUM; i++) { 
    drawList.push_back(DrawableLine(lines[i].x1,lines[i].y1, 
            lines[i].x2,lines[i].y2)); 
} 
outputImage.draw(drawList); 

此外,還要確保ImageMagick庫已編譯支持OpenMP。如果你追求速度而不是品質,那麼我會建議不用高動態範圍圖像--enable-hdri=no和低量子深度--with-quantum-depth=8重新編譯。

+0

我已經嘗試完全相同的代碼進行批量渲染,因爲你建議但性能幾乎相同。 – zavg