【转】六、android图片特效处理之图片叠加

摘要:
如前所述,像素被处理。您可以参考Android图像处理系列7的前两篇文章-图像涂鸦,水印-图像覆盖和Android图像处理系统6-向图像添加帧(如下)-图像覆盖。本文与前一篇略有不同。叠加原理是两张图片的像素根据透明度叠加,而不进行颜色过滤。覆盖图像可以是JPG格式。和以前一样,最好扩大资产目录。可以根据要求修改alpha变量值。建议大于0.5,否则原始图纸将不清晰。

这篇将讲到图片特效处理的图片叠加效果。跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加android图像处理系列之六--给图片添加边框(下)-图片叠加两篇文章,此篇所讲的与之前有一点区别。叠加原理是两张图片的像素点按透明度叠加,不会进行颜色过滤。叠加图片可以是JPG格式,跟前在一样,最好是放大assets目录。下面看效果图:

【转】六、android图片特效处理之图片叠加第1张+【转】六、android图片特效处理之图片叠加第2张=【转】六、android图片特效处理之图片叠加第3张

代码:

/**
     * 图片效果叠加
     * @param bmp 限制了尺寸大小的Bitmap
     * @return
     */
    private Bitmap overlay(Bitmap bmp)
    {
        long start = System.currentTimeMillis();
        int width = bmp.getWidth();
        int height = bmp.getHeight();
        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        
        // 对边框图片进行缩放
        Bitmap overlay = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.rainbow_overlay);
        int w = overlay.getWidth();
        int h = overlay.getHeight();
        float scaleX = width * 1F / w;
        float scaleY = height * 1F / h;
        Matrix matrix = new Matrix();
        matrix.postScale(scaleX, scaleY);
        
        Bitmap overlayCopy = Bitmap.createBitmap(overlay, 0, 0, w, h, matrix, true);
        
        int pixColor = 0;
        int layColor = 0;
        
        int pixR = 0;
        int pixG = 0;
        int pixB = 0;
        int pixA = 0;
        
        int newR = 0;
        int newG = 0;
        int newB = 0;
        int newA = 0;
        
        int layR = 0;
        int layG = 0;
        int layB = 0;
        int layA = 0;
        
        final float alpha = 0.5F;
        
        int[] srcPixels = new int[width * height];
        int[] layPixels = new int[width * height];
        bmp.getPixels(srcPixels, 0, width, 0, 0, width, height);
        overlayCopy.getPixels(layPixels, 0, width, 0, 0, width, height);
        
        int pos = 0;
        for (int i = 0; i < height; i++)
        {
            for (int k = 0; k < width; k++)
            {
                pos = i * width + k;
                pixColor = srcPixels[pos];
                layColor = layPixels[pos];
                
                pixR = Color.red(pixColor);
                pixG = Color.green(pixColor);
                pixB = Color.blue(pixColor);
                pixA = Color.alpha(pixColor);
                
                layR = Color.red(layColor);
                layG = Color.green(layColor);
                layB = Color.blue(layColor);
                layA = Color.alpha(layColor);
                
                newR = (int) (pixR * alpha + layR * (1 - alpha));
                newG = (int) (pixG * alpha + layG * (1 - alpha));
                newB = (int) (pixB * alpha + layB * (1 - alpha));
                layA = (int) (pixA * alpha + layA * (1 - alpha));
                
                newR = Math.min(255, Math.max(0, newR));
                newG = Math.min(255, Math.max(0, newG));
                newB = Math.min(255, Math.max(0, newB));
                newA = Math.min(255, Math.max(0, layA));
                
                srcPixels[pos] = Color.argb(newA, newR, newG, newB);
            }
        }
        
        bitmap.setPixels(srcPixels, 0, width, 0, 0, width, height);
        long end = System.currentTimeMillis();
        Log.d("may", "overlayAmeliorate used time="+(end - start));
        return bitmap;
    }

叠加的边框图片还是大点比较好,也要控制被叠加图片大小。alpha变量值可以根据需求修改,建议还是大于0.5比较好,不然原图会看不清楚。

免责声明:文章转载自《【转】六、android图片特效处理之图片叠加》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GTX 750TI 使用 ffmpeg 时无法用 GPU HEVC(h.265) 进行加速Oralce 触发器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

CSS-顶部滚动进度条

Documentbody{background-image:linear-gradient(torighttop,#f0050%,#ece50%);background-repeat:no-repeat;height:300vh;position:relative;background-size:100%calc(100%-100vh+5px);}body:...

您的硬件设置已被更改,请重新启动计算机,使更改生效

在Win7旗舰系统上,出现“您的硬件设置已更改,请重新启动计算机以使更改生效”。开机后将弹出“您的硬件设置已更改,请重新启动计算机”窗口。不要关闭它。打开任务管理器,右键单击以转到进程,查看其中是否有正在运行的进程。进程名称为:atieclxx.exe右键单击进程打开文件的位置。将此程序移出原始文件夹(最好是另一个磁盘),然后重新启动计算机。...

axios 处理超时问题 记录

前言:记录最近两天处理请求超时的逻辑。...

eeprom AT24C512 i2c总线的特点 来自eeleader的博客

今天,我花了一天时间研究i2c总线的特性。因为我想用FPGA来设计i2c总线的操作时序i2c总线是一种常用的串行总线。我想操作串行eepromAT24C512。EEPROM的容量为512KBIT,内部按照每页128字节进行组织,共512页。第一点:芯片工作速度的选择:根据AT24C512手册,芯片可以在1.8V-5.0V的电压下工作;I2C总线的最大运行速度...

浅谈JEECG多数据源的使用

首先,我们将简要介绍JEECG是什么。JEECG主张简单的功能由代码生成器直接生成,复杂的业务由表单定制,业务流程由工作流实现和扩展,开发人员编写特殊的业务逻辑。让我们重点讨论JEECG3.5GA中多个数据源的使用。JEECG3.5提供多个数据源的功能。JEECG多数据源的设计直接使用Springjdbc连接,独立于Hibernate、Mybatis和其他持...

iostat

-pdevice|ALL和-x选项互斥。它们用于显示块设备和系统分区的统计信息。您还可以在-p之后指定设备名称,例如#iostat phda或显示所有设备:#iostat pALL-t输出数据时,打印数据收集时间---等待I/O svctm的平均时间:服务时间,从生成IO请求到完成IO的时间。从源代码中可以看出:--完成I/O需求的平均时间*=util---...