当前位置:   article > 正文

开源项目推荐:OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/MyPaint/GIMP/Krita/Pencil2D/inkspace/enve等绘图库或画图软件_skia cairo

skia cairo

绘图引擎简介

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

GLEW: The OpenGL Extension Wrangler Library The OpenGL Extension Wrangler Library

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

The OpenGL Extension Wrangler Library - Browse Files at SourceForge.net

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

Starstone Software Systems, Inc.

  • glfw

Download | GLFW 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/

  • 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

glbinding A C++ binding for the OpenGL API

globjects 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学习教程

LearnOpenGL CN ++ Learn OpenGL, extensive tutorial resource for learning Modern OpenGL

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

Home ++ https://github.com/opengl-tutorials/ogl

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

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

开源项目推荐:OpenGL之gult/freeglut/glew/glfw/glad的联系与区别_libaineu2004的博客-CSDN博客_opengl开源项目

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%之多!

Khronos Vulkan Registry - The Khronos Group Inc

  • Vulan学习教程

Learn Vulkan - Welcome!

https://github.com/SaschaWillems/Vulkan

Cairo

cairographics.org

Cairo samples

Download

Index of /releases 源码下载

cairomm - A C++ API for cairo 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做衔接:

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

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

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#版本

Windows环境VS2017编译skia库,亲测成功,借助skui的方法_libaineu2004的博客-CSDN博客_skia 编译 我个人写的skia编译教程,VS2017【推荐】

  • Skia for Qt

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

QtSkia: google的 skia渲染框架, 集成到Qt中

https://github.com/jaredtao

涛哥的博客

  • 应用案例

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/

https://github.com/Kitware/VTK

Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。VTK底层是opengl,opengl是面向过程的c函数库。

https://github.com/lorensen/VTKExamples

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

阿兵-AI医疗的博客_CSDN博客-图像处理(OpenCV),Study-VTK,Python领域博主 阿兵-AI医疗 VKT中文教程

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

https://www.mitk.org/ MITK 

https://github.com/MITK/MITK The Medical Imaging Interaction Toolkit

https://www.paraview.org/ ParaView

https://github.com/Kitware/ParaView VTK-based Data Analysis and Visualization Application

OpenVG

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 PhotoShopGTK+( GIMP Toolkit ) 是一套在 GIMP 的基础上发展而来的高级的、可伸缩的现代化、跨平台图形工具包,提供一整套完备的图形构件。

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

GIMP - GNU Image Manipulation Program

Index of /pub/gimp

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

Index of /pub/gimp/v2.10/windows

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

Draw Freely | Inkscape

Inkscape / inkscape · GitLab Inkscape vector image editor,C++/GTK+,内置了几何库2geom(\inkscape-INKSCAPE_1_0_2\src\2geom\源码使用C++14编译器,依赖boost)

Inkscape / lib2geom · GitLab Easy to use 2D geometry library in C++,新版本使用C++ 17编译器

关于2geom库的用法:

src/path · master · Inkscape / inkscape · GitLab

tests · master · Inkscape / lib2geom · GitLab

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

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

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

Krita | Digital Painting. Creative Freedom.

Files · master · Graphics / Krita · GitLab  C++/Qt,依赖KDE

https://github.com/KDE/krita

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

News :: KolourPaint - the free, easy-to-use paint program for KDE

https://github.com/KDE/kolourpaint  C++/Qt,但是依赖KDE

https://apps.kde.org/kolourpaint/

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

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

Calligra

https://github.com/KDE/calligra/tree/master/karbon   C++/Qt,但是依赖KDE

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

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

Qt实现,但是依赖KDE,KF5 Extra CMake Modules

RainyNite studio,依赖boost,KDE,KF5ItemModels

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

https://github.com/ksnip/ksnip

Ksnip是基于Qt的跨平台屏幕截图工具,可为屏幕截图提供许多注释功能。

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

Paint.NET - Free Software for Digital Photo Editing 官网,新版本exe下载

下载 旧版本的 Paint.NET for - OldVersion.com 老版本exe下载

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

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

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

MyPaint MyPaint是一个绘画涂鸦软件,python,GTK写的

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

Pencil2D:2D动画制作软件

Pencil2D Animation | Open Source animation software Qt

https://github.com/pencil2d/pencil

enve

https://github.com/MaurycyLiebner/enve

Flexible, user expandable 2D animation software for Linux and Windows.

https://github.com/egan2015/qdraw

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

https://github.com/douzhongqiang/EasyCanvas

https://blog.csdn.net/douzhq/article/details/105210133 第一版的博文

基于Qt QGraphicsView的简易画图软件,作者douzhq的博客_CSDN博客-qt,python,C++领域博主

https://github.com/kanryu/quickviewer

适用于Windows,Mac和Linux的图像/漫画查看器应用程序,可以非常快速地显示图像。


https://github.com/jurplel/qView

实用且最小的图像查看器

https://github.com/ArsMasiuk/qvge

  1. 把这句话注释掉,不然编译失败
  2. void qvgeMainWindow::updateFileAssociations()
  3. {
  4. #if defined Q_OS_WIN32
  5. //CPlatformWin32::registerFileType("qvge.xgr", "QVGE native graph document", ".xgr", 0);//firecat

https://github.com/OpenOrienteering/mapper

https://github.com/SillyLossy/QtPaint

Screenshot with Gnash logo

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

screenshot.png

https://github.com/omiddavoodi/QtPaint

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

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

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

EasyPaint - linux-apps.com

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

LogoSpeech Studio

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

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

Crimm Imageshop 2.3。 - Imageshop - 博客园  

Home | PhotoDemon: the fast, free, portable photo editor

https://github.com/tannerhelland/PhotoDemon 不是Qt写的

OpenBoard

OpenBoard 是一个跨平台的交互式白板应用程序,旨在用于课堂环境。

https://github.com/OpenBoard-org/OpenBoard

http://openboard.ch/

  

缩放图
https://github.com/BLumia/pineapple-pictures

Drawing - Linux下类似于Microsoft Paint的基本图像编辑器

https://github.com/maoschanz/drawing

其他Qt项目

https://github.com/xiaoyanLG/Draw-Tool

https://github.com/shixingya/Qt-Drawing

其它开源图形库

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

Taichi Graphics | The company behind the open-source parallel computing framework Taichi programming language and cloud-native 3D digital content creation platform Taitopia 太极图形库,作者胡渊鸣

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

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

https://github.com/drawpile/Drawpile

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/408681
推荐阅读
相关标签
  

闽ICP备14008679号