kotlin 图片浮雕处理

来源:互联网 发布:网络订货系统存在问题 编辑:程序博客网 时间:2024/04/27 19:20

浮雕效果实现原理:

算法原理:用前一个像素点的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程序员必须掌握 这篇文章中的线程优化部分。

三、效果图

图片浮雕效果

原创粉丝点击