首页 > 编程语言 >C++字体库开发之go语言绑定六

C++字体库开发之go语言绑定六

时间:2024-07-27 23:54:19浏览次数:10  
标签:return Fonts C++ FontType parse 字体库 go path ttf

export.h

#define FONTVIEW_API __declspec(dllimport)
typedef void* GoFontSetPtr;


#ifdef __cplusplus
extern "C"{
#endif
FONTVIEW_API GoFontSetPtr openFontSet(const char* stream,size_t size);
FONTVIEW_API void freeFontSet(GoFontSetPtr fontset);
#ifdef __cplusplus
}
#endif
 fontview.go

/*
#cgo CXXFLAGS: -std=c++11
#cgo CFLAGS: -I${SRCDIR}/include
#cgo LDFLAGS: -L${SRCDIR}/lib -lstdc++ -lfontview_d -lfreetyped -lharfbuzz_d
#include "export.h"
#include <stdlib.h>
*/

import "C"
import (
	"encoding/json"
	"errors"
	"fmt"
	"io/ioutil"
	"path/filepath"
	"strings"
	"unsafe"
)

func parseFont(path string) (err error) {
	if len(path) == 0 {
		return
	}

	// file name
	_, fileName := filepath.Split(path)

	// read file
	b, err := ioutil.ReadFile(path)
	if err != nil {
		fmt.Printf("FontType.ReadFile err: %v, fileName: %v\n", err, fileName)
		return
	}

	// 解析字体集
	cData := (*C.char)(unsafe.Pointer(&(b[0])))
	cDataLen := GoIntToCInt(len(b))
	fontSet := C.openFontSet(cData, cDataLen)
	if fontSet == nil {
		fmt.Printf("open font return nil, fileName: %v\n", fileName)
		err = errors.New("open font return nil")
		return
	}
	defer C.freeFontSet(fontSet)
	return
}
输出

parse FontType path: C:\Windows\Fonts\kartikab.ttf
parse FontType path: C:\Windows\Fonts\kokila.ttf
parse FontType path: C:\Windows\Fonts\kokilab.ttf
parse FontType path: C:\Windows\Fonts\kokilabi.ttf
parse FontType path: C:\Windows\Fonts\kokilai.ttf
parse FontType path: C:\Windows\Fonts\l_10646.ttf 

参考

 C++字体库开发之fontconfig使用五-CSDN博客


创作不易,小小的支持一下吧!

标签:return,Fonts,C++,FontType,parse,字体库,go,path,ttf
From: https://blog.csdn.net/qq_30220519/article/details/140619309

相关文章

  • 三种语言实现二分(C++/Python/Java)
    题目给定一个按照升序排列的长度为......
  • C++模板——泛型编程
    目录1.什么是泛型编程2.函数模板2.1定义格式2.2实例化及原理 2.3参数匹配原则3.类模板 3.1定义格式3.2实例化 4.非类型模板参数 5.模板的特化 5.1概念5.2函数模板和类模板特化6.模板的分离编译 1.什么是泛型编程 如何实现一个通用的加......
  • Gorilla Mux:高性能的Go语言路由库
    文章目录引言官网链接原理基础使用安装示例代码高级使用子路由中间件优缺点优点缺点结论引言在Go语言(Golang)的Web开发中,路由是构建RESTfulAPI或Web应用不可或缺的一部分。GorillaMux是一个流行的路由库,以其高性能、灵活性和易用性而著称。本文将介绍GorillaMu......
  • Gin:高性能的Go语言Web框架
    文章目录引言官网链接原理基础使用安装示例代码高级使用中间件路由分组优缺点优点缺点结论引言在Go语言的Web开发领域,Gin是一个备受推崇的高性能Web框架。它以简洁的API、出色的性能和丰富的功能特性赢得了广大开发者的青睐。本文将详细介绍Gin的原理、基础使用......
  • C++基础(1)
    1.命名空间1.1namespace的价值在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的......
  • 2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素
    2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。要求找出最多可以选出的元素数量。输入:nums=[2,1,5,1,1]。输出:3。解释:我们将下标0和3处的元素增加1......
  • 秒懂C++之string类(上)
    目录 一.string类的常用接口说明二.不太常用接口(了解接口)三.string类的遍历访问3.1迭代器iterator3.2反向迭代器四.string的其他功能4.1reserve(扩容)4.2resize4.3at4.4append4.5+=4.6insert一.string类的常用接口说明#include<string>#include......
  • 如何使用hugo搭建个人博客
    整体架构在github托管两个仓库,仓库1保存博客内容源文件,仓库2保存Hugo生成的网站文件,博客内容仓库通过gitsubmodule的方式在仓库2管理。使用Obsidiangit拉取博客内容仓库,通过ob编写博客并推送到仓库1,推送后触发仓库2githubaction使用hugo构建网站并部署......
  • go高并发之路——数据聚合处理
    数据聚合处理,指的是在某个请求或者脚本处理中,我们不会把这个数据立刻响应给前端或者立刻发送给下游,而是对数据先进行聚合处理一下,等到达某个阈值(时间或者量级),再响应给前端或者发送给下游。举个实际的业务场景:直播间有一个做任务的功能,用户满足购买了多少金额我们就会给该用户发放......
  • 【C++】unsigned char与short的区别?
    unsignedchar与short的区别unsignedchar和short(通常为signedshort或简称为short)是C/C++中两种不同的整数数据类型。它们的主要区别在于存储大小、表示范围和是否带符号。存储大小:unsignedchar 通常占用1字节(8位)的存储空间。short 的大小依平台而定,但通常是2字节......