Android Canvas クリップRect、Kotlin

Android Canvas クリップRect、Kotlin

 

 

    private fun mydraw() {
        val originBmp = BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)

        val newBmp = Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(newBmp)

        //把原图绘制在画布Canvas
        canvas.drawBitmap(originBmp, 0f, 0f, null)

        val paint = Paint(Paint.ANTI_ALIAS_FLAG)
        paint.color = Color.BLUE
        paint.style = Paint.Style.STROKE
        paint.strokeWidth = 30f

        val centerX = originBmp.width / 2
        val centerY = originBmp.height / 2
        val w = 300
        val h = 200
        val rect = Rect(centerX - w / 2, centerY - h / 2, centerX + w / 2, centerY + h / 2)
        canvas.clipRect(rect) //选(裁剪)出一块中心区域。
        iv1?.setImageURI(Uri.fromFile(saveBitmapToFile(newBmp)))

        canvas.drawColor(Color.RED) //在这块中心区域绘制颜色。
        iv2?.setImageURI(Uri.fromFile(saveBitmapToFile(newBmp)))

        canvas.drawRect(rect, paint) //在这块中心区域边框绘制线。
        iv3?.setImageURI(Uri.fromFile(saveBitmapToFile(newBmp)))
    }

    private fun saveBitmapToFile(bm: Bitmap): File? {
        var saveFile: File? = null
        val savePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()
        if (!Files.exists(Paths.get(savePath))) {
            Log.d("保存文件", "${savePath}不存在!")
        } else {
            saveFile = File(savePath, System.currentTimeMillis().toString() + ".jpeg")
            try {
                val saveImgOut = FileOutputStream(saveFile)
                //压缩
                bm.compress(Bitmap.CompressFormat.JPEG, 90, saveImgOut)
                saveImgOut.flush()
                saveImgOut.close()
                Log.d("保存文件", "Bitmap保存至 ${saveFile.absoluteFile.toPath()}")
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }

        return saveFile
    }

 

 

 

9ccabbf927fd4ff1b3e53cf087858d15.png

 

Android Canvas は、ソース Rect と宛先 Rect に基づいてdrawBitmap を描画します。Kotlin-CSDN ブログ記事は 130,000 回閲覧および読まれ、19 回いいね! され、15 回収集されました。この記事は 9.6k 回閲覧され、読まれました。この記事は 1.8k 回閲覧され、読まれました。/*Java コードは Drawable を Bitmap に変換します */ BitmapdrawableToBitmap(Drawabledrawable) { int width =drawable.getIntrinsicWidth();Android マテリアル デザイン: LinearLayoutCompat で分割線を追加しますdivider_linearlayout 分割線 - CSDN ブログ。https://blog.csdn.net/zhangphil/article/details/134818221

Android ビットマップは携帯電話に画像ファイルとして保存され、Kotlin_android ビットマップは画像を保存します - CSDN ブログ記事は 883 回閲覧および読まれ、8 回いいね! され、5 回収集されました。Android で画像を結合して長い画像コードを生成すると、最初の画像の幅を標準として 2 つの画像を結合できます。結合される 2 番目の画像の幅が最初の画像と異なる場合は、最初の画像の幅が2 番目の画像をスケールするための行。ルート ディレクトリの Pictures の下に zhang.jpg と phil.jpg という 2 つの画像がすでにあると仮定します。最後に、これら 2 つの画像が zhangphil.jpg の長い画像にマージされます: パッケージ zhangphil.test;_android ビットマップで画像https: //blog.csdn .net/zhangphil/article/details/134603333

 

 

おすすめ

転載: blog.csdn.net/zhangphil/article/details/135156671