OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集

绘图引擎简介

Windows环境下二维绘图引擎有多种选择:GDI、GDI+、DirectDraw、Qt/QPainter、Agg、Cairo、skia、Direct2D、Direct3D、OpenGL、Vulkan等。

GDI:微软原生的二维绘图引擎。

优点:微软的全力支持,作为操作系统核心层效率方面不用担心,支持多种开发框架(含语言):WinSDK、MFC、Delphi等。

缺点:不是面向C++对象组织的,使用起来较为繁琐;不支持反锯齿,不支持复杂的绘图效果(这个相对于GDI+而言)。

GDI+:微软后来推出的二维绘图引擎。

优点:微软的全力支持,支持多种开发框架(含语言):WinSDK、MFC、Delphi等,可以实现复杂的绘图效果,如反锯齿、路径画刷等;面向对象的架构,使用起来比较方便。

缺点:绘图效率较GDI稍低,绘图交互性不如GDI(缺少GDI的支持位运算的绘图模式),开启反锯齿后效率不如Qt。如果不考虑绘图的效果,使用Win32 GDI函数直接绘图的效率大约是同样的GDI+的10倍以上。

DirectDraw:从GDI、GDI+到Direct 2D的一个过渡产品,微软已明确表示不推荐使用。

Qt:Qt的二维图形引擎是基于QPainter类的,绘图的效果取决于QPainter的设置。面向对象的方式组织,使用起来较为方便。

Agg:C++编写的开源绘图引擎(基于GPL协议).AGG是C++编写的,因此,它不能被C语言很好地调用。由于其中使用了大量的现代标准C++语言的语法规则,包括模板、仿函数等处理 ,导致这样的库的学习过程将是痛苦的。AGG自从2006年之后就没有更新过。

Cairo:C编写的开源绘图引擎(基于LGPL协议),大名鼎鼎的FireFox就是用这个绘图引擎的。Cairo是非常流行的开源2D图形渲染引擎库,它支持包括X-Windos,Win32,图像,pdf在内的各种输出设备。目前,Cairo已被广泛的使用在多个平台上来渲染图形界面,包括Firefox/Webkit-EFL/GTK+/Poppler/Qt等等。GTK+底层的绘图引擎就是使用Cairo。Qt的QPainter提供的抗锯齿效果没有cairo的好,在理想情况下,cairo的用户可以在打印机和屏幕上获得非常接近的输出效果。cairo 是用 C 编写的,但是为大多数常用的语言提供了绑定。选用 C 语言有助于创建新的绑定,同时在进行 C 语言调用时可以提供高性能。应该特别注意 Python 绑定,它支持快速原型开发,而且降低了学习 cairo 绘图 API 的门槛。 Cairo的绘图效率是接近GDI/GDIPlus的。经过优化算法,可以做到完全忽略绘图效率上的差别。此外,gtk不如qt流行,Qt支持cairo。

Skia:Google的Android的绘图引擎。它是一个C++的开源2D向量图形处理函数库,包括字型、坐标转换、位图等等,相当于轻量级的Cairo(Cairo是矢量图形库)。

angle:Google宣布了新的开源项目 ANGLE (全称 Almost Native Graphics Layer Engine),这个项目的目标是在 Direct X 9.0c API 的基础上实现一层 OpenGL ES 2.0 API中 的 Web GL 子集接口。在开发的早期,ANGLE 项目将使用 BSD 授权发布,而最终完成后,类似 Google Chrome 之类的浏览器在 Windows 平台上运行 WebGL 内容将不再依赖于任何的 OpenGL 驱动程序。

Direct2D:微软在WindowsVista及之后的Windows版本推出的意在取代GDI、GDI+的二维绘图引擎,支持硬件加速。Direct 2D是微软在后XP时代开发的开发二维绘图引擎。微软出于兼容性的考虑还会继续对GDI、GDI+进行支持,但毫无疑问微软的策略是要Direct 2D取代GDI和GDI+的,因此在WindowsVista及其之后的Windows上进行二维绘图开发,建议是直接使用Direct2D。Direct 2D支持硬件加速,在绘图效率应有一定程度的提升。

