- 浏览: 934888 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
itzhongyuan:
java Random类详解 -
david_je:
你好,我看到你在C里面回调JAVA里面的方法是在native里 ...
Android NDK开发(1)----- Java与C互相调用实例详解 -
fykyx521:
请求锁是在 oncreate 释放实在ondestroy?? ...
Android如何保持程序一直运行 -
aduo_vip:
不错,总结得好!
Android读取assets目录下的资源 -
f839903061:
给的网址很给力哦!
Android 4.0.1 源码下载,编译和运行
http://www.myexception.cn/mobile/917390.html
1、PorterDuffXfermode
PorterDuff.Mode的十六种情况可以看APIDemos中的效果,唯一记录一下,做测试时候迷茫的地方
private void drawIntoBitmap(Bitmap bm) {
Canvas canvas = new Canvas(bm);
Paint paint = new Paint();
InputStream stream = null;
try {
stream = mContext.getAssets().open("icon.jpg");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(stream);
bitmap = RoundActivity.getRoundCornerBitmap(bitmap);//只是获取一个圆角的图片
stream = getResources().openRawResource(R.drawable.ic_launcher);
Bitmap src = BitmapFactory.decodeStream(stream);
canvas.drawBitmap(bitmap, 100, 100, paint);
canvas.drawBitmap(bitmap, 0, 0, paint);
//SRC_OVER与SRC模式相比,主要区别SRC_OVER是会有透明度影响。而DST的话,则是src区域不显示,不像SRC模式,只是src区域所占的地方,det区对应地方被覆盖
//Over 类型的MODE只有Config为ARGB,以及Alph8类型的位图才会有效果
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OVER));
//只有src占用的区间才会用到Xfermode模式进行运算,而不是整个Canvas区域生效。当然可以指定dst区域.或着如下边注释行的方法,设置了dirst区域。
// canvas.drawBitmap(src,new Rect(0, 0, src.getWidth(), src.getHeight()),new Rect(0, 0, 200 , 200),paint);
canvas.drawBitmap(src, 0, 0,paint);
paint.setARGB(0x80, 0x0, 0xff, 0x0);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
paint.setTextSize(60)
;// paint.setShader(mShader);
paint.setTextAlign(Paint.Align.CENTER);//如果是这个属性,则drawtext中的x,y坐标指的是文字所占区域的中心
Paint.FontMetrics fm = paint.getFontMetrics();
//如果是文字的话,XFermode设置后,只有文字的轨迹占用的地方才会生效
canvas.drawText("text", bm.getWidth()/2, (bm.getWidth()-fm.ascent)/2, paint);
}
如图
2、AvoidXfermode
private void drawInBitmapAvoid(Bitmap bm) {
Canvas canvas = new Canvas(bm);
Paint paint = new Paint();
canvas.drawBitmap(mBitmap, new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight()), new Rect(0, 0, bm.getWidth(), bm.getHeight()), paint);
paint.setARGB(0xff, 0xff, 0x00, 0x00);
//Mode.AVOID 模式下是给op-color不一样的地方才绘制
// 如果tolerance 即误差为0,或者说完全不一样,才会绘制
// 如果tolerance 即误差为255,或者说稍微不一样,就可以绘制
//这边有点拗口,看另外一个模式就明白了
paint.setXfermode(new AvoidXfermode(0xff505050, 0, AvoidXfermode.Mode.AVOID));;
canvas.drawCircle(0, 0, bm.getWidth()/2, paint);
paint.setXfermode(new AvoidXfermode(0xff505050, 255, AvoidXfermode.Mode.AVOID));;
canvas.drawCircle(bm.getWidth(), 0, bm.getWidth()/2, paint);
// 如果是Mode.TARGET模式,只给与op-color一样的像素点上绘制
//如果tolerance为0,即完全一样,才会给这个像素点绘制
//如果tolerance为255,即稍微一样一点,就会给这个像素点绘制
paint.setXfermode(new AvoidXfermode(0xff505050, 0, AvoidXfermode.Mode.TARGET));;
canvas.drawCircle(0, bm.getHeight(), bm.getWidth()/2, paint);
paint.setXfermode(new AvoidXfermode(0xff505050, 255, AvoidXfermode.Mode.TARGET));;
canvas.drawCircle(bm.getWidth(), bm.getHeight(), bm.getWidth()/2, paint);
}
如图
3、PixelXorXfermode
文档中说PixelXorXfermode implements a simple pixel xor (op ^ src ^ dst). 我自认为模块一和模块二效果会一样,但是实验结果不同。
这个类,我完全被他打败了。测试了一下午也没测出规律和原因来,如果有懂的,望不吝赐教
而且经常不同的是R值和B值互换,有时候又正常。真不知道哪里错了
private void drawInBitmapPixel(Bitmap bm) {
Canvas canvas = new Canvas(bm);
Paint paint = new Paint();
int dst = 0xff00ffff;
paint.setColor(dst);
Rect rect = new Rect(0, 0, bm.getWidth(), bm.getHeight()/2-8);
canvas.drawRect(rect, paint);
int src = 0xffffff00;
int opr = 0xffff0000;
//模块一
paint.setXfermode(new PixelXorXfermode(opr));
paint.setColor(src);
canvas.drawRect(rect, paint);
//模块二
paint.setXfermode(null);
int result = opr^src^dst;
/*//R和B 互换 0x ff ff ff ff
// 取B值
int b = result&0x000000ff;
//取R值
int r = result&0x00ff0000;
//移动到对应位置
b = b<<16;
r = r>>16;
//过滤RB值
result = result&0xff00ff00;
//放入RB值
result |= r;
result |= b;*/
paint.setColor(result);
rect = new Rect(0,bm.getHeight()/2+8,bm.getWidth(),bm.getHeight());
canvas.drawRect(rect, paint);
paint.setXfermode(null);
paint.setTextSize(15);
paint.setTextAlign(Align.CENTER);
canvas.drawText("^color="+Integer.toHexString(paint.getColor()), bm.getWidth()/2, (bm.getHeight()-paint.getFontMetrics().ascent)/2, paint);
}
1、PorterDuffXfermode
PorterDuff.Mode的十六种情况可以看APIDemos中的效果,唯一记录一下,做测试时候迷茫的地方
private void drawIntoBitmap(Bitmap bm) {
Canvas canvas = new Canvas(bm);
Paint paint = new Paint();
InputStream stream = null;
try {
stream = mContext.getAssets().open("icon.jpg");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(stream);
bitmap = RoundActivity.getRoundCornerBitmap(bitmap);//只是获取一个圆角的图片
stream = getResources().openRawResource(R.drawable.ic_launcher);
Bitmap src = BitmapFactory.decodeStream(stream);
canvas.drawBitmap(bitmap, 100, 100, paint);
canvas.drawBitmap(bitmap, 0, 0, paint);
//SRC_OVER与SRC模式相比,主要区别SRC_OVER是会有透明度影响。而DST的话,则是src区域不显示,不像SRC模式,只是src区域所占的地方,det区对应地方被覆盖
//Over 类型的MODE只有Config为ARGB,以及Alph8类型的位图才会有效果
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OVER));
//只有src占用的区间才会用到Xfermode模式进行运算,而不是整个Canvas区域生效。当然可以指定dst区域.或着如下边注释行的方法,设置了dirst区域。
// canvas.drawBitmap(src,new Rect(0, 0, src.getWidth(), src.getHeight()),new Rect(0, 0, 200 , 200),paint);
canvas.drawBitmap(src, 0, 0,paint);
paint.setARGB(0x80, 0x0, 0xff, 0x0);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
paint.setTextSize(60)
;// paint.setShader(mShader);
paint.setTextAlign(Paint.Align.CENTER);//如果是这个属性,则drawtext中的x,y坐标指的是文字所占区域的中心
Paint.FontMetrics fm = paint.getFontMetrics();
//如果是文字的话,XFermode设置后,只有文字的轨迹占用的地方才会生效
canvas.drawText("text", bm.getWidth()/2, (bm.getWidth()-fm.ascent)/2, paint);
}
如图
2、AvoidXfermode
private void drawInBitmapAvoid(Bitmap bm) {
Canvas canvas = new Canvas(bm);
Paint paint = new Paint();
canvas.drawBitmap(mBitmap, new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight()), new Rect(0, 0, bm.getWidth(), bm.getHeight()), paint);
paint.setARGB(0xff, 0xff, 0x00, 0x00);
//Mode.AVOID 模式下是给op-color不一样的地方才绘制
// 如果tolerance 即误差为0,或者说完全不一样,才会绘制
// 如果tolerance 即误差为255,或者说稍微不一样,就可以绘制
//这边有点拗口,看另外一个模式就明白了
paint.setXfermode(new AvoidXfermode(0xff505050, 0, AvoidXfermode.Mode.AVOID));;
canvas.drawCircle(0, 0, bm.getWidth()/2, paint);
paint.setXfermode(new AvoidXfermode(0xff505050, 255, AvoidXfermode.Mode.AVOID));;
canvas.drawCircle(bm.getWidth(), 0, bm.getWidth()/2, paint);
// 如果是Mode.TARGET模式,只给与op-color一样的像素点上绘制
//如果tolerance为0,即完全一样,才会给这个像素点绘制
//如果tolerance为255,即稍微一样一点,就会给这个像素点绘制
paint.setXfermode(new AvoidXfermode(0xff505050, 0, AvoidXfermode.Mode.TARGET));;
canvas.drawCircle(0, bm.getHeight(), bm.getWidth()/2, paint);
paint.setXfermode(new AvoidXfermode(0xff505050, 255, AvoidXfermode.Mode.TARGET));;
canvas.drawCircle(bm.getWidth(), bm.getHeight(), bm.getWidth()/2, paint);
}
如图
3、PixelXorXfermode
文档中说PixelXorXfermode implements a simple pixel xor (op ^ src ^ dst). 我自认为模块一和模块二效果会一样,但是实验结果不同。
这个类,我完全被他打败了。测试了一下午也没测出规律和原因来,如果有懂的,望不吝赐教
而且经常不同的是R值和B值互换,有时候又正常。真不知道哪里错了
private void drawInBitmapPixel(Bitmap bm) {
Canvas canvas = new Canvas(bm);
Paint paint = new Paint();
int dst = 0xff00ffff;
paint.setColor(dst);
Rect rect = new Rect(0, 0, bm.getWidth(), bm.getHeight()/2-8);
canvas.drawRect(rect, paint);
int src = 0xffffff00;
int opr = 0xffff0000;
//模块一
paint.setXfermode(new PixelXorXfermode(opr));
paint.setColor(src);
canvas.drawRect(rect, paint);
//模块二
paint.setXfermode(null);
int result = opr^src^dst;
/*//R和B 互换 0x ff ff ff ff
// 取B值
int b = result&0x000000ff;
//取R值
int r = result&0x00ff0000;
//移动到对应位置
b = b<<16;
r = r>>16;
//过滤RB值
result = result&0xff00ff00;
//放入RB值
result |= r;
result |= b;*/
paint.setColor(result);
rect = new Rect(0,bm.getHeight()/2+8,bm.getWidth(),bm.getHeight());
canvas.drawRect(rect, paint);
paint.setXfermode(null);
paint.setTextSize(15);
paint.setTextAlign(Align.CENTER);
canvas.drawText("^color="+Integer.toHexString(paint.getColor()), bm.getWidth()/2, (bm.getHeight()-paint.getFontMetrics().ascent)/2, paint);
}
发表评论
-
Android使用binder访问service的方式
2013-08-23 09:42 16531. 我们先来看一个与本地service通信的例子。 pub ... -
android-Service和Thread的区别
2013-08-23 09:17 923servie是系统的组件,它由系统进程托管(servicema ... -
git介绍
2013-08-01 14:49 1058git介绍 使用Git的第一件事就是设置你的名字和email ... -
cocos2d-x学习之自动内存管理和常见宏
2013-07-29 15:41 9151.自动内存管理 1)概述 C++语言默认是 ... -
cocos2dx中利用xcode 调用java中的函数
2013-07-29 11:36 25441. 先把cocos2dx根目录中的 /Users/zhaos ... -
cocos2dx(v2.x)与(v1.x)的一些常用函数区别讲解
2013-07-29 10:35 1117第一个改动: CCLayer初始化 自定义Layer,类名 ... -
xcode与eclipse整合cocos2dx
2013-07-29 10:32 1226文档xcode版本是 204 1. 在xcode中创建coc ... -
git提交代码
2013-07-23 16:00 10631. 在本地创建一个Git的工作空间,在里面创建一个工程(如H ... -
Android.mk的用法和基础
2013-07-19 14:11 4367一个Android.mk file用来向编译系统描述你的源代码 ... -
eclipse配置NDK-Builder命令
2013-07-18 11:02 10451. 2. -
eclipse配置javah命令
2013-07-18 10:48 20281.找到javah命令所在的目录 我的为 /usr/bi ... -
Android SDL2.0 编译
2013-07-17 13:40 19751,下载: wget http://www.libsdl.o ... -
IntelliJ Idea 常用快捷键列表
2013-05-27 10:19 0Alt+回车 导入包,自动修 ... -
android应用后台安装
2013-05-21 12:02 1040android应用后台安装,静默安装的代码实现方法 http ... -
编译linux内核映像
2013-05-21 11:33 972a)准备交叉编译工具链 android代码树中有一个pr ... -
如何单独编译Android源代码中的模块
2013-05-21 11:29 1001一. 首先在Android源代码 ... -
Ubuntu安装JDK6和JDK5
2013-05-19 19:04 1019sudo apt-get install sun-java6- ... -
java_jni详解_01
2013-05-08 17:15 964java中的jni 例子HelloWorld 准备过程: 1 ... -
下载android源码 中断解决原因
2013-05-07 15:51 1328解决方法 1. 浏览器登录https://android.go ... -
mac下编译ffmpeg1.1.4
2013-05-07 14:55 1370经过一番网上搜索 与 无数次的编译 终于成功了 下面献上编译 ...
相关推荐
利用谱表现方法,对地震动随机场进行模拟。其中相干函数采用经典H-V模型。
综上所述,这篇博客通过理论分析、Matlab仿真和实际数据处理,全面展示了多脉冲相干与非相干积累的概念、原理和应用。读者不仅可以从中理解这两种积累方式的差异,还能学习到如何使用Matlab进行信号处理,并了解实际...
通过对《甄嬛传》的音频信号进行SSB调制,最后用相干解调法进行解调。读取音频文件:通过audioread函数读取音频文件(m4a格式),获取消息信号 y 和采样率 Fs。时域波形绘制:画出消息信号的时域波形。消息信号频谱...
研究了部分相干圆偏振贝塞耳-高斯光束经高数值孔径透镜的聚焦特性。基于德拜矢量积分理论, 分别推导出了部分相干圆偏振涡旋光束经过高数值孔径透镜聚焦以后的光强和偏振度表达式。根据数值模拟的结果, 比较了左旋和...
本资源包含了与“车载毫米波雷达信号处理中的相干与非相干积累问题”相关的代码和数据,这些资料通常以Matlab语言编写,用于模拟和分析雷达信号的处理过程。 首先,我们要理解相干积累和非相干积累的概念。相干积累...
相干测风激光雷达中一个核心的问题是从微弱的气溶胶后向散射信号中估计出风速。基于零均值复高斯随机过程协方差矩阵统计模型的后向散射信号,首先讨论了最大似然(离散谱峰值(风速估计算法的克拉美一罗下界与由信息...
相干光调制技术是光纤通信领域中一种重要的技术。它在实现高速率数据传输以及提高通信网络带宽效率方面发挥着至关重要的作用。相干接收机是一种能够解析调制信号波形和数据的设备,它主要用于光纤通信系统中的接收端...
标题中的"FSK.rar"指的是一个关于FSK(Frequency Shift Keying,频率移键控)技术的压缩文件,其中包含了相干解调和非相干解调的实现。FSK是一种常用的数字调制技术,通过改变载波频率来表示二进制数据,即0或1。在...
涉及高通,低通,带通和方向滤波器,以及相干光处理。位相型滤波器主要功能是用于观察位相物体,观察透明生物切片,检查透明光学元件内部折射率是否均匀,或检查抛光表面的质量
在IT领域,尤其是在信号处理和数据分析中,"asympPDC-master_asympPDC-master_部分相干_相干分析_偏相干_偏定向相干matlab代"这一标题涉及到一系列重要的概念和技术。首先,我们来详细解析这些关键词并探讨相关的...
在IT领域,尤其是在信号处理和数据分析中,"相干分析"和"多小波分析"是两个重要的概念。这里,我们围绕这两个主题展开讨论,并结合提供的压缩包文件名,来解析其相关知识点。 首先,相干分析是一种研究两个或多个...
双站MIMO雷达相干角估计的Esprit-Like算法研究涉及到雷达信号处理、阵列信号处理、MIMO雷达系统以及角度估计技术等多个领域。本文将重点介绍双站MIMO雷达系统中角度估计的重要性、传统ESPRIT算法及其局限性,以及...
本次讨论的核心是利用MATLAB进行相干卷积信号处理,这是信号处理领域的一个重要概念,涉及到信号分析、滤波器设计、频谱分析等多个方面。以下是对给定代码片段中涉及的MATLAB函数与信号处理知识点的深入解析。 ### ...
阵列信号处理-ppt-廖桂生,西电教授讲义,第一章:绪论 第二章:数学基础 第三章:空域滤波原理及算法 第四章:部分自适应处理技术 第五章:阵列信号的高分辨处理 第六章:相干信源的高分辨处理 第七章:最大似然与...
实时单载波相干光通信和实时相干光正交频分复用(OFDM)通信在处理方法和处理顺序上有所不同。实时相干光OFDM通信在接收端的信号处理首先在时域上进行,时间同步后进行频偏估计,然后通过快速傅里叶变换(FFT)转换...