精华内容
下载资源
问答
  • 在合并绘制模式下
    千次阅读 多人点赞
    2020-09-21 16:13:22

    简介

    Matplotlib是非常著名的Python绘图库,支持非常复杂的底层定制化操作。本文通过Matplotlib中的动画绘制工具来讲解如何绘制动态图,首先讲解通过交互模式如何显示动态图,继而讲解通过两个动画类来实现动图地保存(GIF格式)。

    显示动态图

    首先,需要明确,Matplotlib绘图有两种显示模式,分别为阻塞模式交互模式,他们具体的说明如下。

    1. 阻塞模式,该模式下绘制地图地显示必须使用plt.show()进行展示(默认会弹出一个窗口),代码会运行到该行阻塞不继续执行,直到关闭这个展示(默认是关闭弹出的显示窗口,Pycharm等集成开发环境会自动捕获图片然后跳过阻塞)。
    2. 交互模式,该模式下任何绘图相关的操作如plt.plot()会立即显示绘制的图形然后迅速关闭,继续代码的运行,不发生阻塞。

    默认情况下,Matplotlib使用阻塞模式,要想打开交互模式需要通过下面的几个函数来做操作,下面直接列出要用的核心函数。

    plt.ion()  # 打开交互模式
    plt.ioff()  # 关闭交互模式
    plt.clf()  # 清除当前的Figure对象
    plt.pause()  # 暂停GUI功能多少秒
    

    然后就是要清楚,所谓的动图或者视频是怎么做到的,其实它们本质上就是很多静态图以较快的速度连续播放从而给人一种动感,利用Matplotlib绘制动图的原理也是一样的,遵循画布绘图->清理画布->画布绘图的循环就行了,不过这里注意,由于交互模式下绘图都是一闪而过,因此通过plt.pause(n)暂停GUI显示n秒才能得到连续有显示的图像

    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def io_test():
        fig = plt.figure()  # 生成画布
        plt.ion()  # 打开交互模式
        for index in range(50):
            fig.clf()  # 清空当前Figure对象
            fig.suptitle("3d io pic")
    
            # 生成数据
            point_count = 100  # 随机生成100个点
            x = np.random.random(point_count)
            y = np.random.random(point_count)
            z = np.random.random(point_count)
            color = np.random.random(point_count)
            scale = np.random.random(point_count) * 100
            ax = fig.add_subplot(111, projection="3d")
            # 绘图
            ax.scatter3D(x, y, z, s=scale, c=color, marker="o")
            ax.set_xlabel("X")
            ax.set_ylabel("Y")
            ax.set_zlabel("Z")
            # 暂停
            plt.pause(0.2)
    
        # 关闭交互模式
        plt.ioff()
    
        plt.show()
    
    
    if __name__ == '__main__':
        io_test()
    

    上述代码演示了三维空间如何动态显示100个随机点的变化,使用录制软件得到的动图如下,其本质就是不停显示不同的图像而已。

    在这里插入图片描述

    动图保存

    很多时候我们的需求并不是在窗口中动态显示图像,还需要保存到本地GIF图像,显然使用录制工具是一个比较低效的用法,Matplotlib的animation模块提供了两个动画绘制接口,分别是FuncAnimationArtistAnimation,它们都是继承自TimedAnimation的类,因而也具有Animation对象的通用方法,如Animation.save()Animation.to_html5_video()两个方法实例化一个Animation对象后均可调用,前者表示将动画保存为一个图像,后者表示将动画表示为一个HTML视频。

    • FuncAnimation: 通过反复调用同一更新函数来制作动画。
    • ArtistAnimation: 通过调用一个固定的Artist对象来制作动画,例如给定的图片序列或者Matplotlib的绘图对象。

    下面给出上述两个类的构造函数所需参数,它们的主要参数也是类似的,都是一个Figure对象作为画布,然后一个对象作为更新的实现方式(前者需要一个反复绘图的更新函数,后者则为一个图像列表或者绘图对象列表)。

    ani = animation.FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)
    ani = animation.ArtistAnimation(fig, artists, *args, **kwargs)
    

    相比较而言,我更喜欢使用FuncAnimation,它的使用要求简洁且定制化程度较高。但是如果想将很多图片合并为一个动图,那么ArtistAnimation是最合适的选择。

    下面的代码演示了如何保存一个动态变化渲染的柱状图,ArtistAnimation传入了一个图像序列,序列中每个元素为绘制的柱状图。然后通过使用Animationsave方法保存了动态图,**需要注意的是,这里有个动画写入器(writer)可以选择,默认不是pillow,我个人觉得pillow安装简单一些。

    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    
    fig, ax = plt.subplots()
    x, y, tmp = [], [], []
    
    for i in range(10):
        x.append(i)
        y.append(i+1)
        temp = ax.bar(x, height=y, width=0.3)
        tmp.append(temp)
    
    ani = animation.ArtistAnimation(fig, tmp, interval=200, repeat_delay=1000)
    ani.save("bar.gif", writer='pillow')
    

    上面代码的执行结果如下图。

    在这里插入图片描述

    接着,演示使用范围更广的FuncAnimation如何使用。下面的代码中,动态展示了梯度下降在三维图上的优化过程,其中最为核心的代码如下。用于构造Animation对象的除了画布就是一个更新函数,在这个更新函数内部多次绘制散点图从而形成动态效果, frames是帧数,如果设置了这个帧数,那么update函数第一个参数必须有一个num占位,这个numAnimation对象维护,每次内部执行update会自动递增,后面的参数列表fargs只需要传入除了num后面的参数即可。

    def update(num, x, y, z, ax):
        x, y, z = x[:num], y[:num], z[:num]
        ax.scatter3D(x, y, z, color='black', s=100)
        return ax
    
    ani = animation.FuncAnimation(fig, update, frames=25, fargs=(x_list, y_list, z_list, ax3d), interval=50, blit=False)
    

    上面的代码演示效果如下图,完整的代码附在文末补充说明中。

    在这里插入图片描述

    补充说明

    本文介绍了如何使用Matplotlib绘制动态图,主要通过交互模式和animation模块进行,如果觉得有所帮助,欢迎点赞。

    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib.animation as animation
    
    
    def GD(x0, y0, lr, epoch):
        f = lambda x, y: x ** 2 - y ** 2
        g_x = lambda x: 2 * x
        x, y = x0, y0
        x_list, y_list, z_list = [], [], []
        for i in range(epoch):
            x_list.append(x)
            y_list.append(y)
            z_list.append(f(x, y) * 1.01)
    
            grad_x, grad_y = g_x(x), g_x(y)
            x -= lr * grad_x
            y -= lr * grad_y
            print("Epoch{}: grad={} {}, x={}".format(i, grad_x, grad_y, x))
            if abs(grad_x) < 1e-6 and abs(grad_y) < 1e-6:
                break
        return x_list, y_list, z_list
    
    
    def update(num, x, y, z, ax):
        x, y, z = x[:num], y[:num], z[:num]
        ax.scatter3D(x, y, z, color='black', s=100)
        return ax
    
    
    def draw_gd():
        fig = plt.figure()
        x, y = np.meshgrid(np.linspace(-3, 3, 1000), np.linspace(-3, 3, 1000))
        z = x ** 2 - y ** 2
        ax3d = plt.gca(projection='3d')
        ax3d.set_xlabel("X")
        ax3d.set_ylabel("Y")
        ax3d.set_zlabel("Z")
        plt.tick_params(labelsize=10)
        ax3d.plot_surface(x, y, z, cstride=20, rstride=20, cmap="jet")
    
        x_list, y_list, z_list = GD(-3, 0, 0.01, 100)
        x_list, y_list, z_list = np.array(x_list), np.array(y_list), np.array(z_list)
    
        ani = animation.FuncAnimation(fig, update, frames=25, fargs=(x_list, y_list, z_list, ax3d), interval=50, blit=False)
        ani.save('test.gif')
    
    
    if __name__ == '__main__':
        draw_gd()
    
    更多相关内容
  • 最近帮学校官方微信做了一个头像合成的小页面,用户可以自己选择本地照片,上传并裁剪后,与学校logo合成最终图片,用户可以长按保存到本地,同样,我也把他放到了...test.gif这个页面全部前端完成,因为HTML5的强...

    最近帮学校官方微信做了一个头像合成的小页面,用户可以自己选择本地照片,上传并裁剪后,与学校logo合成最终图片,用户可以长按保存到本地,同样,我也把他放到了GitHub,效果大概下面这个样子。因为有官方微信的推广,点击量分分钟过5千,虽然是个很一般的东西,自己写的代码也很一般,都是看着朋友圈很多人用着通过自己写的制作器做的头像,感觉很棒哦。

    test.gif

    这个页面全部在前端完成,因为HTML5的强大,我没写一句后台代码,此外非常感谢这么优秀的开源项目Cropper.js,为我们提供了这么好的裁剪插件。但是在做的过程中,还是遇到了不少问题,特别是canvas绘的图在手机等高分辨率设备上,会变模糊的问题,所以还是有必要总结一下。

    Canvas绘图API使用

    关于canvas的其他知识自行查阅API,今天直接上手canvas绘制图像。你需要知道

    1.canvas的width和height 和css 的width和height不是一回事

    image.png

    image.png

    可以看出canvas的css width,height分别为400px,画布width,height为200,200是把css像素分成了200份,所以填充宽度为100,却占了csswidth的1/2.

    结论(假设cx指画布长度单位)

    canvas画布的默认宽高300*150

    css width和height决定你在屏幕上占多大空间,在你不设置的时候,默认和画布大小一致

    当你的css宽高和画布宽高不一样时,会有一个兑换关系,这会导致一些奇怪的问题。比如说css width:450px;height:300px; 画布没有设置的话。默认300cx150cx,所以水平方向1cx=450/300=1.5px 垂直方向1cx=300/150=2px 。所以你这个时候画一个100100的正方形,画出来的是1.5100,2100的长方形,人家本来是我们数学里学的标准坐标轴,你强行让人家单位长度不同了。所以如果没有必要,不要修改canvas的css width和height,这时候1cx=1px,而且水平方向和垂直方向是一样的,如果你非要改,起码让他们比例一样,即水平方向1cx等于几个px,在垂直方向保持一致

    在canvas里绘图,用到的所有长度单位都是指cx.默认情况下,1cx=1px.

    2.看绘图上下文提供的相关API

    context.drawImage(image,x,y)

    x,y为画布中画图的起始坐标,用此方法绘制出的图像与原图大小一致,即如果图片尺寸为640320,那么即640cx320cx,默认cx=px

    context.drawImage(image,x,y,w,h)

    w,h指绘制出来的图像的宽度与高度,比例与原图宽高最好一致,图像不会变形。

    context.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh);

    此方法可用于绘制图像的局部区域,sx,sy为局部区域的起始点坐标,sw,sh为局部区域的宽高。(sx,sy,sw,sh) 与(dx,dy,dw,dh)没有关系,前者表示从哪里截取,取多大,后者表示你要在哪里放,在多大的地方放,可以放大或者缩小。如可以用于局部放大,实现特写效果

    上述方法中的image 均指image对象

    var img=new Image();

    img.src="" //指定url

    img.οnlοad=function(){

    //绘制图像

    }

    3.实现图像组合

    用canvas实现图像组合也很简单,可以通过设置图形上下文的globalCompositeOperation 属性来决定图像组合模式

    如我实现这个图像合成的效果,我想要的logo不动,然后用户图像绘制在其下方。

    image.png

    其他模式还有很多,请自行查阅API

    4.如何将canvas绘制的图形保存成图片

    其实canvas绘制的任何东西都可以保存为图片,代码也很简单

    var oCanvas=document.getElementById("myCanvas");

    var src=oCanvas.toDataURL("image/png") ;

    //然后你就可以随便怎么利用,你可以利用HTML5 a标签 download属性,也可以将其通过img标签展示到

    //页面,然后长按/右键保存到本地

    利用canvas在高清屏绘制图像的大坑

    一开始没有发现这个问题,但是发给别人头像制作器的链接,别人跟我说生成的头像太模糊了,我自己试了下,的确很模糊,于是就百度了下,还好这是一个有目共睹的坑,所以一百度就找到了解决办法。

    出现这个问题的原因就是,在手机等高清屏设备上,存在一个devicePixelRatio,这个东西对于搞移动端web开发还是比较重要的,你在开发移动端网页是,开头常常会写一个name为viewport的标签也与这个东西有关。详情请看我的移动端开发必须知道的viewport

    解决办法也很简单,先通过hidpi-canvas-polyfill提供的函数获得PixelRatio

    var getPixelRatio = function(context) {

    var backingStore = context.backingStorePixelRatio ||

    context.webkitBackingStorePixelRatio ||

    context.mozBackingStorePixelRatio ||

    context.msBackingStorePixelRatio ||

    context.oBackingStorePixelRatio ||

    context.backingStorePixelRatio || 1;

    return (window.devicePixelRatio || 1) / backingStore;

    };

    然后,将canvas画布宽高先扩大PixelRatio 倍,然后再用css将宽高缩小到原来的宽高。经测试,当原图比画布大小大时,此方法比不用此方法清晰的多,当原图大小与canvas大小一样时,这个问题不是很明显。

    展开全文
  • 主要介绍了Android编程绘制圆形图片的方法,结合实例形式较为详细的分析了Android通过自定义控件实现图形绘制的相关技巧,需要的朋友可以参考
  • 组合图像 版本 0.1.0 将图像与画布合并 更改日志 ... 如果指定负值,则在绘制时将水平翻转图像。 sHeight - 要绘制到目标上下文中的源图像子矩形的高度。 如果指定负值,则在绘制时将垂直翻转图像。 dx
  • Blender雕刻模块:如何雕刻过程中无缝合并物体

    千次阅读 多人点赞 2019-08-31 13:38:34
    雕刻过程中经常会新建一些物体然后合并进来一起雕刻,但是实际操作中会出现很多意想不到的问题 例如:简单地把两个物体Ctrl + J合并到一起 使用Smooth笔刷无法去掉衔接处的缝隙 即使缝隙处用Clay Strips笔刷涂...

    本文基于Blender 2.8正式版

    在雕刻过程中经常会新建一些物体然后合并进来一起雕刻,但是实际操作中会出现很多意想不到的问题

    例如:简单地把两个物体Ctrl + J合并到一起
    Ctrl + J

    使用Smooth笔刷无法去掉衔接处的缝隙
    衔接处的缝隙无法用平滑笔刷去掉

    即使在缝隙处用Clay Strips笔刷涂上厚厚的一层,也很容易穿帮。

    很容易穿帮

    解决方法:使用自带插件BoolTool中的Union无缝合并可以一步到位!
    1. 激活BoolTool

    BoolTool是Blender自带的老牌插件,在插件页面激活即可。
    激活BoolTool

    2. 无缝合并

    选择要合并的物体Ctrl + Shift + B调出BoolTool的菜单,选择Union或者直接使用快捷键Shift + Ctrl + 数字键盘+即可。

    无缝合并

    无缝合并后的物体就可以通过Smooth笔刷轻松去掉衔接处的缝隙了

    轻松去掉衔接处的缝隙

    小结
    其实Ctrl + J合并只能算是简单的把两个物体组合到了一个物体并不对拓扑结构做任何改变,而BoolTool中的Ctrl + Shift + 数字键盘+合并相当于进行了布尔运算中合并,自然就浑然一体了

    展开全文
  • 多边形绘制

    千次阅读 2014-09-13 19:14:31
    绘制模式 绘制多边形时除了默认的填充方式,还可以使用点和线 使用glPolygonMode函数来设置模式 三种不同模式下的绘图  GL_FILL   GL_LINE GL_POINT 多边形的两面 如果以...

    绘制模式

    在绘制多边形时除了默认的填充方式,还可以使用点和线

    使用glPolygonMode函数来设置模式

    image

    三种不同模式下的绘图 
    GL_FILL

    image 
    GL_LINE

    image

    GL_POINT

    image

    多边形的两面

    如果以顺时针绘制则是反面,逆时针绘制则是正面 

    // 设置正面为填充模式
    glPolygonMode(GL_FRONT, GL_FILL); 
    // 设置反面为线形模式
    glPolygonMode(GL_BACK, GL_LINE); 
    
    // 设置逆时针绘制一个正方形
    glBegin(GL_POLYGON);              
        glVertex2f(-0.5f, -0.5f);
        glVertex2f(0.0f, -0.5f);
        glVertex2f(0.0f, 0.0f);
        glVertex2f(-0.5f, 0.0f);
    glEnd();
    // 设置顺时针绘制一个正方形
    glBegin(GL_POLYGON);             
        glVertex2f(0.0f, 0.0f);
        glVertex2f(0.0f, 0.5f);
        glVertex2f(0.5f, 0.5f);
        glVertex2f(0.5f, 0.0f);
    glEnd();
    显示效果如下  
    image

    切换正反面

    可以使用glFrontFace函数来调换正面与反面的概念

    glFrontFace(GL_CCW);  // 设置CCW方向为“正面”,CCW即CounterClockWise,逆时针 
    glFrontFace(GL_CW);   // 设置CW方向为“正面”,CW即ClockWise,顺时针

    下面为使用glFrontFace(GL_CW)的效果

    image

    剔除多边形表面

    下面的话转的 
    在三维空间中,一个多边形虽然有两个面,但我们无法看见背面的那些多边形,而一些多边形虽然是正面的,但被其他多边形所遮挡。如果将无法看见的多边形和可见的多边形同等对待,无疑会降低我们处理图形的效率。在这种时候,可以将不必要的面剔除。 
    首先,使用glEnable(GL_CULL_FACE);来启动剔除功能(使用glDisable(GL_CULL_FACE)可以关闭之) 
    然后,使用glCullFace来进行剔除。 
    glCullFace的参数可以是GL_FRONT,GL_BACK或者GL_FRONT_AND_BACK,分别表示剔除正面、剔除反面、剔除正反两面的多边形。 
    注意:剔除功能只影响多边形,而对点和直线无影响。例如,使用glCullFace(GL_FRONT_AND_BACK)后,所有的多边形都将被剔除,所以看见的就只有点和直线。

    着色模型

    即颜色可以渐变色,如默认情况下

    void display(void)
    {
       glClear(GL_COLOR_BUFFER_BIT);
       glColor3f (1.0, 0.0, 0.0);
       glBegin(GL_POLYGON);
       glVertex2f(120,100);
       glVertex2f(280,100);
       glVertex2f(150,240);
       glEnd();
       glFlush ();
    }

    image

    使用glShadeModel函数指定着色模型,默认为GL_FLAT即单色,GL_SMOOTH则可以使得颜色平滑,即渐变色

    GL_SMOOTH模式

    void display(void)
    {
       glClear(GL_COLOR_BUFFER_BIT);
       glColor3f (1.0, 0.0, 0.0);
       glBegin(GL_POLYGON);
       glVertex2f(120,100);
       glColor3f (1.0, 1.0, 0.0);
       glVertex2f(280,100);
       glColor3f (0.0, 1.0, 1.0);
       glVertex2f(150,240);
       glEnd();
       glFlush ();
    }

    如下图

    image

    展开全文
  • 第二章 绘制与编辑对象 Flash新增功能 合并绘制模式 重叠绘制图形时图形会自动进行合并 填充色相同的融合一起产生相加效果 填充色不同的部分产生减切效果 对象绘制模式 制作成独立的对象不会自动合并 第一节 绘图...
  • Android渲染性能——过度绘制

    万次阅读 2020-11-25 20:15:23
    过度绘制是我们开发过程中,常见的一种性能问题,按照性能影响的分类,它应该属于渲染性能。那么过度绘制到底代表了什么含义呢?我们又如何能够避免过度绘制呢?
  • 曲线合并代码matlab ePhysDataPlotta 是用于绘制电生理数据的大多数高级Matlab例程的集合...分析并绘制电流钳模式下的单元格对正弦斜坡电流注入的响应 有关ExpAnesth组织中存储库的一般说明 这些存储库中的代码为图宾根
  • 使用Matlab将多个图形Figure文件合并

    千次阅读 2021-09-12 17:43:57
    0. 原由Matlab使用过程中,会遇到需要将多个图形Figure文件合并成一个文件的需求,便于一个坐标轴内对曲线进行合并的显示和比较。如图:分别使用P控制、PID控制、模糊PID控制、神经网络PID控制方法,得到了某...
  • 过度绘制和渲染

    2021-10-07 00:17:49
    我认为所谓的 UI 优化,应该包含两个方面:一个是效率的提升,我们可以非常高效地把 UI 的设计图转化成应用界面,并且保证 UI 界面不同尺寸和分辨率的手机上都是一致的;另一个是性能的提升,正确实现复杂、炫酷...
  • Android性能优化--过度绘制

    千次阅读 2017-05-12 17:58:18
    渲染机制前提知识android 的渲染主要分为两个组件:1.CPU 2.GPU,由这两者共同完成屏幕上绘制 。 CPU:中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理为多维图形,纹理(Bitmaps、Drawables等...
  • 屏幕上绘制一个物体,引擎必须发送一个绘制命令(Draw Call...动态批处理:适用于面数比较小的物体,Unity会动态的将这些小物体的网格合并在一起,然后一次性绘制 静态批处理:将静态的物体的网格合并成一个大网格
  • Flash 动画制作综合模拟习题及解答 2015 秋 一单项选择题 1. 如图所示要创建冰雕旋转并逐渐消失的动画应该使用动画的哪种类型 A 图 A.... 在合并绘制模式下绘制了如左图所示的一个椭圆下面哪种操作可
  • Flash 动画制作综合模拟习题及解答 2015 秋 一单项选择题 1. 如图所示要创建冰雕旋转并逐渐消失的动画应该使用动画的哪种类型 A 图 A.... 在合并绘制模式下绘制了如左图所示的一个椭圆下面哪种操作可
  • PAGE 1 Flash动画制作模拟题2 一单项选择题 ...图 缩放 旋转 扭曲 封套 在合并绘制模式下绘制了如左图所示的一个椭圆下面哪种操作可以椭圆图形变成右边图形的效果 选择菜单栏的修改/修改/柔化填充边缘然后使用选择工具
  • Flash 动画制作综合模拟习题及解答 2015 秋 一单项选择题 1. 如图所示要创建冰雕旋转并逐渐... 缩放 B旋转 C扭曲 D封套 在合并绘制模式下绘制了如左图所示的一个椭圆下面哪种操作可以椭圆图形变成右边图形的效果 A 选
  • . . . . doc. . PAGE / NUMPAGES doc. . . .... Flash动画制作期末模拟试题 一单项选择题每小题2分共40分 如图所示要创建冰雕旋转并逐渐消失的动画应该使用动画...图 缩放 旋转 扭曲 封套 在合并绘制模式下绘制了如左图所
  • 本文描述了Cocoa中设计模式的主要实现,主要关注模型(Model) - 视图(View) - 控制器(Controller)和对象建模。 本章的主要目的是让您更深入地了解Cocoa的设计模式,并鼓励您自己的软件项目中利用这些模式
  • python绘制菱形

    千次阅读 2020-11-23 22:41:48
    首先,将数据读入到python中,并绘制出生率和死亡率数据的散点图,代码如下:# 导入模块import pandas as pdform matplotlib.pyplot as plt #读取外部数据province =pd.read_excel(rc:usersadministr...
  • Android开发者选项之GPU过度绘制

    千次阅读 2017-09-04 09:09:00
    Android开发者选项之GPU过度绘制
  • PAGE PAGE 12 Flash动画制作综合模拟习题及解答2015秋 一单项选择题 如图所示要创建冰雕...缩放 B旋转 C扭曲 D封套 在合并绘制模式下绘制了如左图所示的一个椭圆下面哪种操作可以椭圆图形变成右边图形的效果A 选择菜单
  • 其实这两个工具所解决的问题并不相同,之所以把它们放在一起,是因为它们都是Android手机自带的分析工具,我们只要设置中对应的开关,就可以实时获得分析的结果,下面,我们就一起来看一下如何使用它们。 二、调试 GPU...
  • PHP 并不仅限于创建 HTML 输出, ... 要想 PHP 中使用图像处理功能,你需要连带 GD 库一起来编译 PHP。 GD 库和 PHP 可能需要其他的库, 这取决于你要处理的图像格式。 你可以使用 PHP 中的图像函数来获取下列格式
  • 绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的...在绘制文字时会默认使用抗锯齿。 QPainter painter(this); painter.setPen(Qt...
  • 文章目录实验1.1的配置理论背景着色器与OpenGL着色器的编译绘制简单图形的代码解析实验 1.2实验 1.2习题实验一实验一 最终成品展示: 包括了实验1.1 1.2和实验一以及对应代码的解析 实验1.1的配置 配置详细见配置...
  • Windows S模式下的Surface Go软件体验

    千次阅读 2021-01-15 00:14:17
    为了保持良好的流畅度,我一直没有退出S模式,于是现在我可以来谈谈Windows S模式下的Surface Go的软件体验了。我特意来说一下S模式下的应用软件,就是为了向大家说明S模式也能满足使用需求。保留S模式可以维持更高...
  • 立创EDA学习笔记(4)——原理图绘制

    万次阅读 多人点赞 2021-11-25 16:31:46
    一、画布设置 1.1 画布属性 点击空白区可右边属性面板查看和修改画布属性,或者鼠标右击空白区打开属性弹窗进行修改。画布属性内的参数均可以被自行配置。网格和栅格尺寸单位为...比如你原理图A页和B页均放置了网
  • cam = aggregate_multi_layers(cam_per_target_layer) # 将多层进行合并 grayscale_cam = grayscale_cam[0] visualization = show_cam_on_image(img.astype(dtype=np.float32) / 255., grayscale_cam, use_rgb=True)...
  • Android绘制优化(二)布局优化

    千次阅读 2017-03-27 11:18:05
    我们知道一个界面的测量和绘制是通过递归来完成的,减少布局的层数就会减少测量和绘制的时间,从而性能就会得到提升。当然这只是布局优化的一方面,那么如何来进行布局的分析和优化呢?本篇文章会给你一个满意的答案...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,973
精华内容 13,189
关键字:

在合并绘制模式下