当前位置: 首页 > news >正文

Android画布Canvas裁剪clipRect,Kotlin

Android画布Canvas裁剪clipRect,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绘制drawBitmap基于源Rect和目的Rect,Kotlin-CSDN博客文章浏览阅读1.3k次,点赞19次,收藏15次。文章浏览阅读9.6k次。文章浏览阅读1.8k次。/*Java代码 将Drawable转化为Bitmap */ Bitmap drawableToBitmap(Drawable drawable) { int width = drawable.getIntrinsicWidth();Android Material Design :LinearLayoutCompat添加分割线divider_linearlayout 分割线-CSDN博客。https://blog.csdn.net/zhangphil/article/details/134818221

Android Bitmap保存成至手机图片文件,Kotlin_android bitmap保存图片-CSDN博客文章浏览阅读883次,点赞8次,收藏5次。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。假设根目录的Pictures下已经有两张图片zhang.jpg和phil.jpg,最终把这两张图片合并成zhangphil.jpg的长图:package zhangphil.test;_android bitmap保存图片https://blog.csdn.net/zhangphil/article/details/134603333

 

 

相关文章:

  • 华为云Stack 8.X 流量模型分析(二)
  • 听GPT 讲Rust源代码--src/tools(22)
  • 自动生成数控加工的轨迹刀具轨迹阿基米德螺旋线(3D)
  • Codeforces Round 916 (Div. 3)(E:贪心 F贪心dfs G tarjan+topsort +线段树优化建图)
  • 实现 Trie (前缀树)
  • Go自定义PriorityQueue优先队列使用Heap堆
  • 微信小程序生成一个天气查询的小程序
  • 用23种设计模式打造一个cocos creator的游戏框架----(二十二)原型模式
  • 音视频的编码格式与封装格式
  • mysql 数据编译安装以及参数说明 安装包下载
  • OpenCV利用HSV颜色区间分离不同物体
  • linux开发板树莓派下载vnc远程桌面
  • 前菜---二叉树+堆的小练习
  • 手写单链表(指针)(next域)附图
  • docker资源限制
  • 【matlab】Matlab三维绘图指南
  • 使用Python实现发送Email电子邮件【第19篇—python发邮件】
  • SolidWorks中的InsertCombineFeature
  • 【C++进阶02】多态
  • Go 泛型之类型参数
  • 上海“世行对标改革”的税务样本:设立全国首个税务审判庭、制定首个税务行政复议简易程序
  • 14岁女生瞒报年龄文身后洗不掉,法院判店铺承担六成责任
  • 虚假认定实质性重组、高估不良债权价值,原中国华融资产重庆分公司被罚180万元
  • 壹基金发布2024年度报告,公益项目惠及937万人次
  • 七大交响乐团“神仙斗法”,时代交响在上海奏出时代新声
  • 迪拜金融市场CEO:2024年市场表现出色,超八成新投资者来自海外