3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 255
1

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

04.03.2018, 22:07. Показов 1512. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2018, 22:07
Ответы с готовыми решениями:

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

Наложение изображений друг на друга
Не получается наложить изображение 4.gpeg на logo.png. Второе изображение то что 4.gpeg просто...

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

Наложение двух изображений друг на друга
Задача такая: есть 1 фоновое изображение, и изображение, содержащее небольшой объект на прозрачном...

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

Наложение нескольких изображений друг на друга с их выбором
Приветствую всех. На одной из страниц сайта хочу сделать выбор из двух форм ввода input типа...

Наложение друг на друга
Добрый день форумчане у меня происходит вот такое с чем это может быть связано?

Наложение pictureBox друг на друга
Добрый день, есть несколько picturebox(больше 3), их можно пермещать по форме, но картинки...

Наложение Collider2D друг на друга
Ситуация: 2 объекта находятся один на другом (наложены друг на друга). У обоих есть коллайдер...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru