渣渣兔 发表于 2024-12-8 00:48:52

Android矩阵Matrix在1张宽平大Bitmap批量绘制N个小Bitmap,Kotlin(1)

Android矩阵Matrix在1张宽平大Bitmap批量绘制N个小Bitmap,Kotlin(1)




import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Matrix
import android.graphics.Paint
import android.graphics.RectF
import android.os.Bundle
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    companion object {
      const val TAG = "fly"
      const val IMG_SIZE = 200
      const val IMG_COUNT = 5
    }

    override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)
      val image5 = findViewById<ImageView>(R.id.image5)

      myDrawMultiBitmap(image5)
    }

    private fun myDrawMultiBitmap(imageView: ImageView) {
      imageView.scaleType = ImageView.ScaleType.CENTER_CROP

      val options = BitmapFactory.Options()
      options.outWidth = IMG_SIZE
      options.outHeight = IMG_SIZE
      options.inPreferredConfig = Bitmap.Config.RGB_565

      val bitmaps = ArrayList<Bitmap>()
      for (i in 0 until IMG_COUNT) {
            if (i % 2 == 0) {
                val b = BitmapFactory.decodeResource(resources, R.mipmap.img, options)
                bitmaps.add(b)
            } else {
                val b = BitmapFactory.decodeResource(resources, R.mipmap.pic, options)
                bitmaps.add(b)
            }
      }

      val resultBitmap = Bitmap.createBitmap(IMG_SIZE * IMG_COUNT, IMG_SIZE, Bitmap.Config.RGB_565)
      val canvas = Canvas(resultBitmap)
      canvas.drawColor(Color.LTGRAY)

      bitmaps.forEachIndexed { index, bitmap ->
            val w = bitmap.width
            val h = bitmap.height
            val srcRct = RectF(0f, 0f, w.toFloat(), h.toFloat())

            val dstRctLeft = index * IMG_SIZE.toFloat()
            val dstRct = RectF(dstRctLeft, 0f, dstRctLeft + IMG_SIZE, IMG_SIZE.toFloat())

            val paint = Paint()
            if (index % 2 == 0) {
                paint.color = Color.RED
            } else {
                paint.color = Color.BLUE
            }
            canvas.drawRect(dstRct, paint)
            
            val mx = Matrix()
            mx.setRectToRect(srcRct, dstRct, Matrix.ScaleToFit.CENTER)

            canvas.drawBitmap(bitmap, mx, null)
      }

      imageView.setImageBitmap(resultBitmap)
    }
}


https://i-blog.csdnimg.cn/direct/06782bd2d16b4a8ebe5bdeef96bb64a7.png

遗留题目,需要把BitmapFactory解码出来的Bitmap最终以中心缩放格式绘制到大宽平Bitmap上。这里没有实现中心缩放centerCrop。




Android矩阵Matrix实现Glide图像fitCenter转换为centerCrop,Kotlin-CSDN博客文章欣赏阅读551次,点赞12次,收藏12次。Android拼接合并图片生发展图代码实现合并两张图片,以第一张图片的宽度为标准,假如被合并的第二张图片宽度和第一张差别,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生发展图代码实现合并两张图片,以第一张图片的宽度为标准,假如被合并的第二张图片宽度和第一张差别,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。基础上,把剪切的区域从矩形Rect变为圆形的Path,当手指在上面的ImageView移动时候,下面同等大小对应的坐标区域表现“剪切”出来的圆形图。https://g.csdnimg.cn/static/logo/favicon32.icohttps://zhangphil.blog.csdn.net/article/details/144183165

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android矩阵Matrix在1张宽平大Bitmap批量绘制N个小Bitmap,Kotlin(1)