BlackBerry - исключение при создании графического объекта из растрового изображения - PullRequest
2 голосов
/ 23 декабря 2009

Я делаю следующий вызов в своем приложении Blackberry (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, когда создаю экземпляр объекта Graphics. Просмотр документации по Графике сбивает с толку, поскольку многие вещи остаются неустановленными.

Что означает «тип устройства по умолчанию»? Как узнать, не поддерживается ли тип «растровое изображение»? Значит ли это, что существуют разные типы растровых изображений? Могут ли разные encodedImage генерировать разные типы растровых изображений?

Есть ли другой способ добавить мою строку в соответствующее закодированное изображение?

общедоступная графика (растровое изображение)

Создает графический объект для рисования в растровое изображение.

Параметры:

точечный рисунок - точечный рисунок для рисования. Должно быть Bitmap.COLUMNWISE_MONOCHROME или тип устройства по умолчанию.

Выдает:

IllegalArgumentException - Если тип 'точечного рисунка' не поддерживается, или точечный рисунок только для чтения.

Ответы [ 3 ]

2 голосов
/ 23 декабря 2009

Я полагаю, что тип по умолчанию зависит от графического чипа и аппаратного обеспечения. (Если у вас монохромный экран, по умолчанию, вероятно, будет другой, чем если бы у вас был цветной.)

Растровое изображение имеет статический метод getDefaultType () , который «Запрашивает тип растрового изображения по умолчанию для устройства». Также есть нестатический метод getType (). Похоже, вам говорят, что для приведенного выше кода работает либо:

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

... или ...

bitmap.getType() == COLUMNWISE_MONOCHROME

И, вероятно, ни одно из этих условий не выполняется. Вы можете проверить это на здравомыслие и, возможно, распечатать результат getDefaultType(), чтобы вы знали, какова ваша цель.

Похоже, вам придется конвертировать растровое изображение или получить его откуда-то еще.

2 голосов
/ 23 декабря 2009

Вы уверены, что ваше растровое изображение является изменчивым?Вы не можете создавать графические объекты из неизменных растровых изображений.Это одна из причин IllegalArgumentException.Вы можете установить режим декодирования для вашего EncodedImage (EncodeImage.setDecodeMode).Существуют различные режимы, позволяющие указать, является ли файл собственным или доступным только для чтения ... наряду с другими режимами, которые можно комбинировать.

Размер растрового изображения может быть еще одним исключением IllegalArgumentException.Конечно, это относится к целевому устройству.

0 голосов
/ 23 декабря 2009

Объект Graphics обычно не создается явно. Скорее, вы получите его экземпляр в методе paint (), если вы его переопределили.

Я подозреваю, что вы хотите создать подкласс BitmapField и переопределить метод paint (), чтобы включить ваш код для рисования текста в растровом изображении.

...