2016-11-19 3 views
2

Я пробовал предлагаемое решение Android: How to overlay-a-bitmap/draw-over a bitmap?. Кажется, я работаю, но у меня получилось слегка дезориентированное изображение.Как наложить растровое изображение на другое

before-overlay

after-overlay

enter image description here enter image description here

Я поставил мой редактирования значок для переключения между режимами запуска и остановки рисования на холсте. Когда пользователь перестает рисовать, я получаю растровое изображение холста и изображение растрового изображения imageView и overlay на изображении. Как видно из скриншотов, imageView - это изображение для ноутбука и растровое изображение холста - это стрелка вверх, которую я рисовал. Вот моя функция наложения.

private Bitmap overlay(Bitmap bmp1, Bitmap bmp2) { 
     Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig()); 
     Canvas canvas = new Canvas(bmOverlay); 
     canvas.drawBitmap(bmp1, new Matrix(), null); 
     canvas.drawBitmap(bmp2, new Matrix(), null); 
     return bmOverlay; 
    } 

Я новичок в android и буду признателен за помощь в этом отношении. Спасибо!

ответ

0

Самого простой способ сделать это без углубиться с графическим LIBS использует FrameLayout, с этим макетом вы можете разместить один вид над другими в порядке, как они будут добавлены в макете, например:

<FrameLayout> 
    <ImageView android:id="@+id/imageView1" /> 
    <ImageView android:id="@+id/imageView2" /> 
</FrameLayout> 

В примере выше imageView2 будет перекрывать изображениеView1, это самый быстрый способ наложения одного изображения на другой. Этот подход позволяет помещать любого потомка представления над другим.

+0

Но после наложения мне нужно создать файл .jpg с наложенным растровым изображением. –

+0

Это может помочь вам создать jpg из FrameLayout: http://stackoverflow.com/questions/35810630/creating-image-from-view или http://stackoverflow.com/questions/3095080/create-image-from- view-screen-in-android – ararog

+0

@ ararog Да, это можно сделать, но я хотел бы достичь наилучшего дизайна. Я продолжил читать документы для холста, но не могу понять, что нужно передать как «верх», «левый» и «краска». (проверьте решение SepJaPro2.4) –

3

я думаю, что вы можете использовать что-то вроде этого, чтобы достичь того, чего вы хотите:

Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG); 
Canvas result = new Canvas(underlayBitmap); 
result.drawBitmap(overlayBitmap, left, top, paint); 

вы можете дать верхнюю сторону и левую сторону, где вы хотите, чтобы ваш оверлей будет нарисована.

надеюсь, что это поможет.

+0

просто добавил код для функции наложения :) –

+0

Дело в том, что я не уверен, что должно быть 'left',' top' и 'paint'. Я прочитал документацию, но не мог понять это. Я хочу наложить 'bmp2' на' bmp1' –

+0

сначала вы должны получить холст из bmp1 (нижний слой), а затем использовать canvas.drawBitmap (bmp2,0,0, –