解决skia静态库中关于jpeg/png编码解码器的全局变量的问题

2023-10-29

近期在研究Andriod的图形渲染系统skia,编译好skia后,写了一个小小的测试程序

#include "SkBitmap.h"
#include "SkDevice.h"
#include "SkPaint.h"
#include "gm.h"
#include "SkRect.h"
#include "SkImageEncoder.h"
int main(int argc, char * const argv[])
{
// Declare a raster bitmap, which has an integer width and height,
// and a format (config), and a pointer to the actual pixels.
// Bitmaps can be drawn into a SkCanvas, but they are also used to
// specify the target of a SkCanvas' drawing operations.
SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
bitmap.allocPixels();
// A Canvas encapsulates all of the state about drawing into a
// device (bitmap).  This includes a reference to the device itself,
// and a stack of matrix/clip values. For any given draw call (e.g.
// drawRect), the geometry of the object being drawn is transformed
// by the concatenation of all the matrices in the stack. The
// transformed geometry is clipped by the intersection of all of the
// clips in the stack.
SkCanvas canvas(new SkDevice(bitmap));
// SkPaint class holds the style and color information about how to
// draw geometries, text and bitmaps.
SkPaint paint;
// SkIRect holds four 32 bit integer coordinates for a rectangle.
SkRect r;
paint.setARGB(255, 255, 0, 0);
r.set(25, 25, 145, 145);
canvas.drawRect(r, paint); /** Draw the specified rectangle using
  the specified paint. The rectangle
  will be filled or stroked based on
  the Style in the paint. */
paint.setARGB(255, 0, 255, 0);
r.offset(20, 20);
canvas.drawRect(r, paint);
paint.setARGB(255, 0, 0, 255);
r.offset(20, 20);
canvas.drawRect(r, paint);
// SkImageEncoder is the base class for encoding compressed images
// from a specific SkBitmap.
bool bret =false;
bret = SkImageEncoder::EncodeFile("E:\\snapshot.jpg", bitmap,
SkImageEncoder::kJPEG_Type,
/* Quality ranges from 0..100 */ 100);
return 0;
}
测试结果发现SkImageEncoder::EncodeFile返回值为false,进一步调试发现没有注册jpeg图片的encoder,但是在静态库image的SkImageDecoder_libjpeg.cpp文件中通过这行代码static SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> gEReg(sk_libjpeg_efactory); 注册过sk_libjpeg_efactory,将断点打在这行代码上调试发现断点无效,而skia自带的测试程序SampleApp没有该问题。
经过百度后发现VC链接器根本没链接进SkImageDecoder_libjpeg.cpp里的代码。表现出来的情况就是,该编译单元里的全局常量(全局变量一样)根本没有得到初始化,为什么VC不链接这个编译单元对应的目标文件?或者说,为什么VC不初始化这个全局常量?原因就在于,SkImageDecoder_libjpeg.cpp太独立了。一个在整个编译链接阶段都无法确定该文件是否被使用的文件,VC就直接不链接了,参考链接http://blog.sina.com.cn/s/blog_a574387a01014rj3.html
如何解决该问题呢?在Simon的这篇文章 http://simon-fu.vicp.cc/?p=263 中提出了一个不是办法的办法。
在SkImageDecoder_libjpeg.cpp最后面加入以下代码
int test_a() 

