当前位置: 首页 > 后端技术 > Python

PyQt5绘图板

时间:2023-03-25 19:53:19 Python

PyQt5绘图板主要技术PyQt5qtDesigneropenCV主要功能画笔画笔油漆桶直线矩形椭圆橡皮擦图像处理旋转、翻转亮度、饱和度、对比度、色相调整边缘检测、模糊锐化、详细代码、github仓库、遇到的问题实现过程中,在pycharm上使用qtDesigner配置qtDesigner配置UIC,参考Mac下的pycharm+qtdesigner环境。建图时,图像无法保留或采用重影问题。双缓冲绘图方式我们再添加一个辅助画布,如果是绘图,也就是当鼠标键还没有松开的时候,在这个辅助画布上绘制,只有当鼠标键松开的时候,才在真正的画布上绘制参考to2Ddrawing(8)DoublebufferdrawingpaintBucketFloodFillAlgorithmProblem泛洪算法—FloodFill,用于确定多维数组中给定节点相连的区域。基本原理是从一个像素点开始,向周围的像素点延伸着色,直到图形的边界。实现方式有传统的递归方法dfs、bfs、画线算法(ScanlineFill)等,在QImage上实现效率很低,因为getPixel操作很慢,而defgetPixel(x,y,pixels,w)可以进一步优化:i=(x+(y*w))*4returnpixels[i:i+3]#paintbucketdeffloodFill(image,pos):fillPositions=[]w,h=image.width(),image.height()pixels=image.bits().asstring(w*h*4)targetColor=getPixel(pos.x(),pos.y(),pixels,w)haveSeen=set()queue=[(pos.x(),pos.y())]whilequeue:x,y=queue.pop()ifgetPixel(x,y,pixels,w)==targetColor:fillPositions.append((x,y))queue.extend(getCardinalPoints(haveSeen,(x,y),w,h))returnfillPositionsdefgetCardinalPoints(haveSeen,centerPos,w,h):points=[]cx,cy=centerPosforx,yin[(1,0),(0,1),(-1,0),(0,-1)]:xx,yy=cx+x,cy+yif(xx>=0andxx=0andyy