Skia最新“编译”,绘制中文字符串,加载PNG、BMP图片等资料的整理。

news/2024/12/28 18:09:09/

“编译”Skia

国内不适合自己编译。Github 有不止一个自动构建的SKIA二进制build,涵盖多个操作系统,可直接取而用之。

推荐大名鼎鼎的JetBrains维护的仓库,地址是 https://github.com/JetBrains/skia-build。含静态库与头文件。release静态库解压出来180MB,debug解压出来一两个G。推荐直接用release版本的。

绘制中文字符串

直接用Skia的SkString就可以,无需多次转换。如果显示方框,那说明字体不对,要设置宋体。

auto pFace = SkTypeface::MakeFromName("宋体", SkFontStyle::Normal());
SkFont font;
font.setTypeface(pFace);SkString string("加载图片 #");canvas->drawString(string, 1, 28, font, textpaint);

完整代码见文末的demo

加载并显示PNG图片等

百度“Skia绘制图片”出来的结果大多已经过时。

最新方法,要用 SkCodec::MakeFromData 解析二进制流,得到SkCodec 与 SkImageInfo,中SkImageInfo包括图片尺寸信息,然后再解码为 SkBitmap。

    DWORD fileLength;char* memFile;... 加载文件到 memFile数组中sk_sp<SkData> data = SkData::MakeWithoutCopy(memFile, fileLength);auto codec = SkCodec::MakeFromData(data);if (!codec) {LogIs(2, "FAILED DECODING FILE!");}SkImageInfo codecInfo = codec->getInfo();auto alphaType = codecInfo.isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaType;auto decodeInfo = SkImageInfo::Make(codecInfo.width(), codecInfo.height(), kN32_SkColorType, alphaType);SkBitmap* skBitmap = new SkBitmap();char* pixels = new char[codecInfo.width()*codecInfo.height()*32];skBitmap->setInfo(decodeInfo, codecInfo.width()*32);skBitmap->setPixels(pixels);auto decodeResult = codec->getPixels(decodeInfo, pixels, codecInfo.width()*32);

decodeResult 等于零代表成功,其他可能的数值:

    /***  Error codes for various SkCodec methods.*/enum Result {/***  General return value for success.*/kSuccess, 0/***  The input is incomplete. A partial image was generated.*/kIncompleteInput, 1/***  Like kIncompleteInput, except the input had an error.**  If returned from an incremental decode, decoding cannot continue,*  even with more data.*/kErrorInInput, 2/***  The generator cannot convert to match the request, ignoring*  dimensions.*/kInvalidConversion, 3/***  The generator cannot scale to requested size.*/kInvalidScale, 4/***  Parameters (besides info) are invalid. e.g. NULL pixels, rowBytes*  too small, etc.*/kInvalidParameters, 5/***  The input did not contain a valid image.*/kInvalidInput, 6/***  Fulfilling this request requires rewinding the input, which is not*  supported for this input.*/kCouldNotRewind, 7/***  An internal error, such as OOM.*/kInternalError, 8/***  This method is not implemented by this codec.*  FIXME: Perhaps this should be kUnsupported?*/kUnimplemented, 9};

完整 Demo 代码 | 我的Skia测试盒子

运行:

在这里插入图片描述

参考资料:《调用Skia内置位图编解码器的坑点》


http://www.ppmy.cn/news/946628.html

相关文章

ksps

ksps kilo Samples per Second 表示每秒采样千次&#xff0c;是转化速率的单位。   所谓的转换速率(Conversion Rate)是指完成一次从模拟转换到数字的AD转换所需的时间的倒数。积分型AD的转换时间是毫秒级属低速AD&#xff0c;逐次比较型AD是微秒级属中速AD&#xff0c;全并行…

TiSpark

TiSpark是PingCAP为解决用户复杂OLAP(OLAP&#xff0c;联机分析处理&#xff0c;它使分析人员能够迅速、一致、交互的从各个方面观察信息&#xff0c;以达到深入理解数据的目的&#xff09;&#xff0c;需求而推出的产品。它借助Spark平台&#xff0c;同时融合TiKV分布式集群的…

sklearn介绍

sklearn简介 scikit-learn&#xff0c;又称sklearn&#xff0c;是一个开源的基于python语言的机器学习工具包。它通过NumPy, SciPy和Matplotlib等python数值计算的库实现高效的算法应用&#xff0c;并且涵盖了几乎所有主流机器学习算法。sklearn是数据挖掘和数据分析的一个工具…

数学建模常用模型(九) :偏最小二乘回归分析

数学建模常用模型&#xff08;九&#xff09; &#xff1a;偏最小二乘回归分析 偏最小二乘回归&#xff08;Partial Least Squares Regression&#xff0c;PLS Regression&#xff09;是一种常用的统计建模方法&#xff0c;用于解决多元线性回归中自变量间高度相关的问题。在偏…

sklearn简介

sklearn是机器学习中一个常用的python第三方模块&#xff0c;网址&#xff1a; http://scikit-learn.org/stable/index.html &#xff0c;里面对一些常用的机器学习方法进行了封装&#xff0c;在进行机器学习任务时&#xff0c;并不需要每个人都实现所有的算法&#xff0c;只需…

简单工厂模式(java)

目录 结构 案例 类图 代码实现 简单咖啡工厂类 咖啡店类 咖啡类 具体咖啡类 简单工厂方法的优缺点 优点 缺点 结构 简单工厂包含如下角色&#xff1a; 抽象产品 &#xff1a;定义了产品的规范&#xff0c;描述了产品的主要特性和功能。具体产品 &#xff1a;实现或者…

Dell Mobile Connect v2.0.7811.0最新版

Dell Mobile Connect又叫戴尔dmc软件&#xff0c;是一款专门为 Dell 指定设备提供的专门为计算机与iOS或者Android智能手机之间进行完整的无线集成的工具&#xff0c;但可用于所有的 Windows中可以实现包括接打电话、收发短信、收取通知&#xff0c;甚至可以镜像Android手机的屏…

国内戴尔dell官网打开速度慢解决方法

目录 解决方法实现 解决方法 绕过dns解析&#xff0c;在本地直接绑定host。 实现 打开http://tool.chinaz.com/dns/在对话框内输入dell.com选择TTL值最小的那一个&#xff0c;复制win R 打开运行&#xff0c;输入C:\Windows\System32\drivers\etc\hosts 使用记事本打开在文…