首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用相乘和%不透明度将两个图像混合在一起

使用相乘和%不透明度将两个图像混合在一起
EN

Stack Overflow用户
提问于 2011-10-12 21:58:56
回答 4查看 14.3K关注 0票数 12

我正在尝试用Android将两张图片混合在一起,使用一种类似于乘法的混合模式。

代码语言:javascript
运行
AI代码解释
复制
// Prepare -------------------------------

// Create source images
Bitmap img1 = ...
Bitmap img2 = ...

// Create result image
Bitmap result = ...
Canvas canvas = new Canvas();
canvas.setBitmap(result);

// Get proper display reference
BitmapDrawable drawable = new BitmapDrawable(getResources(), result);
ImageView imageView = (ImageView)findViewById(R.id.imageBlend1);
imageView.setImageDrawable(drawable);


// Apply -------------------------------

// Draw base
canvas.drawBitmap(img1, 0, 0, null);

// Draw overlay
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY));
paint.setShader(new BitmapShader(img2, TileMode.CLAMP, TileMode.CLAMP));

canvas.drawRect(0, 0, img2.getWidth(), img2.getHeight(), paint);

这是可行的,但是我不能控制乘法的“数量”--它总是一个完整的乘法传输。理想情况下,0%的乘法将与基础图像(img1)相同,没有任何更改,但100%的乘法将是我使用上面的代码得到的结果。

paint.setAlpha()似乎对此不起作用。

有没有其他方法来设置新的‘层’的不透明度%?

附注:我猜有一些方法可以通过预乘和将颜色偏移为白色来使multiply工作(使用LightingColorFilter),但它是非常特定于multiplymode的。我正在尝试找到一种方法,将不透明度/%的东西也应用于所有其他传输模式。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-14 23:30:40

不久前我需要做这样的事情,我发现this post about Color Channels很有启发性。(但我担心这与你在“PS”中所描述的内容有关)

Link above in archive.org,感谢@1j01

票数 3
EN

Stack Overflow用户

发布于 2015-01-06 11:01:14

我实现了与我们的iOS应用程序类似的照片滤镜。他们会做类似source bitmap + mask bitmap + blend mode + alpha value的事情。为了达到相同的行为,我只是增加了遮罩的alpha。下面是我的代码最终的样子:

代码语言:javascript
运行
AI代码解释
复制
public static Bitmap blend(Bitmap back, Bitmap front, BlendMethod method, float alpha) {
    if (alpha != 1.0F) {
        front = makeTransparent(front, Math.round(alpha * 255));
    }

    Bitmap.Config config = back.getConfig();
    int width = back.getWidth();
    int height = back.getHeight();

    if (width != front.getWidth() || height != front.getHeight()) {
        Log.e(TAG, "Arrays must be of identical size! Do bitmap scaling prior to blending.");
        return null;
    }

    int[] frontArr = new int[height * width], backArr = new int[height * width], resultArr;

    back.getPixels(backArr, 0, width, 0, 0, width, height);
    front.getPixels(frontArr, 0, width, 0, 0, width, height);

    resultArr = jniBlend(frontArr, backArr, alpha, method.toInt());
    return Bitmap.createBitmap(resultArr, width, height, config);
}

public static Bitmap blend(Bitmap back, Bitmap front, BlendMethod method) {
    return blend(back, front, method, 1F);
}

public static Bitmap makeTransparent(Bitmap src, int value) {
    int width = src.getWidth();
    int height = src.getHeight();
    Bitmap transBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(transBitmap);
    canvas.drawARGB(0, 0, 0, 0);
    // config paint
    final Paint paint = new Paint();
    paint.setAlpha(value);
    canvas.drawBitmap(src, 0, 0, paint);
    return transBitmap;
}

请注意,jniBlend是我自己编写的一些方法,它的行为类似于Java中常用的PorterDuff模式。

方法makeTransparent不是我的-发现它是here:(来自Ruban的答案)

票数 3
EN

Stack Overflow用户

发布于 2017-05-23 10:18:19

代码不完整。它只是给您一个想法,以便您可以使用渲染脚本来混合图像

