skia

基于开源PDFium,编译动态库--Windows平台(上)

泪湿孤枕 提交于 2020-04-28 07:23:17
开篇注:博客是为了更好的思考,希望能以此记录自己的学习历程。本文写于2018年09月11日,修改于2018年09月12日。随着时间流逝,可能有些内容已经失效,望读者望文观义,get到关键点。假如对文中有啥有疑问、有想法、感觉不太对的地方欢迎留言交流~。 引言 因为用到过别人编译的PDFium.dll,但是有点问题,于是官方方式编译一下PDFium库。这里只说Windows平台的编译。 开始 1、访问外网 PDFium源码托管在 https://pdfium.googlesource.com/pdfium/ 。 所以先得有个访问谷歌的工具吧。这个得自己找。 2、获取depot工具 关于depot工具,就知道它是个编译工具就好,如同vistual studio一样,知道怎么用,什么效果即。如官方介绍, http://www.chromium.org/developers/how-tos/install-depot-tools 这里有关于depot工具的 介绍。别忘了将depot工具添加到环境变量中,这样我们可以很方便的在cmd中使用它。 3、准备好合适版本Vistaul Studio及相关环境 正如官方所说: As of September, 2017 (R503915) Chromium requires Visual Studio 2017 (15.7.2) to build.

Windows下的skia编译方法

做~自己de王妃 提交于 2020-04-28 07:23:01
1、需要安装的软件 python2.7 (需要设置至系统PATH环境变量) git (需要设置至系统PATH环境变量) vs2017 2、需要git clone的代码,命令如下: git clone https://source.codeaurora.org/quic/lc/chromium/tools/depot_tools git clone https://gitee.com/yuangu/skia.git 记得将depot_tools所在的目录设置进 系统PATH环境变量 3、初使化skia的工程 注意,因为skia大部分第三方依赖都在Google的服务器上,所以git需要使用ShadowScoks做代理 git config --global http.proxy 'socks5://127.0.0.1:1080' git config --global https.proxy 'socks5://127.0.0.1:1080' 在你结束本步操作后,可以使用如下命令取消代理: git config --global --unset http.proxy git config --global --unset https.proxy 然后cd 到你刚才git 的skia的代码目录下: python tools/git-sync-deps 相关操作,如图所示: 4

Windows + VS2017 编译Skia

耗尽温柔 提交于 2020-04-28 06:43:42
Windows + VS2017 编译Skia SKIA 2019年03月28日 17时42分08秒 官方网址 https://skia.org/ 官方编译教程 https://skia.org/user/build 准备工具 Python 2.7.16 如果安装了python 3,要把python2 的优先级设置的高一点 VS2017 安装 git 工具 下载源代码 首先设置以下git 的代理,设置方法如下 先查询下自己的梯子端口,我用的蓝灯如下 git config --global http.proxy socks5://127.0.0.1:61901 git config --global https.proxy socks5://127.0.0.1:61901 下载depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 设置完代理再下载速度噌噌的 * 下载完设置环境变量 下载 Skia源码 git clone https://skia.googlesource.com/skia.git 下载ninja git clone git://github.com/ninja-build/ninja.git && cd ninja 打开 适用于 VS 2017 的

Qt使用GDI绘图(仅Windows平台)

偶尔善良 提交于 2020-04-13 14:46:09
【今日推荐】:为什么一到面试就懵逼!>>> 绘图引擎 Windows环境下二维绘图引擎有多种选择:GDI、GDI+、DirectDraw、Qt/QPainter、Agg、Cairo、skia、Direct2D、Direct3D、OpenGL等。 GDI:微软原生的二维绘图引擎。 优点:微软的全力支持,作为操作系统核心层效率方面不用担心,支持多种开发框架(含语言):WinSDK、MFC、Delphi等。 缺点:不是面向C++对象组织的,使用起来较为繁琐;不支持反锯齿,不支持复杂的绘图效果(这个相对于GDI+而言)。 GDI+:微软后来推出的二维绘图引擎。 优点:微软的全力支持,支持多种开发框架(含语言):WinSDK、MFC、Delphi等,可以实现复杂的绘图效果,如反锯齿、路径画刷等;面向对象的架构,使用起来比较方便。 缺点:绘图效率较GDI稍低,绘图交互性不如GDI(缺少GDI的支持位运算的绘图模式),开启反锯齿后效率不如Qt。 Qt:Qt的二维图形引擎是基于QPainter类的,绘图的效果取决于QPainter的设置。面向对象的方式组织,使用起来较为方便。 Agg:C++编写的开源绘图引擎(基于GPL协议) Cairo:C编写的开源绘图引擎(基于LGPL协议),大名鼎鼎的FireFox就是用这个绘图引擎的。 Skia:Google的Android的绘图引擎。 Direct2D

