2017-10-19 133 views
0

我計劃使用Magick(GraphicsMagick ++)生成具有一些文本的圖像,並且我希望根據繪製的文本自動調整圖像大小。GraphicsMagick ++繪製文本並自動調整大小畫布

這是我的代碼:

bool LoadText(const std::string& text, const std::string& fontface, int pointsize, Magick::Color color) { 

    image = Magick::Image(Magick::Geometry(1,1), Magick::Color("black")); 
    image.font(fontface); 
    image.fillColor(color); 
    image.strokeColor(color); 
    image.fontPointsize(pointsize); 
    image.read("CAPTION:" + text); 
    //image.annotate(text,CenterGravity); 
    return true; 
} 

隨着「註解()」畫布沒有大小,但文本顏色和背景是正確的。

如果我使用「CAPTION:」協議,則調整畫布的大小,但不考慮fontcolor和背景顏色。

我在做什麼錯?

回答

0

從標題協議中讀取時,您不應該分配空白圖像,而是直接設置背景顏色。

using namespace Magick; 

bool LoadTextCaption(const std::string& text, 
        const std::string& fontface, 
        int pointsize, 
        Magick::Color color) 
{ 
    Image image;       // Allocated but not initialized. 
    image.font(fontface); 
    image.fillColor(color); 
    image.strokeColor(color); 
    image.fontPointsize(pointsize); 
    image.backgroundColor(Color("BLACK")); // <- Set background 
    image.read("CAPTION:" + text); 
    return true; 
} 
// ... 
LoadTextCaption("Hello Caption!", "TimesNewRoman", 32, Color("RED")); 

Hello Caption!

+0

謝謝我會嘗試。但我有一個關於你的樣本的問題。爲什麼這些文字是以兩行繪製的。我只想要一行文字。 – soyxan

+0

我得到以下運行時錯誤: 在拋出'Magick :: ErrorOption'實例後終止調用what():Magick:必須指定由編碼器/ caption.c報告的圖像大小(Hello Caption!):110(ReadCAPTIONImage) Magick:由於信號6(SIGABRT)「中止」而中止... – soyxan