Skia最新“编译”,绘制中文字符串,加载PNG、BMP图片等资料的整理。
“编译”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最新“编译”,绘制中文字符串,加载PNG、BMP图片等资料的整理。相关推荐
- cygwin编译生成hello world_RISC-V 入门 Part4: 编译、链接、加载
我们介绍了 RISC-V 的指令,你可以当作介绍了汇编语言.但是,我们现在知道的是: RV32I 的格式都是 32bit 的 以上内容可以以 beq 等格式让读者可读,但是机器执行的还是那6种格式的代 ...
- Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决
Linux下编译.链接.加载运行C++ OpenCV的两种方式及常见问题的解决 在Linux下安装完OpenCV C++之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C++) ...
- 安卓图片加载之使用universalimageloader加载圆形圆角图片
前言 话说这universalimageloader加载图片对搞过2年安卓程序都是用烂了再熟悉不过了,就是安卓新手也是百度就会有一大堆东西出来,今天为什么这里还要讲使用universalimagelo ...
- gif android 点击 加载,android 加载显示gif图片的解决方案
使用方法: 1-把GifView.jar加入你的项目. 2-在xml中配置GifView的基本属性,GifView继承自View类,和Button.ImageView一样是一个UI控件.如: andr ...
- android glide加载不出图片_Glide实现共享元素无缝转场效果,只需四步!
原文: How to Use Shared Element Transition with Glide in 4 steps 作者:Bartłomiej Osmałek 读完这篇文章, 你就会知道使用 ...
- Glide加载相同地址图片,不缓存
问题:用Glide作为图片加载框架,图片的URI地址不变,每次更换图片时,都存在缓存情况,加载不出来最新图片. 解决方法有两个: 1,将磁盘缓存设置为DiskCacheStrategy.NONE(磁盘 ...
- ios wkweb设置图片_ios·WKWebView\UIWebView加载HTMLString,实现图片懒加载
背景: 项目中开发商品类型数据,数据可变性较大,所以商品详情数据存在文案和图片富文本显示,后台返回了html格式的数据供前端展示. 如果用webView直接显示的话,需要等html内容完全展示才能获取 ...
- 小程序预览加载不出图片
小程序预览加载不出图片 比如在开发者工具做了一个swiper轮播图 <view> <swiper indicator-dots="true" indicator- ...
- swift 加载gif 框架图片
swift 加载gif 框架图片 SwiftGifOrigin 以下代码 轻松搞定 let imgView = UIImageView(frame: CGRect(x: 50, y: 100, wid ...
最新文章
- thinkphp mysql 日志_thinkphp5 日志
- kaggle房价预测问题
- JAVA语法——经典题目09
- 简单易用的MongoDB
- TRUNCATE TABLE恢复-脚本
- 阿里为什么推崇java_为什么阿里巴巴 Java 开发手册推荐使用 LongAdder,而不是 volatile?...
- 我的世界pc正版好玩的服务器,都来看看好玩的服务器
- 计算机的照相机功能,单反相机各个功能按键的作用,让你彻底熟悉相机-fn键设置...
- 中国银行为房地产买家加入新区块链平台
- 【运营数据分析】运营数据分析怎么做?建立运营数据分析思维
- 基于微信的买菜小程序 毕业设计毕业论文 开题报告和效果图(基于微信小程序毕业设计题目选题课题)
- 陆地生态系统生态学原理
- 供应链金融产品业务全揭秘
- 东航手机值机选座推荐
- 一个汉字等于多少个varchar2
- 【Midjourney教程】设计麻瓜也能10分钟上架一套表情包
- MouseJack:利用15美元的工具和15行代码控制无线鼠标和键盘
- teablue数据分析_大数据丨2016-2017年美国茶叶消费市场分析与展望
- cs224u Overview of the Stanford Sentiment Treebank
- David Silver强化算法学习地址和PPT