您的位置:首页 > 运维架构

基于opencv的相机之图片处理首页效果(六)

2015-11-11 19:39 507 查看


简介

  通过之前,已经有了预览拍照,以及对应图片显示的基本图库。接下来实现对图库中选中的图片,进行进一步的图像处理。
本篇是实现图像处理的总体界面实现。


具体实现


效果演示

  对应的效果截图如下:



代码讲解

  1、从上面的效果图上可以看到,最上面也是两个选项,取消和保存。点击取消,就会清楚掉该图片本轮对图片的相关处理,并返回到图库界面。点击保存,就会将本轮被修改处理过的图片另存为,并返回图库界面。

picDoVariable.mypicBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new AlertDialog.Builder(PicDoing.this).setMessage("确认放弃修改?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(PicDoing.this, mapstorageActivity.class);
startActivity(intent);
finish();
}})
.setNegativeButton("取消",null)
.show();
}
});

picDoVariable.mypicSave.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String tmp, PicPath;
long time =System.currentTimeMillis();
tmp = picDoVariable.picDoFunction.getCurrentTime(time);
PicPath = picDoVariable.doPicSavepath + tmp + ".jpg";
Imgcodecs.imwrite(PicPath, picDoVariable.myPicDoMat);
Intent intent = new Intent(PicDoing.this, mapstorageActivity.class);
startActivity(intent);
finish();
}
});

2、中间区域则显示的图片传过来,即需要被处理的图片,该图片被传入到本界面之后,首先会被复制到一个新图片临时文件,后续的操作都是在这个临时文件中处理,如果点击取消,就放弃掉这个临时文件,点击保存就将该临时文件保存到图像目录中去。

if(picDoVariable.doPicEdit == -1){
picDoVariable.myPicDoMat = Imgcodecs.imread(picDoVariable.DoPicNames[picDoVariable.curDoPicNumber], 1);
Imgcodecs.imwrite(picDoVariable.tmpMatName, picDoVariable.myPicDoMat);

}else{
picDoVariable.myPicDoMat = Imgcodecs.imread(picDoVariable.tmpMatName, 1);
}

3、最底下就是进行图像处理的相关选项:

public String[] firstPicMenu = { "调整", "特效", "马赛克", "拼图", "鬼怪贴图", "图像修补", "加密解密"};

picDoVariable.mypicModeGestureDetector = new GestureDetector(new gestureListener());
private class gestureListener implements GestureDetector.OnGestureListener{
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int i;
if(e1.getX() - e2.getX() > picDoVariable.picModeFilpDistance){
if(picDoVariable.modeOffsetNumber < picDoVariable.modeNumber - 6){
picDoVariable.modeOffsetNumber += 1;
}
for(i=0; i<6; i++){
picDoVariable.mypicDoImageButton_1_1[i].setImageResource(picDoVariable.firstPicMenuPicture[(i+picDoVariable.modeOffsetNumber)*2]);
picDoVariable.mypicDoTextView_1[i].setText(picDoVariable.firstPicMenu[(i + picDoVariable.modeOffsetNumber)]);
}
}
if(e2.getX() - e1.getX() > picDoVariable.picModeFilpDistance){
if(picDoVariable.modeOffsetNumber > 0){
picDoVariable.modeOffsetNumber -= 1;
}
for(i=0; i<6; i++){
picDoVariable.mypicDoImageButton_1_1[i].setImageResource(picDoVariable.firstPicMenuPicture[(i+picDoVariable.modeOffsetNumber)*2]);
picDoVariable.mypicDoTextView_1[i].setText(picDoVariable.firstPicMenu[(i + picDoVariable.modeOffsetNumber)]);
}
}
return true;
}
}
public class ButtonListener implements OnClickListener, OnTouchListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
int i;

i = arg0.getId();
i = i + picDoVariable.modeOffsetNumber;

if(i == 0){
............
}else if(i == 1){
............
}
..............
}
}


[/code]
从截图中可以看到,界面中同时只显示6个操作选项。具体操作中,根据代码中的GestureDetector,在使用中左右滑动时候,显示的操作选项会对应更新,点击功能选项之后,就会进入到对应的功能操作界面中去。

具体演示下载:http://download.csdn.net/detail/u011630458/9261617
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: