2009-12-23 46 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()的结果,这样你就知道你的目标是什么。

看起来你必须将位图转换或从别的地方得到它。