Qt 制作透明背景图片与裁剪图片

这两天想做一个五子棋游戏,想从零开始自己绘制各种图片素材,将经验心得整理如下。

制作透明背景图片:

void MyPainter::DrawKit()
{
    QImage image(30, 30, QImage::Format_ARGB32);
    memset(image.bits(), 0x00, image.byteCount());

    // 绘制图片
    QPainter painter(&image);
    painter.setPen(QPen(Qt::red, 2, Qt::SolidLine));
    painter.translate(15, 15);

    painter.drawLine(0-15, 0-15, 0-8, 0-15);
    painter.drawLine(0+15, 0-15, 0+8, 0-15);

    painter.drawLine(0-15, 0+15, 0-8, 0+15);
    painter.drawLine(0+15, 0+15, 0+8, 0+15);

    painter.drawLine(0-15, 0-15, 0-15, 0-8);
    painter.drawLine(0+15, 0-15, 0+15, 0-8);

    painter.drawLine(0-15, 0+15, 0-15, 0+8);
    painter.drawLine(0+15, 0+15, 0+15, 0+8);

    qDebug() << image.save("C:/Users/Mactarvish/Desktop/test2.png", "PNG");

}

首先创建一个颜色模式为ARGB32的QImage对象。创建完成后不要直接绘图,否则会在图片上产生由内存中的辣鸡数据引入的花点。解决方法是将QImage的RAW data 全部重写为0x00。

重写后再绘图,就是一张除了画出来的图形之外其他的区域全是透明的的图片了,最后执行save函数保存。

对图片的裁剪更为简单,直接调用QImage::copy()函数创建裁剪后的对象即可。

void MyPainter::CropImage()
{
    QImage image("C:/Users/Mactarvish/Desktop/myPicture_v1.png");
    QImage newImage = image.copy(90, 90, image.width()-90, image.height()-90);
    qDebug() << newImage.save("C:/Users/Mactarvish/Desktop/CropedImage.png");
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值