GraphicsMagick++ рисует текст и автоматически изменяет размер холста

Я планирую сгенерировать изображение с помощью Magick (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:», размер холста изменяется, но цвет шрифта и цвет фона не соблюдаются.

Что я делаю не так?


person soyxan    schedule 19.10.2017    source источник


Ответы (1)


Вам не нужно выделять пустое изображение при чтении из протокола подписи, а напрямую задавать цвет фона.

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"));

Привет, подпись!

person emcconville    schedule 19.10.2017
comment
Спасибо попробую. Но у меня есть один вопрос относительно вашего образца. Почему текст рисуется в 2 строки. Мне нужен текст всего в одну строку. - person soyxan; 20.10.2017
comment
Я получаю следующую ошибку времени выполнения: завершение вызывается после создания экземпляра 'Magick::ErrorOption' what(): Magick: необходимо указать размер изображения (Hello Caption!), о котором сообщает coders/caption.c:110 (ReadCAPTIONImage) Magick: abort из-за сигнала 6 (SIGABRT) Прервать... - person soyxan; 24.10.2017