“编译”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内置位图编解码器的坑点》

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

  1. cygwin编译生成hello world_RISC-V 入门 Part4: 编译、链接、加载

    我们介绍了 RISC-V 的指令,你可以当作介绍了汇编语言.但是,我们现在知道的是: RV32I 的格式都是 32bit 的 以上内容可以以 beq 等格式让读者可读,但是机器执行的还是那6种格式的代 ...

  2. Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决

    Linux下编译.链接.加载运行C++ OpenCV的两种方式及常见问题的解决 在Linux下安装完OpenCV C++之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C++) ...

  3. 安卓图片加载之使用universalimageloader加载圆形圆角图片

    前言 话说这universalimageloader加载图片对搞过2年安卓程序都是用烂了再熟悉不过了,就是安卓新手也是百度就会有一大堆东西出来,今天为什么这里还要讲使用universalimagelo ...

  4. gif android 点击 加载,android 加载显示gif图片的解决方案

    使用方法: 1-把GifView.jar加入你的项目. 2-在xml中配置GifView的基本属性,GifView继承自View类,和Button.ImageView一样是一个UI控件.如: andr ...

  5. android glide加载不出图片_Glide实现共享元素无缝转场效果,只需四步!

    原文: How to Use Shared Element Transition with Glide in 4 steps 作者:Bartłomiej Osmałek 读完这篇文章, 你就会知道使用 ...

  6. Glide加载相同地址图片,不缓存

    问题:用Glide作为图片加载框架,图片的URI地址不变,每次更换图片时,都存在缓存情况,加载不出来最新图片. 解决方法有两个: 1,将磁盘缓存设置为DiskCacheStrategy.NONE(磁盘 ...

  7. ios wkweb设置图片_ios·WKWebView\UIWebView加载HTMLString,实现图片懒加载

    背景: 项目中开发商品类型数据,数据可变性较大,所以商品详情数据存在文案和图片富文本显示,后台返回了html格式的数据供前端展示. 如果用webView直接显示的话,需要等html内容完全展示才能获取 ...

  8. 小程序预览加载不出图片

    小程序预览加载不出图片 比如在开发者工具做了一个swiper轮播图 <view> <swiper indicator-dots="true" indicator- ...

  9. swift 加载gif 框架图片

    swift 加载gif 框架图片 SwiftGifOrigin 以下代码 轻松搞定 let imgView = UIImageView(frame: CGRect(x: 50, y: 100, wid ...

最新文章

  1. thinkphp mysql 日志_thinkphp5 日志
  2. kaggle房价预测问题
  3. JAVA语法——经典题目09
  4. 简单易用的MongoDB
  5. TRUNCATE TABLE恢复-脚本
  6. 阿里为什么推崇java_为什么阿里巴巴 Java 开发手册推荐使用 LongAdder,而不是 volatile?...
  7. 我的世界pc正版好玩的服务器,都来看看好玩的服务器
  8. 计算机的照相机功能,单反相机各个功能按键的作用,让你彻底熟悉相机-fn键设置...
  9. 中国银行为房地产买家加入新区块链平台
  10. 【运营数据分析】运营数据分析怎么做?建立运营数据分析思维
  11. 基于微信的买菜小程序 毕业设计毕业论文 开题报告和效果图(基于微信小程序毕业设计题目选题课题)
  12. 陆地生态系统生态学原理
  13. 供应链金融产品业务全揭秘
  14. 东航手机值机选座推荐
  15. 一个汉字等于多少个varchar2
  16. 【Midjourney教程】设计麻瓜也能10分钟上架一套表情包
  17. MouseJack:利用15美元的工具和15行代码控制无线鼠标和键盘
  18. teablue数据分析_大数据丨2016-2017年美国茶叶消费市场分析与展望
  19. cs224u Overview of the Stanford Sentiment Treebank
  20. David Silver强化算法学习地址和PPT

热门文章

  1. PPT 、word 、pdf、 txt 格式转换
  2. pillow库,PIL库
  3. Java 的发展历史1991-2022
  4. 小程序路由和onHide(),onUnload()的一些问题
  5. NANK南卡降噪耳机和华为耳机哪个好?500元档最值得入手的降噪耳机
  6. VS2019 VC++ MFC CEF(Chrome)开发环境搭建及相关功能demo(附源码)
  7. css设置背景透明度,css设置背景透明度 你需要学习了
  8. open函数和fopen函数区别
  9. Python 设置微信公众号机器人自动回复
  10. shopify修改导航