Direct3D:微软开发的3D绘图引擎。

OpenGL:SGI开发的3D绘图引擎。OpenGL的优势是三维绘图,不建议用来二维绘图,因为OpenGL在二维一些操作并不合适,如二维中的点、线捕捉、自定义图例的添加、打印的支持等等。

Vulkan:Vulkan是一个跨平台的2D和3D绘图应用程序接口。同 OpenGL一样,Vulkan也由 Khronos 集团开发。它是 AMD Mantle 的后续版本,继承了前者强大的低开销架构,使软件开发人员能够全面获取 RadeonGPU 与多核 CPU 的性能、效率和功能。Linux上Vulkan是OpenGL的指定接班人。

 

OpenGL

opengl.org:OpenGL官方网站。
OpenGL registry:包含OpenGL各版本的规范和扩展。

《OpenGL超级宝典》中的例子使用了glew,freeglut以及作者自己开发的GLTools这三个库

  • glew

http://glew.sourceforge.net/ The OpenGL Extension Wrangler Library

GLEW是一个跨平台的OpenGL的扩展库。进入官网,点击Binaries后面的链接,可以下载msvc已编译的库文件,含32位和64位。

https://sourceforge.net/projects/glew/files/

https://github.com/nigels-com/glew

  • freeglut

FreeGLUT is a free-software/open-source alternative to the OpenGL Utility Toolkit (GLUT) library。

http://freeglut.sourceforge.net/index.php

https://www.transmissionzero.co.uk/software/freeglut-devel/ 这个网站可以下载msvc已编译的库文件,含32位和64位。

  • GLTools

A set of tools to make working with OpenGL easier

https://github.com/HazimGazov/GLTools

http://starstonesoftware.com/

  • glfw

https://www.glfw.org/download.html A multi-platform library for OpenGL

https://github.com/glfw/glfw

https://github.com/glfw/glfw/releases

  • glad

https://github.com/Dav1dde/glad

https://glad.dav1d.de/

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第1张图片

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第2张图片

  • CG Internals

https://www.cginternals.com/en/  Computer Graphics Internals

https://github.com/cginternals

https://github.com/cginternals/cmake-init Template for reliable, cross-platform C++ project setup using cmake

https://glbinding.org/ A C++ binding for the OpenGL API

https://globjects.org/ C++ library strictly wrapping OpenGL objects

  • OpenGL binding

https://github.com/JoeyDeVries/Cell ++ https://github.com/assimp/assimp 这两个要配套使用

https://github.com/luca-piccioni/OpenGL.Net

https://github.com/moderngl/moderngl

  • 其它

https://github.com/wjakob/nanogui Minimalistic GUI library for OpenGL

https://github.com/NVIDIAGameWorks/GraphicsSamples

https://github.com/assimp/assimp 模型导入

  • OpenGL学习教程

https://learnopengl-cn.github.io/ ++ https://learnopengl.com/

https://github.com/JoeyDeVries/LearnOpenGL ++ https://github.com/JoeyDeVries/Cell

http://www.opengl-tutorial.org/ ++ https://github.com/opengl-tutorials/ogl

  • gult/freegult/glew/glfw/glad概念详解

请访问我的另一篇博文《OpenGL之gult/freeglut/glew/glfw/glad的联系与区别

https://libaineu2004.blog.csdn.net/article/details/105879521

 

Vulkan

Vulkan(昵称“火山”或者“福尔康”),采用跨平台设计,但最重要的贡献是大幅降低绘制命令开销(draw call overhead),改善多线程性能,渲染性能更快,背后的理念和DX12和Mantle都是一致的。另外,Vulkan还会统一桌面的OpenGL和移动平台的OpenGL ES,而且谷歌已经明确了Android将会支持Vulkan。Vulkan的最大任务不是竞争DirectX,而是取代OpenGL,所以重点要看和后者的对比。在高分辨率、高画质、需要GPU发挥的时候,Vulkan、OpenGL的速度基本差不多,但是随着分辨率的降低,CPU越来越重要,Vulkan逐渐体现了出来,尤其是看看GTX 980 Ti,最多可以领先OpenGL 33%之多!

