项目:开发一个生成ICO的简易工具

一、程序功能
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;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值