一、程序功能
1、支持使用背景+前景字符生成一副图像。
2、背景颜色、前景字符、前景字符颜色、前景字符大小可以调整。
3、生成图像的格式及分辨率可以调整。
4、支持拖入自己的图片进行生成。
5、软件下载:https://download.csdn.net/download/2301_79536161/89625021?spm=1001.2014.3001.5503。
二、功能演示
1、程序界面
2、操作演示及结果
三、关键代码
1、输入控件离开事件联动
if (obj == ui.m_bg_r)
{
if (event->type() == QEvent::Leave)
{
int value = ui.m_bg_r->text().toInt();
if (value < 0) {
ui.m_bg_r->setText("0");
} else if (value > 255) {
ui.m_bg_r->setText("255");
}
ui.m_bg_rs->setValue(value);
updateImg();
}
}
if (obj == ui.m_bg_g)
{
if (event->type() == QEvent::Leave)
{
int value = ui.m_bg_g->text().toInt();
if (value < 0) {
ui.m_bg_g->setText("0");
} else if (value > 255) {
ui.m_bg_g->setText("255");
}
ui.m_bg_gs->setValue(value);
updateImg();
}
}
if (obj == ui.m_bg_b)
{
if (event->type() == QEvent::Leave)
{
int value = ui.m_bg_b->text().toInt();
if (value < 0) {
ui.m_bg_b->setText("0");
} else if (value > 255) {
ui.m_bg_b->setText("255");
}
ui.m_bg_bs->setValue(value);
updateImg();
}
}
if (obj == ui.m_num_r)
{
if (event->type() == QEvent::Leave)
{
int value = ui.m_num_r->text().toInt();
if (value < 0) {
ui.m_num_r->setText("0");
} else if (value > 255) {
ui.m_num_r->setText("255");
}
ui.m_num_rs->setValue(value);
updateImg();
}
}
if (obj == ui.m_num_g)
{
if (event->type() == QEvent::Leave)
{
int value = ui.m_num_g->text().toInt();
if (value < 0) {
ui.m_num_g->setText("0");
} else if (value > 255) {
ui.m_num_g->setText("255");
}
ui.m_num_gs->setValue(value);
updateImg();
}
}
if (obj == ui.m_num_b)
{
if (event->type() == QEvent::Leave)
{
int value = ui.m_num_b->text().toInt();
if (value < 0) {
ui.m_num_b->setText("0");
} else if (value > 255) {
ui.m_num_b->setText("255");
}
ui.m_num_bs->setValue(value);
updateImg();
}
}
if (obj == ui.m_num)
{
if (event->type() == QEvent::Leave)
{
updateImg();
}
}
if (obj == ui.m_num_size)
{
if (event->type() == QEvent::Leave)
{
int value = ui.m_num_size->text().toInt();
if (value < 1) {
ui.m_num->setText("1");
} else if (value > 500) {
ui.m_num->setText("500");
}
updateImg();
}
}
2、滑杆条联动事件
if (obj == ui.m_bg_rs)
{
if (event->type() == QEvent::MouseMove)
{
int value = ui.m_bg_rs->value();
CCPPString s;
s.Append("%d", value);
ui.m_bg_r->setText(s.GetBuffer());
updateImg();
}
}
if (obj == ui.m_bg_gs)
{
if (event->type() == QEvent::MouseMove)
{
int value = ui.m_bg_gs->value();
CCPPString s;
s.Append("%d", value);
ui.m_bg_g->setText(s.GetBuffer());
updateImg();
}
}
if (obj == ui.m_bg_bs)
{
if (event->type() == QEvent::MouseMove)
{
int value = ui.m_bg_bs->value();
CCPPString s;
s.Append("%d", value);
ui.m_bg_b->setText(s.GetBuffer());
updateImg();
}
}
if (obj == ui.m_num_rs)
{
if (event->type() == QEvent::MouseMove)
{
int value = ui.m_num_rs->value();
CCPPString s;
s.Append("%d", value);
ui.m_num_r->setText(s.GetBuffer());
updateImg();
}
}
if (obj == ui.m_num_gs)
{
if (event->type() == QEvent::MouseMove)
{
int value = ui.m_num_gs->value();
CCPPString s;
s.Append("%d", value);
ui.m_num_g->setText(s.GetBuffer());
updateImg();
}
}
if (obj == ui.m_num_bs)
{
if (event->type() == QEvent::MouseMove)
{
int value = ui.m_num_bs->value();
CCPPString s;
s.Append("%d", value);
ui.m_num_b->setText(s.GetBuffer());
updateImg();
}
}
3、图像更新
void GuiApp::updateImg()
{
Mat imgMat(m_imgH, m_imgW, CV_8UC3, m_img_data_bgr);
imgMat.setTo(cv::Scalar(ui.m_bg_b->text().toInt(), ui.m_bg_g->text().toInt(), ui.m_bg_r->text().toInt()));
//重新叠加数字
setNum();
LabelShowImg(NULL);
return;
}
void GuiApp::setNum()
{
if (ui.m_num->text().isEmpty())
{
return ;
}
int strLen = ui.m_num->text().length();
Mat imgBgr(m_imgH, m_imgW, CV_8UC3, m_img_data_bgr);
Mat imgRgb(m_imgH, m_imgW, CV_8UC3, m_img_data_rgb);
cvtColor(imgBgr, imgRgb, CV_BGR2RGB);
QImage image = QImage((uchar*)m_img_data_rgb, m_imgW, m_imgH, QImage::Format_RGB888);
// 使用QPainter绘制数字
QPainter painter(&image);
painter.setPen(QColor(ui.m_num_r->text().toInt(), ui.m_num_g->text().toInt(), ui.m_num_b->text().toInt())); // 设置画笔颜色
painter.setFont(QFont("Arial", ui.m_num_size->text().toInt())); // 设置字体和大小
painter.drawText(image.rect(), Qt::AlignCenter, ui.m_num->text());
cvtColor(imgRgb, imgBgr, CV_RGB2BGR);
return;
}
void GuiApp::LabelShowImg(QImage* img)
{
//bgr转rgb
Mat imgBgr(m_imgH, m_imgW, CV_8UC3, m_img_data_bgr);
Mat imgRgb(m_imgH, m_imgW, CV_8UC3, m_img_data_rgb);
cvtColor(imgBgr, imgRgb, CV_BGR2RGB);
QImage image = QImage((uchar*)m_img_data_rgb, m_imgW, m_imgH, QImage::Format_RGB888);
QImage labelImage = image.scaled(ui.label->width(), ui.label->height());
ui.label->setPixmap(QPixmap::fromImage(labelImage));
}
4、图像保存
void GuiApp::on_m_saveButton_clicked()
{
static int cnt = 0;
cnt++;
CCPPString fileName = m_exePath;
fileName.Append("%d.%s", cnt, ui.m_image_format->text().toStdString().c_str());
QImage srcImage = QImage((uchar*)m_img_data_rgb, m_imgW, m_imgH, QImage::Format_RGB888);
QImage dstImage = srcImage.scaled(ui.m_dstW->text().toInt(), ui.m_dstH->text().toInt());
dstImage.save(QString(fileName.GetBuffer()), ui.m_image_format->text().toStdString().c_str(), 100);
return;
}