为了账号安全,请及时绑定邮箱和手机立即绑定

Android 画布没有在我的位图上绘制文本

Android 画布没有在我的位图上绘制文本

翻过高山走不出你 2022-06-04 10:40:36
我正在尝试从用户那里获取文本输入并将其绘制在图像上,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++;    }目前,.drawText()基于我在其他 SO 帖子中看到的示例,我只有 2 个实现。我的假设是文本不可见,并且没有对图像进行任何更改,因为我没有为paint对象提供任何属性。
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

您看不到任何更改的主要问题是您进行了更改mutableBitmap但将原始文件保存bitmap到磁盘。

这可以通过将前两个(甚至三个)语句连接在一起来避免:

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

您在其他任何地方都不需要原始位图,这有效地防止了您犯错。不要做你不需要做的事情。

一些技巧:


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号