2017-05-12 72 views
13

我正在尋找一種簡單的逐步解決方案來將字體嵌入到JUCE中。在JUCE中嵌入字體

我在我的應用程序中嵌入字體時遇到了一些麻煩(完全忘了在應用程序發佈之前將時間放在此處,現在我的應用程序不會在用戶系統上顯示我的字體 - 可以理解)。

我已經搜索並關注了該主題上的所有帖子,但仍然有問題。我想將嵌入式字體添加到我們的應用中已存在的標籤中,這些標籤是通過ProJucer GUI組件創建和佈局的。

什麼我迄今所做的:

1)增加了字體我ProJucer會話,以便將其添加到BinaryData

2)創建的I類名爲 「EmbeddedFont:」

#include "../JuceLibraryCode/JuceHeader.h" 

class EmbeddedFonts 
{ 
private: 
    Font calistoMT; 

public: 
    EmbeddedFonts(); 
    Font& getCalistoMT(); 
}; 

EmbeddedFonts::EmbeddedFonts() 
{ 
    // in the line below is where I'm getting the assertion error: jassert (typefaceName.isNotEmpty()); 
    calistoMT = Font(Typeface::createSystemTypefaceFor(BinaryData::Calisto_MT, 
                 BinaryData::Calisto_MTSize)); 
} 

Font& EmbeddedFonts::getCalistoMT() 
{ 
    return calistoMT; 
} 

3)在我的GUI COMP的報頭,作爲本實例onent類 4)嘗試過通過這個字體的標籤字體:

genericLabelName->setFont(embeddedFont.getCalistoMT()); 

不是真的知道該怎麼在這裏做。另外,當我得到嵌入字體的工作後,有什麼特定的我應該做的projucer GUI組件中的字體字段?我應該將它設置爲相同的字體嗎?我只問,因爲我在技術上會在構造函數中設置兩次字體(一次從GUI組件選項下拉菜單中選擇一次,另一次從手動編碼嵌入字體)。

我已經試了幾天,仍然有麻煩。謝謝你的幫助。在發佈我的下一個應用更新之前,這是我需要做的最後一件事,因此非常感謝所有幫助。

+0

在創建字體後,您是否嘗試過'calistoMT-> setTypefaceName(「字體名稱來自字體」)和'setTypefaceStyle()'?瀏覽字體並確保您指定的字體是字體支持的字體。 –

+0

我當時沒有嘗試過,我現在正在和那些現在提到它的玩家一起玩,但我仍然收到相同的jassert。斷言:'jassert(typefaceName.isNotEmpty());'讓我相信它彈出,因爲typeFaceName包含一些文本,這使我認爲它不應該有任何文本,但是,不管它是否有文本, jassert仍然彈出。 –

+0

另外,我並不反對刪除Projucer中的標籤並通過代碼添加它們,現在這可能更有意義。 –

回答

0

因爲它看起來像你在JUCE方面做的事情正確,我相信你試圖加載的字體文件沒有與它相關的名稱。我會嘗試以下方法:

  • 檢查從createSystemTypefaceFor調用返回的Typeface的名字將它傳遞給Font構造函數之前。我相信它應該有一個getName()或類似的電話來獲得它的名字。如果這個名字是空的(我期望它是,因爲你的斷言),這是你的問題。

  • 您可能想要嘗試下載一個TTF文件查看器,該查看器可以爲您提供關於該文件的一些信息,這些信息是您要加載的。它還可以指示您正在讀取的字體中是否有名稱或不。如果它的元數據中似乎有一個名稱,那可能表明JUCE庫中存在一個錯誤。

  • 您可能會嘗試使用不同的字體或不同的字體進行加載,因爲您知道元數據中包含正確的名稱(因爲您已使用某種查看器或工具進行了檢查),並查看爲他們創建的字體是否具有名稱集,如果是這樣,請嘗試從其中一個字體創建一個Font,並查看它是否成功。

如果在實際加載的字體確實有一個名字集,那麼這個理論樣的就走出了窗外,但我願意嘗試第三步,看你是否總是得到這個錯誤與每一個字體,或者如果它僅限於一個。