自学内容网 自学内容网

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

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博客


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


原文地址:https://blog.csdn.net/qq_30220519/article/details/140619309

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!