二维矢量动画智能制作软件开发合集
个人开发二维矢量动画智能制作软件界面如下:
目录
本篇介绍软件左侧工具栏→位图工具→????涂色、擦除、裁剪
绘制分为两类:1)矢量直线绘制;2)矢量曲线绘制。
对于图片图层,特殊工具包为位图工具,位图工具中有3个工具,分别为:1)涂色;2)擦除;3)裁剪,实现原理分别简要介绍如下:
① 涂色:应用QImage的pixelColor()和setPixelColor()方法(使用详见Qt官方文件),对于图片同一色块的像素进行颜色替换,是否为同一色块需要自设精度参数进行判断;
② 擦除:应用QImage或者QPixmap的alpha通道实现,通过QImage的pixelColor()获取当前像素的alpha值,再对QColor采用setAlpha()方法进行修改(使用详见Qt官方文件)。注意,对于没有alph通道的图片,需要增加alpha通道才能实现上述功能;
③ 裁剪:应用QPainter的setClipPath()方法(使用详见Qt官方文件),该方法能够实现设置任意裁剪形状,因此可以自定义裁剪形状。
因为是对图片的再加工,位图工具不具有动画功能,均不能在非0帧进行操作。
.h文件变量申明:
int alwValue,ipathX,ipathY;
QPixmap pix;
QImage img;
QColor colorBase = img.pixelColor(pos);
QColor color = pix.toImage().pixelColor(ipathX,ipathY);
if(color == Qt::transparent || qAbs(color.red()-colorBase.red()) > alwValue || qAbs(color.green()-colorBase.green()) > alwValue
|| qAbs(color.blue()-colorBase.blue()) > alwValue){
continue;
}
else
{
img.setPixel(ipathX,ipathY,replaceColor.rgba());
}
.h文件变量申明:
int earseHard;
QGraphicsPixmapItem *pixItem;
QPixmap pixOld = pixItem->pixmap();
QImage img = pixOld.toImage();
if(!img.hasAlphaChannel())
{
QImage i = img.copy();
i.fill(Qt::white);
img.setAlphaChannel(i);
}
for(int i = 0; i<img.width(); i++)
for(int j = 0; j<img.height(); j++)
{
if(path.contains(QPointF(i-pixOld.width()/2,j-pixOld.height()/2)))
{
QColor c = img.pixelColor(i,j);
if(c.alpha() - eraseHard > 0)
c.setAlpha(c.alpha() - eraseHard);
else
c.setAlpha(0);
img.setPixelColor(i,j,c);
}
}
.h文件变量申明:
QPainterPath pathForSelect;
QGraphicsPixmapItem *pixItem;
QPixmap pix = pixItem->pixmap().copy();
QPixmap pixNew(pix.size());
pixNew.fill(Qt::transparent);
QPainter painter(&pixNew);
QRectF rect(0,0,pix.width(),pix.height());
painter.setClipPath(pathForSelect);
painter.drawPixmap(rect,pix,QRectF());
pixItem->setPixmap(pixNew);
位图操作测试
???????
本文简要梳理了软件【位图工具-涂色|擦除|裁剪】的实现框架,内容均为原创。
作者文笔水平一般,请大家多多包涵和指正,十分欢迎进一步交流学习。
若需,请联系本人小红书(小红书号:YzLab96),谢谢???????。
链接: ?软件开发及测试所有视频合集见小红书???????