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程序员必须掌握 这篇文章中的线程优化部分。
三、效果图
阅读全文
0 0
- kotlin 图片浮雕处理
- 图片处理为浮雕和黑白效果
- 图片处理(底片,黑白,锐化,柔化,浮雕,雾化)
- 【图像处理】数字图像处理软件-图片特效--浮雕效果(四)
- renderScript实现图片处理雾化效果 浮雕效果
- 【C#】图片处理(底片,黑白,锐化,柔化,浮雕,雾化)
- 图像处理 浮雕效果
- Delphi图像处理 -- 灰色浮雕
- Delphi图像处理 -- 彩色浮雕
- Delphi图像处理 -- 填充浮雕
- 对图像的浮雕处理
- 对图像的浮雕处理。。
- 图像处理之浮雕算法
- C#实现浮雕效果显示图片
- android图像处理(3)浮雕效果
- android图像处理(3)浮雕效果
- android图像处理(3)浮雕效果
- android图像处理(3)浮雕效果
- 【数据库学习】java使用Mongodb增删改查
- [总结]视音频编解码技术零基础学习方法
- No plugin found for prefix 'spring-boot' ...的问题解决方法
- Monkey and Banana
- 静态构造函数
- kotlin 图片浮雕处理
- 内存分配
- 如何定义一个只能在堆上(栈上)生成对象的类?
- Android QR Code 二维码快速开发——使用ZXing, ZBar
- tp3.2操作mongo SUM数据的实例(aggregate 不分组获取统计值)
- latex命令替换之\newcommand
- UGUI前显示模型
- 区块链技术指南pdf
- SpringMVC中@RequestBody和@ResponseBody注解详解