Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 243
1

Наложение изображений друг на друга

04.03.2018, 22:07. Просмотров 393. Ответов 5
Метки нет (Все метки)

Здравствуйте.
Задача такова. В приложение загружается произвольное изображение из галереи пользователя.
На него накладывается изображение рамки из ресурсов приложения и сохраняется результат.
Дело в том, что я не могу знать размер загружаемых изображений. Значит я должен менять размер своей рамки и подгонять под размеры загруженной картинки.
Вот код...

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
public class MainActivity extends Activity implements
android.view.View.OnClickListener {
 
    private Button loadButton;
    private ImageView image;
    private static final int REQUEST = 1;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        ActionBar actionBar = getActionBar();     actionBar.hide();
        image = (ImageView) findViewById(R.id.imageView1);
        loadButton = (Button) findViewById(R.id.button1);
        loadButton.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v) {
        Intent i = new Intent(Intent.ACTION_PICK);
        i.setType("image/*");
        startActivityForResult(i, REQUEST);
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
 
        Bitmap img = null;
 
        if (requestCode == REQUEST && resultCode == RESULT_OK) {
            Uri selectedImage = data.getData();
            try {
                img = Media.getBitmap(getContentResolver(), selectedImage);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            image.setImageBitmap(img);
        }
    }
    
// кнопка сохранения
    public void onsave (View v){
        Bitmap img;
        img = ((BitmapDrawable)image.getDrawable()).getBitmap();    
        Bitmap ram = BitmapFactory.decodeResource(getResources(),R.drawable.ramka);
        
        Bitmap newBitmap = overlay (img , ram);
        SaveImage(newBitmap);
    }
 
 
    private void SaveImage (Bitmap finalBitmap) {
 
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root);    
        myDir.mkdirs();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-"+ n +".jpg";
        File file = new File (myDir, fname);
        if (file.exists ()) file.delete (); 
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG, 98, out);
            out.flush();
            out.close();
            MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }   
    }
    
    public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {
        int width = bm.getWidth();
        int height = bm.getHeight();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // CREATE A MATRIX FOR THE MANIPULATION
        Matrix matrix = new Matrix();
        // RESIZE THE BIT MAP
        matrix.postScale(scaleWidth, scaleHeight);
        // "RECREATE" THE NEW BITMAP
        Bitmap resizedBitmap = Bitmap.createBitmap(
            bm, 0, 0, width, height, matrix, false);
        bm.recycle();
        return resizedBitmap;
    }
    
    
    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;
    }
}
При наложении даже одинаковых размеров картинки и рамки, последняя ложится неровно. И как использовать getResizedBitmap ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2018, 22:07
Ответы с готовыми решениями:

Наложение изображений
Подскажите пожалуйста, как наложить изображение на изображение. Пробую вот так: но последующая...

Наложение изображений на кнопке из кода
Други, подскажите начинающему. Как можно наложить на кнопку бэкграунд и иконку. Т.е. 2 изображения...

Компоненты налезают друг на друга
По старой дельфийской привычке бодро покидал на форму компонентов (Button, ToggleButton,...

Все наслаивается друг на друга
Здравствуйте, Старая проблема, в превью всё выглядит красиво, а как запущу - все элементы...

Фрагменты наслаиваются друг на друга
Добрый день. Не пойму почему фрагменты наслаиваются друг на друга В main активити в onCreate...

5
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 243
04.03.2018, 22:26  [ТС] 2
Вот что получается... Как подогнать размер рамки под размер загружаемой картинки...
0
Миниатюры
Наложение изображений друг на друга  
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 243
05.03.2018, 18:18  [ТС] 3
Может я что то не так делаю или есть другой способ...????
0
Araikovich
10 / 9 / 1
Регистрация: 09.08.2017
Сообщений: 62
06.03.2018, 11:39 4
ты же получаешь размеры загружаемой пользователем. Сделай такие же размеры у рамки, накладывай.
0
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 243
06.03.2018, 12:34  [ТС] 5
Araikovich, а как это сделать?
0
Araikovich
10 / 9 / 1
Регистрация: 09.08.2017
Сообщений: 62
06.03.2018, 19:33 6
Nikolarsen, Блин, только что задумался, вообще нет идей, как это сделать( Отпиши, если у тебя получиться разобраться, мне тоже интересно)
0
06.03.2018, 19:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2018, 19:33

Как избежать наложения друг на друга textview
Есть такой layout <?xml version="1.0" encoding="utf-8"?> <LinearLayout...

Не загружаются данные в Firebase отдельно друг от друга
Подскажите в чем проблема. Есть 2 EditText и ImageView. Если заполнить все поля и выбрать...

Наложение 2 изображений друг на друга
Мучался, мучался, сам не додумался, нужна помощь:) Есть 2 изображения, ну и обычный див блок,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru