kotlin 图片浮雕处理

浮雕效果实现原理:

算法原理:用前一个像素点的RGB值分别减去当前像素点的RGB值并加上127作为当前像素点的RGB值。
例: ABC代表三个连续像素点, 求B点的浮雕效果如下:
B.a = C.a - B.a + 127;
B.r = C.r - B.r + 127;
B.g = C.g - B.g + 127;
B.b = C.b - B.b + 127;
注意RGB值在0~255之间。

一、什么都不说了,直接上代码

    /**
     * 对相片进行浮雕处理
     */
    private fun reliefImage(): Bitmap {
        val bm = BitmapFactory.decodeResource(resources, R.drawable.a)
        val width = bm.width
        val height = bm.height
        val size = width * height
        val bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)

        var newPixels = IntArray(size)
        var oldPixels = IntArray(size)

        bm.getPixels(oldPixels, 0, width, 0, 0, width, height)

        for (i in 1..size - 1) {
            //前一个像素
            val preColor = oldPixels[i - 1]
            var preA = Color.alpha(preColor)
            var preR = Color.red(preColor)
            var preG = Color.green(preColor)
            var preB = Color.blue(preColor)

            //后一个像素
            val nextColor = oldPixels[i]
            val newA = Color.alpha(nextColor)
            val newR = Color.red(nextColor)
            val newG = Color.green(nextColor)
            val newB = Color.blue(nextColor)

            preA = (preA - newA + 127)
            preR = (preR - newR + 127)
            preG = (preG - newG + 127)
            preB = (preB - newB + 127)

            if (preA > 255) {
                preA = 255
            }
            if (preR > 255) {
                preR = 255
            }
            if (preG > 255) {
                preG = 255
            }
            if (preB > 255) {
                preB = 255
            }

            newPixels[i] = Color.argb(preA, preR, preG, preB)

        }

        bmp.setPixels(newPixels, 0, width, 0, 0, width, height)

        return bmp
    }

二、获取处理后的Bitmap

                val bm = XThread.submit(Callable<Bitmap> {
                    return@Callable reliefImage()
                })
                imageView!!.setImageBitmap(bm)

注意:这里的XThread,是自己写的线程池执行线程后,获取返回值。

详情参见:Android APP优化—Android程序员必须掌握 这篇文章中的线程优化部分。

三、效果图

图片浮雕效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ronindong

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值