https://www.khronos.org/registry/vulkan/

  • Vulan学习教程

https://learnvulkan.com/

https://github.com/SaschaWillems/Vulkan

 

Cairo

https://www.cairographics.org/

https://www.cairographics.org/samples/

https://www.cairographics.org/download/

https://www.cairographics.org/releases/ 源码下载

https://www.cairographics.org/cairomm/ C++ API for cairo

cairo的应用案例是scribus软件,使用C++/Qt GUI

scribus-1.5.5\scribus\scpainter.cpp

scribus-1.5.5\scribus\scpainterex_cairo.cpp

scribus-1.5.5\scribus\scpainterex_ps2.cpp

cairo通过ScPainter类构造函数来和Qt的QImage做衔接:

ScPainter::ScPainter( QImage *target, int w, int h, double transparency, int blendmode )
{
    m_image = target;
    ...
    cairo_surface_t *img = cairo_image_surface_create_for_data(m_image->bits(), CAIRO_FORMAT_ARGB32, w, h, w*4);
    cairo_surface_set_device_scale(img, m_image->devicePixelRatio(), m_image->devicePixelRatio());
}

scribus软件的详情见我的另一篇博客《Scribus v1.5.5源码编译,使用VS2017+Qt5.12.7环境》

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第3张图片

 

Google 2D图形库Skia

介绍Skia图形库之前,先来看看Windows平台下的两大绘图API,分别是GDI和GDI+。

  • GDI

由于没有复杂的抗锯齿处理,绘图效率非常不错,但是同样的绘制质量不好。没有半透明的处理功能,在对界面要求不高而对性能要求比较高的应用程序里面使用比较多,比如股票软件。

  • GDI+

GDI的升级版本,Windows独立提供了一个GDIPlus.dll的动态库,具有跨语言特性,C++,C#,VB都可以使用。 API封装性也比较好,支持丰富的半透明处理功能和文字处理特效。 具备抗锯齿绘制的能力。同样的也有其弊端,主要表现在:

  1. 绘制性能低下,连续绘制1000张大图片CPU基本就扛不住了
  2. 部分API存在bug,最典型的就是文字大小计算,计算不准确,在文字处理场景下存在一定的弊端。
  3. 没有特效的处理能力,比如模糊处理,发光处理,三维旋转效果,只提供了2D的选择和矩阵透视变形特效。

所以使用GDI和GDI+在一些复杂的场景下使用非常受限。有人说可以用OpenGL和DirectX来处理,这两个API库需要实现大量的底层功能,比如文字栅格化等等,另外依赖显卡的驱动,对低配置计算机不是很友好。除了以上的选择之外Google的Skia的推出确实帮助我们解决了一部分问题,在此基础上我们做对应的扩展即可让我们实现复杂的绘制效果。

  • Skia

Skia是一个C++的开源2D向量图形处理函数库(Cairo是一个矢量库),包括字型、坐标转换、位图等等,相当于轻量级的Cairo。目前主要用于Google的Android和Chrome平台,Skia搭配OpenGL/ES与特定的硬件特征,强化显示的效果。Skia需要的底层库有:freetype2,expat,tinyxml。

 https://skia.org/ 官方网址

https://skia.googlesource.com/skia 官方源码下载

https://skia.org/user/build 官方编译教程 

https://github.com/google/skia 镜像源码仓库

https://github.com/aseprite/aseprite ++ https://github.com/aseprite/skia/releases ++ \

++ https://github.com/aseprite/skia/actions 他人已编译好的库【推荐,版本新,静态库,MTd/MT运行时库】

