2013-12-12 4 views
1

Я пытаюсь получить изображение растрового изображения, которое будет нарисовано на моем холсте в моем проекте андроида. Я занимаюсь этим уже более двух дней и просто не могу понять это. Я прикрепил код, в котором вызывается функция.canvas.drawBitmap (bitmap, null, RectF, null) not drawing

private void drawLogo(Canvas canvas) 
{ 
    Paint test = new Paint(); 
    test.setColor(Color.RED); 
    test.setStrokeWidth(4); 
    test.setStyle(Style.FILL_AND_STROKE); 

    //Here was my problem 
    //Changed to --> new RectF(scale_x, scale_y, 5*scale_x, 5*scale_y) and works now 
    RectF logoSize = new RectF(scale_x, 5*scale_y, 5*scale_x, scale_y); 

    Bitmap logoBitmap = getImageMap().get("LOGO"); 

    canvas.drawRect(logoSize, test); 

    canvas.drawBitmap(logoBitmap, null, logoSize, null); 
} 

Метод canvas.drawRect (RectF, краска) рисует прямоугольник правильно, но растровое изображение не отображается на всех. Любое понимание было бы очень благодарно, спасибо заранее.

EDIT: Я добавил код из моего метода getImageMap() в соответствии с запросом. Он в основном просто возвращает все изображения в моих ресурсах/изображениях/папке как карту, поэтому я могу легко вытащить любое изображение из папки.

private Map<String, Bitmap> getImageMap() 
{ 
    if (imageMap == null) 
    { 
     imageMap = new HashMap<String, Bitmap>(); 
     try 
     { 
      String[] files = getContext().getAssets().list("images"); 

      for (String imageName : files) 
      { 
       // Construct a BitMap from an asset 
       Bitmap bitmap = BitmapFactory.decodeStream(
        getContext().getAssets().open("images/" + imageName)); 
       imageMap.put(imageName.replaceFirst("\\..*", ""), bitmap); 
      } 
     } 
     catch (IOException e) {Log.e("assets/images/ is empty", "IOException", e);} 
    } 
    return imageMap; 
} 

EDIT2: Я нашел свою ошибку, я обновил ее в коде. Я просто хочу поблагодарить тех, кто дал мне быструю обратную связь, я ценю это.

+0

Можете ли вы дать более подробную информацию о том, что getImageMap(). Get ("LOGO"); делается? Кроме того, у вашего растрового изображения есть альфа-канал? Наконец, попробовали ли вы обернуть свой логотипBitmap в BitmapDrawable и убедиться, что он выглядит так, как вы ожидаете? – TheIT

+0

Я уверен, что getImageMap(). Get («LOGO») возвращает правильное растровое изображение, которое я хочу, я проверил его (я все равно отправлю свой код выше). Что касается альфа-канала, я не верю, так как я использую API 10 (я думаю, что альфа-канал для растровых изображений не был введен до API 12). Я не пробовал BitmapDrawable, но я попробовал использовать другие растровые изображения, чтобы проверить, был ли он каким-то образом искажен. Я скоро вернусь к вам. –

+0

Просто некоторые мысли, может ли logoBitmap быть нулевым? Я согласен с Junior Buckeridge, пытаясь упростить проблему настолько, насколько это возможно. Возможно, просто проверьте, отобразив canvas = new Canvas (logoBitmap); и ничего больше? – TheIT

ответ

0

попробовать что-то просто:

canvas.drawBitmap(logoBitmap, logoSize.left, logoSize.top, null); 

С уважением.

+0

Ничто в его сообщении не указывает, что он не пробовал что-то «простое». Я согласен с тем, что он должен был подробно рассказать о том, что именно он пробовал за последние пару дней, но в этом случае, безусловно, нет необходимости в комментариях, подобных «сделайте еще немного исследований в следующий раз». – TheIT

+0

Прошу прощения, если я обижу чьи-то чувства. Это было не мое намерение. Я имел в виду, что простой взгляд на андроидные документы разрешили бы проблему. Также извините мой английский (второй язык). –

+0

Не беспокойтесь. Я рисовал растровые изображения на холсте раньше с помощью метода canvas.drawBitmap (Bitmap, null, RectF, null), он обычно работает очень плавно и просто .. Я просто не могу понять проблему на этот раз. Но что касается вашего «Попробуйте что-то простое», вам не нужно включать объект рисования .. он может просто быть нулевым, чтобы сделать его еще более простым. –

Смежные вопросы