2009-12-23 91 views
2

我在做我的黑莓應用程序下面的調用(API版本4.5)對象...黑莓 - 例外創建圖形時從位圖

public void annotate(String msg, EncodedImage ei) 
{ 
    Bitmap bitmap = ei.getBitmap(); 

    Graphics g = new Graphics(bitmap); 
    g.drawText(msg,0,0); 
} 

而且我不斷收到一個IllegalArgumentException當我實例圖形目的。查看圖形的文檔是令人困惑的,因爲它留下了許多未說明的事情。

「設備的默認類型」是什麼意思? 你怎麼知道'位圖'的類型是不是被支持?這是否意味着有不同類型的位圖?不同的encodedImages可以生成不同類型的位圖嗎?

有另一種方式,以我的字符串添加到相關的加密圖像?

公共圖形(位圖的位圖)

構造一個圖形對象繪製爲位圖。

參數:

位圖 - 要繪製的位圖。必須是Bitmap.COLUMNWISE_MONOCHROME或設備的默認類型。

拋出:

- 如果不支持「位圖」的類型,或位圖是隻讀的。

回答

2

你確定你的位圖是可變的嗎?您不能從不可變的位圖創建圖形對象。這是IllegalArgumentException的一個原因。您可以爲EncodedImage(EncodeImage.setDecodeMode)設置解碼模式。有不同的模式可以讓你指定文件是本地文件還是隻讀文件,以及其他可以組合的模式。

位圖的大小可能是另一個IllegalArgumentException。當然,這與目標設備有關。

+0

大小似乎是我的問題。一旦我裁剪圖像的大小錯誤消失。 任何人都知道關於圖像大小和黑莓設備的任何文檔? – yamspog 2009-12-23 20:52:38

0

Graphics對象通常不明確構造。相反,如果你已經覆蓋它,你會在paint()方法中給它一個實例。

我懷疑你想要做的就是創建BitmapField的子類並覆蓋paint()方法,包括您對位圖繪製文本代碼。

2

我想像的默認類型取決於圖形芯片和硬件上。 (如果您有單色屏幕,則默認設置可能與之前的顏色不同。)

位圖有一個靜態方法getDefaultType(),其中「查詢設備的默認位圖類型」。還有一個非靜態方法getType()。這似乎是告訴你的規則是,上面的代碼工作,那麼:

bitmap.getType() == Bitmap.getDefaultType() 

......或者......

bitmap.getType() == COLUMNWISE_MONOCHROME 

想必這些條件都不是真實的。你可以做一個完整的檢查,也許打印出getDefaultType()的結果,這樣你就知道你的目標是什麼。

看起來你必須將位圖轉換或從別的地方得到它。