https://github.com/rust-skia/skia ++ https://github.com/rust-skia/skia-binaries/releases 他人已编译好的库【不推荐,没有d】

https://github.com/mpsuzuki/skia-binaries/releases 他人已编译好的库,版本旧

https://github.com/mono/SkiaSharp Skia C#版本

https://libaineu2004.blog.csdn.net/article/details/105931395 我个人写的skia编译教程,VS2017【推荐】

  • Skia for Qt

https://github.com/QtSkia/QtSkia  把skia集成到Qt中

https://gitee.com/QtSkia/QtSkia

https://github.com/jaredtao

https://jaredtao.github.io/

  • 应用案例

https://github.com/nitramr/Draftoola skia库的应用案例,C++/Qt【推荐】

 

Google 3D图形库angle

https://github.com/google/angle  ++ https://github.com/Microsoft/angle

 

VTK

https://vtk.org/

Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。

https://github.com/lorensen/VTKExamples

https://lorensen.github.io/VTKExamples/site/Cxx/ 官方文档

https://blog.csdn.net/webzhuce 阿兵-AI医疗 VKT中文教程

https://gitee.com/yaoxin001/openBrowser 基于QT 一个开源的文件浏览器,使用了VTK

 

OpenVG

http://www.hygraphics.com/

https://github.com/memononen/nanovg

https://github.com/memononen/nanosvg

gingkoVG是原生OpenVG的全功能实现,她是完全遵循OpenVG 1.0.1的Spec定义;其目标是为嵌入系统提供切实可以运行的低成本的OpenVG的实现,以使在嵌入系统上使用OpenVG成为可能;

SVG是一种图像文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。

 

开源图像绘制和处理软件

GIMP是跨平台的图像处理程序。GIMP 是 GNU 图像处理程序(GNU Image Manipulation Program)的缩写。包括几乎所有图象处理所需的功能,号称Linux下的Adobe PhotoShop。GTK+( GIMP Toolkit ) 是一套在 GIMP 的基础上发展而来的高级的、可伸缩的现代化、跨平台图形工具包,提供一整套完备的图形构件。

KDE和GNOME是LINUX里最常用的图形界面操作环境。我们一般将GNOME和KDE两大阵营称为GNOME/GTK和 KDE/Qt。

https://www.gimp.org/

https://download.gimp.org/pub/gimp/

https://download.gimp.org/pub/gimp/stable/

https://download.gimp.org/pub/gimp/v2.10/windows/

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第4张图片

 

Inkscape是一款外国开发的开源矢量图形编辑软件,与Illustrator、Freehand、CorelDraw、Xara X 等其他软件相似。Inkscape是一套矢量图形编辑器,号称Linux下的CorelDraw。Inkscape is an open source 2d vector graphics editor.

https://inkscape.org/

https://gitlab.com/inkscape/inkscape C++/GTK+

 

darktable:是一个开源摄影工作流程应用程序和RAW原生图像处理工具。darktable号称linux版的lightroom。Adobe Photoshop Lightroom是Adobe 研发的一款以后期制作为重点的图形工具软件,是当今数字拍摄工作流程中不可或缺的一部分。

https://www.darktable.org/
https://github.com/darktable-org/darktable  C++/GTK

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第5张图片

 

Krita 是一款自由、免费、开源的专业绘画软件。它由懂得画画的程序员们开发,目标是打造一款人人都用得起的数字绘画工具。适用于: 概念美术设计等

https://krita.org/

https://invent.kde.org/kde/krita/tree/master  C++/Qt

https://github.com/KDE/krita

 

Kolourpaint是一款KDE下的全能画图应用,界面友好,支持如PNG, JPG, TGA, PNM, GIF, BMP, XPM 或 TIFF等等图片格式

http://www.kolourpaint.org/

https://github.com/KDE/kolourpaint  C++/Qt

https://kde.org/applications/graphics/org.kde.kolourpaint

https://cgit.kde.org/kolourpaint.git/

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第6张图片

 

Karbon是一个矢量绘图应用程序,具有易于使用,高度可定制和可扩展的用户界面.