使用libjpeg进行图片压缩

偶尔善良 提交于 2020-04-08 17:51:49
简介 由于工作原因,boss下达的任务就大概说了对图片进行压缩寻找比较合理的方式,还举了一个项目中的坑,就是系统原生的Bitmap.compress设置质量参数为100生成图片会变大的坑。所以我打算用一点时间研究研究Bitmap在内存和外存中的情况。首先需要对图片进行压缩,大家都知道图片是Android里面一个大坑,具体的问题有: OOM,一不留神就用OOM来冲冲喜,所以网上就有了很多解决oom问题的建议,但是由于网友的水平不一也导致建议参差不齐。(内存) 图片压缩再加载失真严重,或者压缩率不够达不到项目要求的效果。(外存) 那我今天就要解决的就是通过今天查阅的资料和自己的判断,还有实践归档一下图片在Android上的问题。并且给出自己解决图片压缩问题的解决方案和实际操作。 1、为什么Android上的图片就不如IOS上的? libjpeg是广泛使用的开源JPEG图像库,安卓也依赖libjpeg来压缩图片。但是安卓并不是直接封装的libjpeg,而是基于了另一个叫Skia的开源项目来作为的图像处理引擎。Skia是谷歌自己维护着的一个大而全的引擎,各种图像处理功能均在其中予以实现,并且广泛的应用于谷歌自己和其它公司的产品中(如:Chrome、Firefox、 Android等)。Skia对libjpeg进行了良好的封装,基于这个引擎可以很方便为操作系统、浏览器等开发图像处理功能。

使用libjpeg进行图片压缩

空扰寡人 提交于 2020-04-07 21:26:25
简介 由于工作原因,boss下达的任务就大概说了对图片进行压缩寻找比较合理的方式,还举了一个项目中的坑,就是系统原生的Bitmap.compress设置质量参数为100生成图片会变大的坑。所以我打算用一点时间研究研究Bitmap在内存和外存中的情况。首先需要对图片进行压缩,大家都知道图片是Android里面一个大坑,具体的问题有: OOM,一不留神就用OOM来冲冲喜,所以网上就有了很多解决oom问题的建议,但是由于网友的水平不一也导致建议参差不齐。(内存) 图片压缩再加载失真严重,或者压缩率不够达不到项目要求的效果。(外存) 那我今天就要解决的就是通过今天查阅的资料和自己的判断,还有实践归档一下图片在Android上的问题。并且给出自己解决图片压缩问题的解决方案和实际操作。 1、为什么Android上的图片就不如IOS上的? libjpeg是广泛使用的开源JPEG图像库,安卓也依赖libjpeg来压缩图片。但是安卓并不是直接封装的libjpeg,而是基于了另一个叫Skia的开源项目来作为的图像处理引擎。Skia是谷歌自己维护着的一个大而全的引擎,各种图像处理功能均在其中予以实现,并且广泛的应用于谷歌自己和其它公司的产品中(如:Chrome、Firefox、 Android等)。Skia对libjpeg进行了良好的封装,基于这个引擎可以很方便为操作系统、浏览器等开发图像处理功能。

Google 以 Flutter 作为原生突破口,移动端即将统一了

