0
我想這樣做添加文本,以在Magick圖像++:如何自動換行添加到文本中Magick ++
方法1:
Magick::Image image(Magick::Geometry(800,800),Magick::Color("white"));
Magick::Color color(0,0,0,0);
image.font("Waree");
image.fontPointsize(36);
image.strokeColor(color);
image.fillColor(color);
image.annotate("HelloWorld!", NorthWestGravity);
方法2:
Magick::Image image(Magick::Geometry(800,800),Magick::Color("white"));
Magick::Color color(0,0,0,0);
std::list<Magick::Drawable> text_draw_list;
text_draw_list.push_back(Magick::DrawableViewbox(0,0,image.columns(), image.rows()));
text_draw_list.push_back(Magick::DrawableFont("Waree", (Magick::StyleType)NormalStyle, 400, (Magick::StretchType)NormalStretch));
text_draw_list.push_back(Magick::DrawablePointSize(36));
//Manual offsets
text_draw_list.push_back(Magick::DrawableText(0, 200, "HelloWorld!"));
text_draw_list.push_back(Magick::DrawableStrokeColor(color));
text_draw_list.push_back(Magick::DrawableFillColor(color));
image.draw(text_draw_list);
方法1計算給定重力的最佳偏移量,但如果文本超出了im的範圍,則沒有任何文字包裝年齡。
方法2有方法1的問題加上它假定已經計算了正確的偏移量,所以文本被寫在正確的位置。
如何將自動換行添加到2種方法之一,但最好是方法1?
P.S:ImageMagick的具有自動換使用標題選項,但我找不到標題中Magick ++。
編輯:醜陋的邊界控制基於字體大小。
Magick::Image image(Magick::Geometry(800,800),Magick::Color("white"));
Magick::Color color(0,0,0,0);
image.font("Waree");
image.fontPointsize(36);
image.strokeColor(color);
image.fillColor(color);
std::string txt = "HelloWorld!";
Magick::TypeMetric typeMetrics;
double fontSize = 36;
image.fontTypeMetrics(txt, &typeMetrics);
while(fontSize > 0)
{
if(typeMetrics.textWidth() >= image.columns() || typeMetrics.textHeight() >= image.rows())
{
fontSize--;
image.fontTypeMetrics(txt, &typeMetrics);
}
}
image.annotate(txt, NorthWestGravity);
偉大的回答再一次!你怎麼知道這一切?!?!我添加了一個基於字體大小的髒邊界控件,因爲我無法找到文字換行。 – zindarod
很高興它有幫助,但真正的功勞歸功於安東尼蒂森和他的神奇[工作主體](http://www.imagemagick.org/Usage/)。 – emcconville