亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android 畫布沒有在我的位圖上繪制文本

Android 畫布沒有在我的位圖上繪制文本

翻過高山走不出你 2022-06-04 10:40:36
我正在嘗試從用戶那里獲取文本輸入并將其繪制在圖像上,Canvas但圖像被保存而沒有應該繪制的內容?,F在,我只是想在擔心字體、顏色、樣式等之前獲取圖像上的文本。這是我的代碼: 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 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號