耗尽温柔 提交于 2020-03-02 12:27:05
Android 的前生今世 Android 系统 Android系统作为全球第一大系统,基于 Java 开发的移动端有着诸多的性能优势。 2018年前 H5 的性能瓶颈和 RN 的停更 导致业界对跨平台开发失去信心。 直到2018年10月Google推出首个 Flutter 跨平台解决方案,打破整个移动开发的方向。 为什么 Flutter 成为 Android 方向标 跨平台性:Flutter基于图像绘制引擎进行渲染,在不同平台下绘制效果是绝对一致的,能做到真正的跨平台,一处写处处运行 性能优异性:不同于H5通过DOM渲染 和RN映射组件,Flutter直接基于native进行绘制。性能上完全超过原生 热重载性: Android原生开发 会遇到 编译-打包-安装 三部曲。开发效率迟迟得不到提升。热重载技术在Flutter内完美体现 Flutter 详细介绍 Dart 语法编译:Dart 是一种强类型、跨平台的客户端开发语言。具有专门为客户端优化、高生产力、快速高效、可移植易学的风格。Dart主要由Google负责开发和维护 Flutter 插件:Flutter使用的Dart语言无法直接调用Android系统提供的Java接口,这时就需要使用插件来实现中转。Flutter官方提供了丰富的原生接口封装 Flutter 系统结构 Skia 图像处理引擎 2005年Skia图像处理引擎成立

为什么图片反复压缩后普遍会变绿,而不是其他颜色?

安稳与你 提交于 2020-02-26 15:52:15
作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的一个核心的部分的代码,为了优化执行速度进行了魔改,结果写错了代码。结果导致 JPG 图片压缩发绿、崩坏。与安卓上的应用无关,它们是受害者( 专业版概要:问题出在 Android 提供的压缩图片接口上,准确的说是一个 Android 里一个叫做 Skia 的库上。而这个 bug 在 2016 年 4 月中旬被修复了,如果按照 Android 的发行来看,那就是从 Android 7 (Nougat) 开始才消除这个问题。 (不是百度的阴谋。(认真) 前言:刚才在社区里和 @StarBrilliant 等人一起研究,现在应该可以下一个精确的定论了。如他的答案所说,问题出在 RGB 色彩空间转换到 YUV 的时候。但问题不仅仅是精度下降,最大的问题是,错误的舍入(向下取整)。另外,JDCT_IFAST 方法会导致图片严重劣化:“格子状崩坏”、灰块、黑白块、画面粗糙,但是题目问的仅仅是变绿,就不在这上面浪费篇幅了。 网页模拟 by @StarBrilliant : JPEGreen Simulator 历史性的修复: Use libjpeg

Android研究-Android 画图方式[zz]

时光毁灭记忆、已成空白 提交于 2020-02-22 03:51:27
GUIer们应该对Android的GUI实现这有所好奇,肯定也是经过一番搜索的,比如先找TextView这种简单的,draw接口了、onDraw接口了、paint接口了、onPaint接口了,通过这些接口进一步找到发现Drawable的draw接口实际绘制的,接着发现是Canvas接口绘制的,接着发现是jni到了SkCanvas这样的本地接口了,SkCanas原来是skia(类似cairo)这个纯2D少量3D图形引擎的核心类,问题就转移到了skia机制和实现身上了. 本文是一位大牛的文章,介绍了你想知道的Android的图形方面的东西,很全,很系统,地址: http://blog.csdn.net/arm10504/article/details/5483971 Android apk 里面的画图分为2D和3D两种:2D是由 Skia 来实现的,也就是我们在框架图上看到的SGL,SGL也会调用部分 opengl 的内容来实现简单的3D效果;3D部分是由OpenGL|ES实现的,OpenGL|ES是Opengl的嵌入式版本,我们先了解一下Android apk的几种画图方式,然后再来来看一看这一整套的图形体系是怎么建立的。 首先画图都是针对提供给 应用 程序的一块内存填充 数据 , 没去研究过一个Activity是否就对应着底层的一个surface

Draw rotated text in SkiaSharp

妖精的绣舞 提交于 2020-01-23 07:33:14
问题 How to draw rotated text in SkiaSharp . Currently I'm rotating the SKCanvas , drawing the text and then rotating it back. But I thought may be there is a more efficient way to do this. canvas.RotateDegrees(45, 20, 20); canvas.DrawText("Text", 20, 20, paint); canvas.RotateDegrees(-45, 20, 20); 回答1: That is the correct way (the only way, I think). It is not that inefficient as you are not really rotating the canvas, but rather adjusting the drawing matrix (an int[9] array). Under the hood it is