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

export.h
cpp 复制代码
#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
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博客


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

相关推荐
01_ice1 分钟前
C++入门基础
c++
一条破秋裤9 分钟前
C-数据类型
c语言·开发语言·chrome
君顾114 分钟前
从0到1课后辅导管理系统开发实战:需求文档、架构设计全复盘
java·开发语言
神仙别闹15 分钟前
基于C++ MFC RSA 实现加密程序
开发语言·c++·mfc
学习星球17 分钟前
6G核心网架构深度解析——AI Native时代的网络变革
网络·人工智能·5g·架构·go·信息与通信
增量星球31 分钟前
一个 Python 脚本 + LLM 怎么替代向量检索?ProjQA 技能架构原理深度解析
开发语言·python·架构·embedding·skill
Yzzz-F40 分钟前
CF2023D
c++·算法·dp
探数API小喇叭1 小时前
基站查询 API 怎么用?LAC、CELLID 参数详解与实战】
java·开发语言·api·基站定位
Mr.Lu ‍1 小时前
C++开发,使用openCV API对图片进行压缩
开发语言·c++·opencv
大鹏的NLP博客1 小时前
ONNX Runtime CUDA 推理优化实战:破解 C++ 比 Python 慢 28 倍的假象
c++·onnx·推理优化