return 0; 
}
在SkJpegUtility.h文件中加入以下代码
int test_a(); 
const int aaa = test_a();
最后在主程序的main前面加入引用#include "SkJpegUtility.h",大功告成,断点成功激活。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决skia静态库中关于jpeg/png编码解码器的全局变量的问题 的相关文章

  • 一文搞定Linux进程和线程(详细图解)

    Linux 进程和线程 本篇文章我们就深入理解一下 Linux 内核来理解 Linux 的基本概念之进程和线程 系统调用是操作系统本身的接口 它对于创建进程和线程 内存分配 共享文件和 I O 来说都很重要 我们将从各个版本的共性出发来进行
  • jenkins从gitlab拉取代码,进行构建

    1 在gitlab平台加入jenkins机器的公钥 2 在jenkins平台加入jenkins机器的私钥 3 在jenkins中新建任务 4 立即构建
  • 音频录制以及播放

    音频录制以及播放 象棋小子 1048272975 一般的音频应用中 往往需要支持音频的拾取输入以及音频的播放输出 LPC5411x具有I2S音频接口以及双通道PDM数字麦克风接口 其中数字麦克风接口支持芯片深度睡眠时的语音激活 非常适合于音
  • java8内部调用无法引用值的问题

    问题 Variable used in lambda expression should be final or effectively final 具体原因 这段代码试图将 20 赋给一个局部变量 它无法通过编译 但绝非编写错误 这实际上
  • linux中的struct timeval结构

    struct timeval long tv sec seconds long tv usec and microseconds 百万分之一秒 timeval结构的用于指定时间值 头文件 include
  • 自定义LayoutManager,仿微信朋友圈的九宫格效果

    前言 之前在项目中我有写过自定义控件九宫格是根据ViewGroup写的 功能已经实现了 但是后来我感觉如果以后性能提升的话 可能在缓存这块有要求 所以 我感觉还是改变使用自定义LayoutManager来写这个控件 后期就直接使用Recyc
  • 2023百度网盘免费扩容方法

    百度网盘是一款大众使用的网络云盘储存工具 但是每一位用户的网盘空间是有限制的 那么又不想花钱进行扩容该怎么办 方法一 首先打开手机桌面上的软件进入 在我的界面点击更多服务进入 然后在更多服务界面点击领无限空间进入 最后在弹出的窗口根据提示绑
  • ningx跨域的方案

    location home rewrite home 1 break proxy pass https 添加上述代码
  • 深度学习-全连接神经网络-训练过程-模型正则与超参数调优- [北邮鲁鹏]

    目录标题 神经网络中的超参数 学习率 超参数优化方法 网格搜索法 随机搜索法 超参数搜索策略 粗搜索 精搜索 超参数的标尺空间 神经网络中的超参数 超参数 网络结构 隐层神经元个数 网络层数 非线性单元选择等 优化相关 学习率 dorpou
  • 华为OD机试真题 Java 实现【微服务的集成测试】【2023Q1 100分】

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 一 题目描述 现在有n个容器服务 服务的启动可能有一定的依赖性 有些服务启动没有依赖 其次服务自身启动加载会消耗一些时间
  • pandas从时间序列中判断是一周的第几天或星期几

    把时间列标准化时间格式 df time slot1 pd to datetime df time slot1 输出这一天是周中的第几天 Monday 0 Sunday 6 df dayofweek df time slot1 dt dayo
  • 数据湖和数据仓库的区别?

    简介 数据湖这个概念和数据仓库这两个概念一直搞不清楚 之前感觉区别就是数据湖是数据仓库的父集 数据湖是个伪命题 平时生活中也用不到 然后今天听了我的一个师哥的讲解 然后简单总结下 常见的问题 1 数据湖和数据仓库的区别 相似点 都可以处理海
  • PyQt5最全81 信号与槽之为类添加多个参数可选的信号

    PyQt5最全81 信号与槽之为类添加多个参数可选的信号 from PyQt5 QtCore import class MultiSignal QObject 为类添加多个信号 signal1 pyqtSignal 无参数 signal2
  • h5 跳转小程序微信浏览器不显示跳转按钮

    问题 静态页面 h5 页面 跳转小程序 在微信内置浏览器里面没有显示出跳转按钮 但是在其他浏览器则正常显示 可能有以下一些原因 1 jweixin js 版本 引入 jweixin js 需要 1 6 0 版本 http res2 wx q
  • ALV DATA_CHANGE与DATA_CHANGE FINISHED的区别

    Alv grid OO ALV中有两个事件 Event data changed和ata changed finished 第一个事件在可编辑字段的数据发生变化时触发 可用来检查数据的输入正确性 第二个事件是当数据修改完成后触发 如果数据没
  • 飞猪平台用户行为分析—python

    文章目录 一 项目背景 1 1数据来源 1 2数据介绍 二 分析目的 三 分析思路 四 数据分析 3 1数据清洗 3 2用户分析 3 2 1用户维度 3 2 1 1浏览量pv 访客量uv 成交量分析 3 2 1 2留存分析 3 2 1 3用
  • 执行命令定义时出错_深入浅出SDC clock定义(下)

    前情提要 前面两次分别和大家一起学习了SDC的整体框架组成和clock定义的一部分内容 如果想要查看可以点击下方蓝色链接 从中可以看出 所有SDC构成中最基本的就是clock的定义 它作为所有SDC的基础 贯穿到几乎所有SDC指令当中 并且
  • 区块链学习笔记(3)--交易机制与双花

    比特币的交易机制 如何交易 一位所有者 A 利用他的私钥对前一次交易T1和下一位所有者 B 的地址签署一个随机散列的数字签名 A将此数据签名制作为交易单T2 并将交易单T2广播全网 电子 货币就发送给了下一位所有者 要点 1 交易发起者的私
  • Android面试常见问题总结

    1 AsyncTask是什么 有什么缺陷 AsyncTask是一种轻量级的异步任务类 它可以在线程池中执行后台任务 然后把执行的进度和最终结果传递给主线程并在主线程中更新UI 多个AsyncTask对象是串行执行的 Android 1 5刚