https://calligra.org/karbon/

https://github.com/KDE/calligra/tree/master/karbon   C++/Qt

https://cgit.kde.org/calligra.git

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第7张图片

 

Paint.NET是Windows 平台上的一个图像和照片处理软件,早期定位于MSPaint(Windows画图板)的免费替代软件,支持图层、通道、无限制的历史记录、特效和许多实用工具,在3.3版本之前开源,之后由于种种原因放弃开源。Paint.NET v3.36是最终的开源版本。C#语言编写。

https://www.getpaint.net/ 官网,新版本exe下载

http://www.oldversion.cn/windows/paint-net/ 老版本exe下载

https://github.com/wangdeshui/paint.net

https://download.csdn.net/download/libaineu2004/12309098 我个人整理的源码,可以在VS2017编译通过

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第8张图片

 

Pinta:Simple Gtk# Paint Program

Pinta is a Gtk# clone of Paint.Net 3.0。Pinta是一个受PaintNET启发的开放源代码位图形编辑软件。它使用Gtk#、cairo和有些PaintNET的源代码。

https://pinta-project.com/pintaproject/pinta/

https://github.com/PintaProject/Pinta

 

MyPaint

http://mypaint.org/ MyPaint是一个绘画涂鸦软件,python,GTK写的

https://github.com/mypaint/mypaint 主要是配合数位绘图板使用,软件内置了易于使用的笔刷。

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第9张图片

 

Pencil2D:2D动画制作软件

https://www.pencil2d.org/ Qt

https://github.com/pencil2d/pencil

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第10张图片

 

https://github.com/zsnjuts/PaintWorks 图形学绘图系统Qt版(OpenGL绘制)

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第11张图片

 

https://github.com/egan2015/qdraw

画图软件,基于QGraphicsView实现,可画直线,矩形,椭圆,圆角矩形,不规则多边形,曲线等等基本功能,并且可编辑这些图形,代码封装完毕,可简单移植到项目中使用。

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第12张图片

 

https://github.com/douzhongqiang/EasyCanvas

基于Qt QGraphicsView的简易画图软件,作者https://blog.csdn.net/douzhq

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第13张图片

 

https://github.com/SillyLossy/QtPaint

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第14张图片

 

https://github.com/omiddavoodi/QtPaint

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第15张图片

 

https://github.com/smay1613/Qt-Paint

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第16张图片

 

https://github.com/bruceoutdoors/DrawingApp Qt

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第17张图片

 

https://github.com/Gr1N/EasyPaint Qt

https://www.linux-apps.com/content/show.php?content=140877

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第18张图片

 

https://github.com/mm-project/qt_painter

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第19张图片

 

https://github.com/drawpile/Drawpile ++ https://drawpile.net/ Qt

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第20张图片

 

RainyNite studio

https://github.com/caryoscelus/rainynite-studio

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第21张图片

 

LogoSpeech Studio

https://github.com/mohabouje/logospeech-studio

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第22张图片

 

Crimm Imageshop 2.3,软件经过UPX压缩,占用空间很小。UPX (the Ultimate Packer for eXecutables)是一款先进的可执行程序文件压缩器,压缩过的可执行文件体积缩小50%-70% 

https://www.cnblogs.com/Imageshop/p/3308782.html  

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第23张图片

 

https://photodemon.org/

https://github.com/tannerhelland/PhotoDemon

OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/GIMP/Krita等开源绘图库或软件收集_第24张图片

 

其它开源图形库

https://github.com/yuanming-hu/taichi 中国人写的太极图形库

http://taichi.graphics/ 太极图形库,作者胡渊鸣

https://libcinder.org/ 矢量图形库,2D/3D
https://github.com/cinder/Cinder

https://github.com/FortAwesome/Font-Awesome

https://github.com/drawpile/Drawpile

https://easyx.cn/ 国产绘图库for VC++

 

你可能感兴趣的:(精品资源推介,CAD/CAM)