zoukankan      html  css  js  c++  java
  • 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");
    }
     

    http://blog.csdn.net/qq_19672579/article/details/51050367

  • 相关阅读:
    jQuery之父:每天都写点代码
    XtraTabControl 控件使用
    Linq:使用Take和Skip实现分页
    WCF教程一之WCF是什么,能做什么
    WCF发布后远程访问的域名解析问题
    C# WinForm下,隐藏主窗体,只在进程管理器中显示进程,在任务栏,状态栏都不显示窗体的方法
    在bat脚本写入中文远行后乱码
    VS2010DebugView捕捉
    Web Service 的工作原理
    String.Format 方法
  • 原文地址:https://www.cnblogs.com/findumars/p/7220059.html
Copyright © 2011-2022 走看看