随机推荐

  • 2的n次方对照表和二进制、十进制的互相转换

    2的1次方 2 2的2次方 4 2的3次方 8 2的4次方 16 2的5次方 32 2的6次方 64 2的7次方 128 2的8次方 256 2的9次方 512 2的10次方 1024 这里我介绍二进制和十进制快速的转换方法 例1 137
  • 深度学习图像分割学习路径

    深 度 学 习 图 像 分 割 学
  • 见证国内人工智能与机器人技术的进步

    随着新一代人工智能与机器人技术的不断进步 人工智能与机器人技术已上升为国家十四五规划首要发展的科技技术 同时 亦是引领新一轮科技革命和产业变革的战略性技术 具有溢出带动性的 头雁 效应 人工智能与机器人专业是与 物联网 互联网 高新技术产业
  • LeetCode-1487. Making File Names Unique

    Given an array of strings names of size n You will create n folders in your file system such that at the ith minute you
  • 这张互联网支付牌照被正式注销!

    本应出现在年初续展结果中的支付机构百联优力 北京 投资有限公司 简称 百联优力 的支付牌照于2月10日被正式注销 注销原因为不予续展 2月15日 中国人民银行官网公示的 已注销许可 页面再添三家支付机构名单 分别为江苏飞银商务智能科技有限公
  • 国内IT公司病的有多重?技术圈交际花谈软件研发管理怪现状

    虎嗅注 在创业过程中 研发管理是很重要的内容 但是国内创业公司的研发管理却长期处于一种比较混乱的状态 国内创业公司的研发管理到底出了什么问题 技术人攻略的Gracia采访了素有 技术圈交际花兼娱记 称号的程显峰 从程显峰的口中 我们可以了解
  • STL之unique_copy

    template
  • App 和设备通过蓝牙连接收发数据

    一 Android 中进行蓝牙开发需要用到的类和执行过程 1 使用BluetoothAdapter startLeScance来扫描设备 2 在扫描到设备的回调函数中的得到BluetoothDevice 对象 并使用Bluetooth st
  • java基础之static关键字修饰变量、方法

    我们一般想要调用某个类中的属性或者行为 方法 就需要创建一个类的对象才能去做这个事情 static修饰变量 class Chinese String name int age public static void main String a
  • RPM中国镜像

    Les RPM de Remi Packages 提供Fedora RHEL 各版本的兼容包 DAG Apt Yum RPM package 除提供RHEL Fedora兼容rpm包外 还有提供Apt版本 Sohu com Open Sou
  • 使用python编写基于UDP协议的通讯程序,实现简单的回声功能(附代码)

    基于UDP的网络程序 UDP User Datagram Protocol 是一种面向无连接的 不可靠的传输协议 其不需要像 TCP 一样进行握手和维护连接状态 UDP 在发送数据时不会确保数据能够到达接收方 也不会对数据进行排序和重传 相
  • 华为支持升级鸿蒙os的机型2020,华为支持升级鸿蒙os的机型有哪些?

    支持升级鸿蒙os机型有 华为P40 华为P40Pro 华为P40Pro 华为Mate 30 5G 华为Mate30 Pro 华为Mate 30 Pro 5G能主华为Mate30 RS 华为MatePad Pro 华为MatePad Pro
  • 读写分离三节点集群环境搭建

    文章目录 0 环境检查 1 数据准备 2 配置主库 配置文件 启动主库 设置OGUID 修改数据库模式 3 配置备库01 配置文件 启动备库 设置OGUID 修改数据库模式 4 配置备库02 配置文件 启动备库 设置OGUID 修改数据库模
  • 【测试开发】web 自动化测试 --- selenium4

    目录 1 什么是自动化为什么要做自动化 2 为什么选择selenium作为我使用的web自动化工具 3 什么是驱动 驱动的工作原理是什么 5 第一个自动化程序演示 6 selenium基本语法 6 1 定位元素的方法 6 2 操作页面元素
  • 技术赋能-混流编排功能,助力京东618直播重保

    每每到618 双11这样的大型活动的时候 每天都有几个重要的大v或者品牌直播需要保障 以往的重点场次监播方式是这么造的 对每路直播的源流 各档转码流分别起一个ffplay播放窗口 再手动调整尺寸在显示器桌面进行布局 排到一屏里来监播 这样做
  • android 12.0 设置app为默认浏览器

    1 概述 在12 0 的产品定制化中 如果系统安装多个浏览器时 需要设置默认浏览器来完成需求 这就需要看系统设置中的相关源码 当出现多个浏览器时 该如何设置默认浏览器呢 其实在Settings 默认应用 gt 浏览器应用 当点击选择浏览器时
  • 基于深度学习的低光照图像增强

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 之前在做光照对于高层视觉任务的影响的相关工作 看了不少基于深度学习的低光照增强 low light enhancement 的文章 3 4 5 7 8 9 10 于是决定
  • python题库刷题训练软件

    刷题软件 文末有联系方式 注明来意 1 下列叙述中正确的是 A 数据库系统减少了数据冗余 B 经规范化后的数据库系统避免了一切冗余 C 数据库系统中数据的一致性是指数据类型一致 D 数据库系统比文件系统能管理更多的数据 数据库系统的数据具有
  • O(logN)求斐波那契数列第N项:动态规划、矩阵分治

    logN求Fibonacci数列第N项 斐波那契数列通项公式 F i F i
  • 解决skia静态库中关于jpeg/png编码解码器的全局变量的问题

    近期在研究Andriod的图形渲染系统skia 编译好skia后 写了一个小小的测试程序 include SkBitmap h include SkDevice h include SkPaint h include gm h includ