Tôi đang cố gắng hiển thị các hình tượng màu từ Windows "Segoe UI Emoji" -Font với freetype mới nhất 2.8.1 (Tôi đã biên dịch phiên bản gỡ lỗi x64 từ mã nguồn mà không có đơn hoặc đa luồng) và OpenGL. Vì vậy, tôi sử dụng số seguiemj.ttf
từ thư mục Windows\Fonts
(SHA256 = d67717a6fe84e21bc580443add16ec920e6988ca067041d0461c641f75074a8c
), nhưng FT_HAS_COLOR luôn trả về false. Tôi cũng đã thử nó với EmojiOneColor-SVGinOT.ttf
bởi eosrei from github, dẫn đến hành vi tương tự.Tôi làm cách nào để hiển thị các hình tượng màu từ "Segoe UI Emoji" với freetype?
Khi sử dụng this tệp cho android, FT_HAS_COLOR
trả về true và thời điểm bitmap không được lấp đầy.
FT_Library library;
FT_Face face;
FT_Init_FreeType(&library);
FT_New_Face(library, "resources/fonts/seguiemj.ttf", 0, &face);
bool has_color = FT_HAS_COLOR(face);
debug(LOG_INFO, 0, "font has colors: %s", has_color ? "yes" : "no");
std::u32string s = U" ";
FT_GlyphSlot slot = face->glyph;
for (auto c : s)
{
int glyph_index = FT_Get_Char_Index(face, c);
FT_Error error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT|FT_LOAD_COLOR);
if (error)
continue;
error = FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL);
if (error)
continue;
if (slot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA)
debug(LOG_INFO, 0, "glyph is colored");
...
}
Về cơ bản tôi sử dụng mã ở trên, chỉ có thể nhận bitmap đơn sắc của tệp phông chữ và chế độ pixel luôn là FT_PIXEL_MODE_GRAY.
biểu tượng cảm xúc trong Word/Firefox
biểu tượng cảm xúc trong applicaton tôi
Có cái gì đó để khắc phục điều đó hoặc đã làm tôi điều gì sai?
Chỉnh sửa trong [mcve]. Ngoài ra, liên kết phông chữ Github & chỉnh sửa trong md5sum/sha256 của phông chữ Microsoft bạn đã thử. – genpfault
Cảm ơn, tôi đã chỉnh sửa nó. Bạn có thể tìm thấy phông chữ từ github [ở đây] (https://github.com/eosrei/EmojiOne-Color-Font). (không thể thêm nó vào bài đăng của tôi vì giới hạn) –
Đừng lo, tôi đã chỉnh sửa nó cho bạn. – genpfault