- 浏览: 249312 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
/**
* 图像合成
*
* @time 下午06:21:22
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class ChosePictureCompositeActivity extends Activity implements OnClickListener {
public static final int PICKED_ONE = 0;
public static final int PICKED_TWO = 1;
private Button btn_choose_picture1;
private Button btn_choose_picture2;
private ImageView img_choose_picture;
private Bitmap bitmap1, bitmap2;
private Options bmpOptions;
private Canvas canvas;
private Paint paint;
private boolean onePicked = false;
private boolean twoPicked = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chose_picture_composite);
findView();
}
private void findView() {
btn_choose_picture1 = (Button) this.findViewById(R.id.btn_choose_picture_composite1);
btn_choose_picture1.setOnClickListener(this);
btn_choose_picture2 = (Button) this.findViewById(R.id.btn_choose_picture_composite2);
btn_choose_picture2.setOnClickListener(this);
img_choose_picture = (ImageView) this.findViewById(R.id.img_choose_picture_composite);
}
@Override
public void onClick(View v) {
int witch = -1;
if (v == btn_choose_picture1) {
witch = PICKED_ONE;
} else if (v == btn_choose_picture2) {
witch = PICKED_TWO;
}
Intent intent = new Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, witch);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Uri imageFileUri = data.getData();
if (requestCode == PICKED_ONE) {
bitmap1 = loadBitmap(imageFileUri);
onePicked = true;
} else if (requestCode == PICKED_TWO) {
bitmap2 = loadBitmap(imageFileUri);
twoPicked = true;
}
if (onePicked && twoPicked) {
Log.i("tag", "=====choose is over!");
Bitmap drawingBitmap = Bitmap.createBitmap(bitmap1.getWidth(), bitmap1.getHeight(), bitmap1.getConfig());
canvas = new Canvas(drawingBitmap);
paint = new Paint();
canvas.drawBitmap(bitmap1, 0, 0, paint);
// 图像重叠的绘制规则 PorterDuffXfermode
// 常量:
// SRC 只绘制原图像:
// DST 只绘制目标图像:
// 另外和四个规则,在一幅图像上放置另一幅图像,如何合成
// LIGHT: 获得每个位置上两幅图像中最亮的像素并显示
// DARKEN:最暗的像素并显示
// MULTIPLY:将第个位置的像素相乘,除以255,创建一个新像素显示
// SCREEN: 反转每个颜色,执行如(MULTIPLY)常量的操作
paint.setXfermode(new PorterDuffXfermode(Mode.SCREEN));
canvas.drawBitmap(bitmap2, 0, 0, paint);
img_choose_picture.setImageBitmap(drawingBitmap);
}
}
}
/**
* 加载位图图像
*/
private Bitmap loadBitmap(Uri imageFileUri) {
// 取得屏幕大小
Display display = getWindowManager().getDefaultDisplay();
int dw = display.getWidth();
int dh = display.getHeight();
// 期望是ARGB_4444
Bitmap bitmap = Bitmap.createBitmap((int) dw, (int) dh, Bitmap.Config.ARGB_4444);
try {
// 加载图像的尺寸而不是图像本身
bmpOptions = new BitmapFactory.Options();
// 如果为true,只须返回图像的范围,不须尝试解码图像本身
bmpOptions.inJustDecodeBounds = true;
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, bmpOptions);
int hRatio = (int) Math.ceil(bmpOptions.outHeight / (float) dh);
int wRatio = (int) Math.ceil(bmpOptions.outWidth / (float) dw);
Log.i("tag", "hRatio" + hRatio);
Log.i("tag", "wRatio" + wRatio);
// 如果两个比率都大于1
// 那么图像的一条边将大小屏幕
if (hRatio > 1 && wRatio > 1) {
if (hRatio > wRatio) {
Log.i("tag", "hRatio" + hRatio);
// 若高度比率更大,则根据它缩放
bmpOptions.inSampleSize = hRatio;
} else {
Log.i("tag", "wRatio" + wRatio);
// 反之则根据宽度缩放
bmpOptions.inSampleSize = wRatio;
}
}
// 对图像进行解码
bmpOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, bmpOptions);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return bitmap;
}
}
发表评论
-
android多媒体学习笔记一
2012-09-04 10:47 6961 使用内置的camera应用程序捕获图像 /*** ... -
android多媒体学习笔记二
2012-09-04 10:53 778实现SurfaceHolder.Callback ,P ... -
android多媒体部分学习笔记四___ Matrix
2012-09-05 11:40 688/*** 图像的缩放和旋转 Matrix** 1 0 0 x= ... -
android多媒体部分学习笔记五----audio
2012-09-08 16:08 681/*** 打开内置音乐播放器*/private void ge ... -
android多媒体部分学习笔记六----音频录制 mediaRecorder
2012-09-08 16:12 637/** * * 使用意图捕获音频 * * @time ... -
android多媒体部分学习笔记七------音频录制 mediaRecorder
2012-09-08 16:13 717/** * 自定义捕获音频 * * @time 下午12 ... -
android多媒体部分学习笔记八------音频录制 mediaRecorder
2012-09-08 16:14 732/** * 原始音频的播放和录制 * * audio ... -
android 多媒体部分学习笔记九----数字音频合成
2012-09-09 12:43 802/** * 数字音频合成 * * @time 下午12: ... -
android 多媒体部分学习笔记十 可视化频率(频谱)
2012-09-09 23:43 3180/** * 可视化频率 * * @time 下午12 ... -
android 多媒体部分学习笔记十--简单视频播放
2012-09-10 17:53 725/** * 简单播放 * * @time 下午05:15 ... -
android 多媒体部分学习笔记十二----mediaplay自定义播放器
2012-09-10 22:31 1605/** * * 自定义播放器 * * @time 下午 ... -
android 多媒体部分学习笔记十三----mediaStore 检索视频
2012-09-12 00:12 982/** * mediaStore检索视频 * * @ti ... -
android 多媒体部分学习十四---网络视频播放(http/rtsp)
2012-09-12 14:36 1813/** * 网络视频播放 * * openCore * ... -
android 多媒体部分学习笔记十五-----视频录制
2012-09-12 15:02 715/** * 调用系统视频录制 * * @time 下午0 ...
相关推荐
Android_学习笔记 Android_学习笔记 Android_学习笔记
黑马66期android学习笔记16_按钮点击事件
黑马66期android学习笔记19_线性布局的特性
Javascript学习笔记___自学实用,针对自学者。
21ic.com电子网分享单片机学习笔记ourdev_530143.pdf 。
接《网络技术学习笔记二__网际互联时代》,为了方便各工会(局域网)组队,有了专职的联络员
Android 开发学习笔记,学习android的好资料
php输出掌握的学习笔记__1.docx
接《网络技术学习笔记三__小秘加联络员的联系方式TCP+IP》,互联的局域网太多了,有大有小,怎么管理?
Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) Android学习笔记(四)Android 中Activity页面的跳转及传值 Android学习笔记(五)——Toast提示、Dialog对话框、Menu菜单 ...
MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_...
c28-assemble学习笔记_28335_c28系列dsp汇编语言学习笔记_Asm_源码.zip
Android_学习笔记
Android学习笔记 Android学习笔记 Android学习笔记
Android学习笔记
c语言 学习笔记part_1 吉林大学讲师
c28-assemble学习笔记_28335_c28系列dsp汇编语言学习笔记_Asm.zip
一个菜鸟的STM32寄存器学习笔记4_外部中断收集.pdf
QT_学习笔记widget_MainWindow和Dialog的选择使用