Android-холст не рисует текст на моем растровом изображении - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь получить ввод текста от пользователя и нарисовать его на изображении, используя Canvas, но изображение сохраняется без того, что предполагалось нарисовать.Сейчас я просто пытаюсь получить текст на изображении, прежде чем беспокоиться о шрифте, цвете, стилях и т. Д.

Это мой код:

 public void createBitmapAndSave(ImageView img){
        BitmapDrawable bitmapDrawable = ((BitmapDrawable) img.getDrawable());
        Bitmap bitmap = bitmapDrawable.getBitmap();
        Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

        Canvas canvas = new Canvas(mutableBitmap);
        Paint paint = new Paint();
        paint.setColor(Color.BLUE);
        paint.setTextSize(200);
        paint.setStyle(Paint.Style.FILL);
        paint.setShadowLayer(10f, 10f, 10f, Color.BLACK);

        String topText = topTextView.getText().toString();
        String bottomText = bottomTextView.getText().toString();

        canvas.drawText(topText, 0, 0, paint);
        canvas.drawText(bottomText, 50, 50, paint);

        File file;
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

        String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath();
        file = new File(path + "/SimpliMeme/" + timeStamp + "-" + counter + ".jpg");
        file.getParentFile().mkdir();

        try{
            OutputStream stream = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);
            stream.flush();
            stream.close();
            Toast.makeText(getContext(), "Meme Saved", Toast.LENGTH_SHORT).show();
        }
        catch (IOException e){ e.printStackTrace();}

        Uri contentUri = Uri.fromFile(file);
        mediaScanIntent.setData(contentUri);
        Objects.requireNonNull(getContext()).sendBroadcast(mediaScanIntent);
        counter++;
    }

НаНа данный момент у меня есть только 2 .drawText() реализации, основанные на примерах, которые я видел в других сообщениях SO.Я предполагаю, что текст не виден, и в изображение не вносятся никакие изменения, потому что я не предоставил объекту paint никаких атрибутов.

1 Ответ

0 голосов
/ 03 марта 2019

Основная проблема, по которой вы не видите изменений, заключается в том, что вы вносите изменения в mutableBitmap, но сохраняете исходный bitmap на диск.

Этого можно избежать, если объединить первые два (или даже три)заявления вместе:

final Bitmap bitmap = bitmapDrawable.getBitmap()
        .copy(Bitmap.Config.ARGB_8888, true);

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

Некоторые советы:

...