Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
ILNAR_93
Android
243 / 240 / 52
Регистрация: 19.01.2013
Сообщений: 1,895
Записей в блоге: 3
1

Наложить на картинку текст

07.03.2017, 13:17. Просмотров 596. Ответов 1
Метки нет (Все метки)

Делаю фотографие и нужно в нижнем правом углу написать 3 строки. Как это сделать? Красиво и экономя память..

Интересен ваш вариант - нужен хороший вариант.



У меня 2 варианта:

1 делаю из текста картинки и накладываю картинку на картинку

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
public Bitmap textAsBitmap(String text, Context c) {
        TextView textView = new TextView(c);
        textView.setDrawingCacheEnabled(true);
        textView.setText(text);
        textView.setTextColor(-1);
        textView.setPadding(10, 5, 10, 5);
        textView.setTextSize(6f);
        textView.setTextColor(getColor(ctx, R.color.black));
        //Drawable d = getDrawable(R.drawable.back);
 
        ColorDrawable d = new ColorDrawable(getColor(ctx, R.color.task_image_text_background));
        if (d != null) {
            if (Build.VERSION.SDK_INT < 16) {
                textView.setBackgroundDrawable(d);
            } else {
                textView.setBackground(d);
            }
        }
        textView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight());
        textView.buildDrawingCache(true);
        Bitmap b = Bitmap.createBitmap(textView.getDrawingCache());
        textView.setDrawingCacheEnabled(false);
        return b;
    }
 
    public Bitmap combinateImages(Bitmap down, Bitmap up, int direction) {
        Paint paint = new Paint();
        paint.setFlags(1);
        Bitmap combined;
        Canvas comboImage;
        if (down != null && up != null) {
            int width;
            int height;
            if (down.getWidth() > up.getWidth()) {
                width = down.getWidth();
                height = down.getHeight();
            } else {
                width = up.getWidth();
                height = up.getHeight();
            }
            combined = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            comboImage = new Canvas(combined);
            comboImage.rotate((float) direction, (float) (down.getWidth() / 2), (float) (down.getHeight() / 2));
            comboImage.drawBitmap(down, 0.0f, 0.0f, paint);
            comboImage.rotate((float) (-direction), (float) (down.getWidth() / 2), (float) (down.getHeight() / 2));
            comboImage.drawBitmap(up, (float) (down.getWidth() - up.getWidth() - 5), (float) (down.getHeight() - up.getHeight() - 5), paint);
            return combined;
        } else if (up != null) {
            combined = Bitmap.createBitmap(up.getWidth(), up.getHeight() + (up.getHeight()), Bitmap.Config.ARGB_8888);
            new Canvas(combined).drawBitmap(down, 0.0f, 0.0f, null);
            return combined;
        } else if (down == null) {
            return null;
        } else {
            combined = Bitmap.createBitmap(down.getWidth(), down.getHeight(), Bitmap.Config.ARGB_8888);
            comboImage = new Canvas(combined);
            comboImage.rotate((float) direction, (float) (down.getWidth() / 2), (float) (down.getHeight() / 2));
            comboImage.drawBitmap(down, 0.0f, 0.0f, paint);
            return combined;
        }
    }

2вариант канвас

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
public Bitmap drawTextToBitmap(Bitmap bitmap,
                                   String[] gText) {
 
        float scale = ctx.getResources().getDisplayMetrics().density;
        android.graphics.Bitmap.Config bitmapConfig =
                bitmap.getConfig();
        // set default bitmap config if none
        if(bitmapConfig == null) {
            bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
        }
        // resource bitmaps are imutable,
        // so we need to convert it to mutable one
        bitmap = bitmap.copy(bitmapConfig, true);
 
        Canvas canvas = new Canvas(bitmap);
        // new antialised Paint
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        // text color - #3D3D3D
        paint.setColor(Color.BLACK);
        // text size in pixels
        paint.setTextSize((int) (6 * scale));
        // text shadow
       paint.setShadowLayer(1f, 1f, 1f, Color.WHITE);
 
        for (int i =0; i<gText.length;i++){
            // draw text to the Canvas center
            Rect bounds = new Rect();
            paint.getTextBounds(gText[i], 0, gText[i].length(), bounds);
            int x = 5;//(bitmap.getWidth() - bounds.width())/2;
            int y = bitmap.getHeight() - ((i + 1) * 12);//(bitmap.getHeight() - ((i+1) * bounds.height())) ;
            canvas.drawText(gText[i], x, y, paint);
        }
 
 
 
        return bitmap;
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2017, 13:17
Ответы с готовыми решениями:

ImageView, как наложить картинку на картинку?
Всем привет ,такая проблемка ,пытаюсь наложить картинку на картинку ,но...

Отобразить одновременно текст и картинку
Здравствуйте. Хочу создать создать приложение-обучение математики в формате...

Вывести в верхнее меню картинку или текст
я совсем нью в программировании для смартфонов, задача есть. Но затрудняюсь...

OpenGL es: наложить фон
Всем привет!!! Подскажите пожалуйста как в играх делаются картинки типа...

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

1
shavuz
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 596
07.03.2017, 15:25 2
есть еще такой варриант
если надо сохранять
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
void saveImage() {
    File myDir=new File("/sdcard/saved_images");
    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);
 
        // NEWLY ADDED CODE STARTS HERE [
            Canvas canvas = new Canvas(originalBitmap);
 
            Paint paint = new Paint();
            paint.setColor(Color.WHITE); // Text Color
            paint.setStrokeWidth(12); // Text Size
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); // Text Overlapping Pattern
            // some more settings...
 
            canvas.drawBitmap(originalBitmap, 0, 0, paint);
            canvas.drawText("Testing...", 10, 10, paint);
        // NEWLY ADDED CODE ENDS HERE ]
 
        originalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();
    } catch (Exception e) {
       e.printStackTrace();
    }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2017, 15:25

Наложить информацию на фотографию
У меня есть фотография, которая была получена из видео(содержит изображение...

Как наложить градиент на кнопку
Как кнопку закрасить градиентом,тобишь наложить: &lt;gradient ...

Как ровно наложить imageview на surfaceview
Не удается подогнать правильно размер эти двух view. Хочу чтобы фотография...


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

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

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