這兩天想做一個五子棋游戲,想從零開始自己繪制各種圖片素材,將經驗心得整理如下。
制作透明背景圖片:
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