代码语言:javascript
运行
AI代码解释
复制
public Bitmap blend(Bitmap image)
{
    final float BLUR_RADIUS = 25f;
    Bitmap outbitmap = Bitmap.createBitmap(image);
    final RenderScript renderScript = RenderScript.create(this);

    Allocation tmpin = Allocation.createFromBitmap(renderScript,image);
    Allocation tmpout = Allocation.createFromBitmap(renderScript,outbitmap);
    ScriptIntrinsicBlend blend = ScriptIntrinsicBlend.create(renderScript,
    Element.U8_4(renderScript));

    blend.forEachMultiply(tmpin,tmpout);
    return outbitmap;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7747119

复制
相关文章
针对单个网站的渗透思路
只需要将二级域名输入进去即可,然后默认扫描的是80端口(Web服务),443端口(https服务)
drunk_kk
2021/06/24
1.5K0
Mybatis单个参数的if判断(针对异常:There is no getter for property..)
我们都知道mybatis在进行参数判断的时候,直接可以用<if test=""></if> 就可以了,如下:
执笔记忆的空白
2020/12/25
1.1K0
Android 针对单个Activity设置状态栏颜色
代码如下: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//因为不是所有的系统都可以设置颜色的,在4.4以下就不可以。。有的说4.1,所以在设置的时候要检查一下系统版本是否是4.1以上 Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS
听着music睡
2018/06/25
7420
【HighCharts系列教程】七、导出属性——exporting
默认情况下,HighCharts支持将图表导出为图片或打印功能的。也就是在图表的右上角有两个按钮。打击即可进行相应的操作。
全栈程序员站长
2022/09/20
1.5K0
计算资源及编程-仅针对生信人员
第 5 章 计算资源及编程 5.1 硬件配置 理论上在个人Windows电脑上面做生物信息学数据分析是不实际的,因为太多的生物信息学相关软件的开发者对windows并不熟练,没办法提供完善的基于windows操作系统的软件。 而且个人Windows电脑配置肯定不会太高,一般的组学测序数据都是10~500G一个样本,而且很多软件运行的时候对内存要求很高,最后这些数据的分析过程会非常耗时,个人电脑在硬盘,内存,cpu方面均不足以承担这个重任。 所以一般建议使用配置比较高的服务器,而且建议给服务器安装linux系
生信技能树
2018/03/09
2.2K0
计算资源及编程-仅针对生信人员
计算资源及编程-仅针对生信人员
理论上在个人Windows电脑上面做生物信息学数据分析是不实际的,因为太多的生物信息学相关软件的开发者对windows并不熟练,没办法提供完善的基于windows操作系统的软件。 而且个人Windows电脑配置肯定不会太高,一般的组学测序数据都是10~500G一个样本,而且很多软件运行的时候对内存要求很高,最后这些数据的分析过程会非常耗时,个人电脑在硬盘,内存,cpu方面均不足以承担这个重任。
生信技能树
2018/07/27
7770
计算资源及编程-仅针对生信人员
highcharts本地导出
highcharts有自动导出的模块,以vue中使用为例,只要在main.js中引入导出模块并注册
tianyawhl
2022/11/21
9770
Highcharts导出图片
Highcharts是在做项目涉及到统计图的时候大家的首选,同时也会用到highcharts的export功能,将统计图导出为图片,刚好,最近也遇到了这样的事情,总结出来,以备后用。
牛老师讲GIS
2018/10/23
3K0
Highcharts导出图片
Highcharts使用指南
摘要 Highcharts图表控件是目前使用最为广泛的图表控件。本文将从零开始逐步为你介绍Highcharts图表控件。通过本文,你将学会如何配置Highcharts以及动态生成Highchart图表。 ---- 目录 前言(Preface) 安装(Installation) 如何设置参数(How to set up the options) 预处理参数(Preprocess the options) 活动图(Live charts) ---- 一、前言(Preface) Highcharts是一个非常
刘皓
2018/04/03
3.2K0
微信小程序1
小程序组件化开发框架 https://tencent.github.io/wepy/
达达前端
2019/07/03
2.2K0
微信小程序1
为Highcharts 配置语法
实例中 id 为 container 的 div 用于包含 Highcharts 绘制的图表。
用户1685462
2021/09/04
5910
highcharts 极地图的应用
引入 highcharts import HighCharts from "highcharts";
tianyawhl
2020/10/23
1.8K0
Wpbullet:针对WordPress的静态代码分析工具
今天给大家介绍的是一款名叫Wpbullet的工具,广大安全研究人员可以使用这款工具来对WordPress、插件、主题以及其他PHP项目进行静态代码分析。
FB客服
2019/07/09
6530
Wpbullet:针对WordPress的静态代码分析工具
(译)针对 Kubernetes 工作负载的策略工具
本文所讲的策略,指的是在 Kubernetes 中,阻止特定工作负载进行部署的方法。
崔秀龙
2020/07/20
5590
Toast提示工具类
APP开发中我们常用的与用户交互的消息就是Toast 但是Android原生的Toast 比较繁琐, 我们来比较一下
晨曦_LLW
2020/09/25
6580
引入highcharts主题
如果把highcharts的主题放到自己的文件夹中方便修改,该怎么做呢? 新建一个主题的js文件 主题js的内容 import Highcharts from "highcharts/highchar
tianyawhl
2020/05/25
1.1K0
引入highcharts主题
zblog网站改造百度MIP的教程仅针对zblog轻奢主题
这篇文章来聊聊启用百度MIP轻奢主题之后你可能会遇到的一些问题,当然更有可能是你遇到了,而我却没有遇到,届时需要一起研究,这是后话。
李洋博客
2023/10/13
2500
zblog网站改造百度MIP的教程仅针对zblog轻奢主题
HighCharts 嵌套仪表盘
效果图 要点 使用多个DIV绘制不同表盘,并设置背景色透明以叠加 chart: { backgroundColor: 'rgba(0,0,0,0)' }, 源码 <!DOCTYPE html>
路过君
2020/11/12
1.4K0
HighCharts 嵌套仪表盘
highcharts 自适应div的宽度
如果窗口变化时,highcharts图表是自带自适应的,但是切换折叠菜单时,highchats图表并不自适应外层div的宽度。如何实现适应div的宽度?
tianyawhl
2020/07/14
3.1K0
Highcharts-2-配置项
参考信息来自官网,仅供学习使用:https://api.highcharts.com.cn/highcharts
皮大大
2021/03/01
2K0
Highcharts-2-配置项

相似问题

每个系列的Highcharts工具提示格式?

22

Highcharts隐藏系列并保留工具提示

01

Highcharts仅在链接的系列之间共享工具提示

10

Highcharts如何删除工具提示,系列数据之一

110

HighCharts:仅在系列重叠时使用共享工具提示

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文