android相机开发之仿米格宝宝日志的相机

功能说明:  因为项目中需要用到多次拍照并保存的功能,模仿了米格宝宝的相机。

效果图:

 

图在手机上打开是有画面出来,不是截图上的黑屏的。真机测试就可以了。

 

这个是拍照后的查看图片的。

源码如下:

              

package com.wjh.camera;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.R.integer;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.KeyEvent;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;

/**
 * 
 * 相机
 *
 */
public class TakePhotoActivity extends Activity implements Callback, OnClickListener, AutoFocusCallback{
	SurfaceView mySurfaceView;//surfaceView声明  
    SurfaceHolder holder;//surfaceHolder声明  
    Camera myCamera;//相机声明  
    String filePath="/sdcard/";//照片保存路径  
    boolean isClicked = false;//是否点击标识  
    ImageView takeCameraBtn,takephoto_text;
    RelativeLayout re_take_btn,save_btn; //确定
    public static boolean saveFlag = false;// 用于判断是否保存图片的标志
    byte[] imgdata =null;
    public static int imgsize = 0;
    //创建jpeg图片回调数据对象  
    PictureCallback jpeg = new PictureCallback() {  
          
        @Override  
        public void onPictureTaken(byte[] data, Camera camera) {  
            imgdata = data;
           /* try  
            {// 获得图片  
            Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);  
            File file = new File(filePath+"id_"+"1"+".jpg");  
            BufferedOutputStream bos =  
                new BufferedOutputStream(new FileOutputStream(file));  
            bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);//将图片压缩到流中  
            bos.flush();//输出  
            bos.close();//关闭  
            }catch(Exception e)  
            {  
                e.printStackTrace();  
            } */ 
              
        }  
    };  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	requestWindowFeature(Window.FEATURE_NO_TITLE);//无标题             
        //设置拍摄方向  
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  
        setContentView(R.layout.take_photo);  
        takeCameraBtn = (ImageView)this.findViewById(R.id.photo_icon); //拍照
        takephoto_text = (ImageView)this.findViewById(R.id.takephoto_text);//照片预览
        takeCameraBtn.setOnClickListener(this);
        re_take_btn = (RelativeLayout)this.findViewById(R.id.re_take_btn);//取消
        save_btn = (RelativeLayout)this.findViewById(R.id.save_btn); //保存
        re_take_btn.setOnClickListener(this);
        save_btn.setOnClickListener(this);
        //获得控件  
        mySurfaceView = (SurfaceView)findViewById(R.id.surfaceView1);  
        //获得句柄  
        holder = mySurfaceView.getHolder();  
        //添加回调  
        holder.addCallback(this);  
        //设置类型  
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
        //设置监听  
        mySurfaceView.setOnClickListener(this); 
        
    }

	@Override
	public void onAutoFocus(boolean success, Camera camera) {
		if(success)  
        {  
            //设置参数,并拍照  
            Camera.Parameters params = myCamera.getParameters();  
            params.setPictureFormat(PixelFormat.JPEG);  
            params.setPreviewSize(640,480);  
            myCamera.setParameters(params);  
            myCamera.takePicture(null, null, jpeg);
            takeCameraBtn.setVisibility(View.INVISIBLE);
			 takephoto_text.setVisibility(View.VISIBLE);
			 re_take_btn.setVisibility(View.VISIBLE);
			 save_btn.setVisibility(View.VISIBLE);
        }  
		
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.photo_icon: //拍照
			 myCamera.autoFocus(this);//自动对焦
			
			break;
        case R.id.re_take_btn://取消
        	saveFlag = false;
        	 myCamera.startPreview();//开启预览  
        	 takeCameraBtn.setVisibility(View.VISIBLE);
			 takephoto_text.setVisibility(View.INVISIBLE);
			 re_take_btn.setVisibility(View.INVISIBLE);
			 save_btn.setVisibility(View.INVISIBLE);
        	break;
        case R.id.save_btn://保存
        	saveFlag = true;
        	savephoto();
        	 myCamera.startPreview();//开启预览  
        	 takeCameraBtn.setVisibility(View.VISIBLE);
			 takephoto_text.setVisibility(View.INVISIBLE);
			 re_take_btn.setVisibility(View.INVISIBLE);
			 save_btn.setVisibility(View.INVISIBLE);
		default:
			break;
		}
		
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		 //设置参数并开始预览  
        Camera.Parameters params = myCamera.getParameters();  
        params.setPictureFormat(PixelFormat.JPEG);  
        params.setPreviewSize(640,480);  
        myCamera.setParameters(params);  
        myCamera.startPreview(); 
		
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		 //开启相机  
        if(myCamera == null)  
        {  
            myCamera = Camera.open();  
            try {  
                myCamera.setPreviewDisplay(holder);  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
		
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		 //关闭预览并释放资源  
        myCamera.stopPreview();  
        myCamera.release();  
        myCamera = null;  
		
	}
	

	public void savephoto(){
		if(saveFlag){
			if(imgdata!=null){
				++imgsize;
				 try  
		            {// 获得图片  
		            Bitmap bm = BitmapFactory.decodeByteArray(imgdata, 0, imgdata.length);  
		            File file = new File(filePath+"id_"+imgsize+".jpg");  
		            BufferedOutputStream bos =  
		                new BufferedOutputStream(new FileOutputStream(file));  
		            bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);//将图片压缩到流中  
		            bos.flush();//输出  
		            bos.close();//关闭  
		            }catch(Exception e)  
		            {  
		                e.printStackTrace();  
		            }
			}
		}else {
			imgdata = null;
		}
	}

	//按返回键时,显示弹出框
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {  
		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {  
			Intent intent = new Intent(TakePhotoActivity.this,AsyncLoadedImageActivity.class);
			startActivity(intent);
			finish();
			return true; 
		} 
		return false;
	}

	
}

 

  take_photo.xml

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout android:id="@+id/surface_view_wrapper" android:layout_width="fill_parent" android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent">
        <SurfaceView android:id="@+id/surfaceView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" />
        <ImageView android:id="@+id/focus_rectangle" android:background="@null" android:layout_width="200.0dip" android:layout_height="200.0dip" android:layout_centerInParent="true" /> 
    </RelativeLayout>
    <RelativeLayout android:id="@+id/flash_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10.0dip" android:layout_marginBottom="10.0dip" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true">
        <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/takephoto_tab1" android:layout_centerInParent="true" />
        <ImageView android:id="@+id/flash_icon" android:layout_width="21.0dip" android:layout_height="21.0dip" android:src="@drawable/ic_viewfinder_flash_off" android:layout_centerInParent="true" />
    </RelativeLayout>
    <RelativeLayout android:id="@+id/foot_menu" android:background="@drawable/takephoto_bar_hor" android:layout_width="60.0dip" android:layout_height="fill_parent" android:layout_alignParentRight="true">
        <RelativeLayout android:id="@+id/take_btn" android:background="@drawable/takephoto_1_bg_hor" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="5.0dip" android:layout_alignBottom="@id/surfaceView1" android:layout_alignParentRight="true" android:layout_centerInParent="true">
            <ImageView android:layout_gravity="center" android:id="@+id/photo_icon" android:src="@drawable/takephoto_1_camera" android:layout_centerInParent="true" style="@style/photo_foot_menu_image_button_port" />
        </RelativeLayout>
        <ImageView android:layout_gravity="center" android:id="@+id/takephoto_text" android:paddingLeft="8.0dip" android:visibility="invisible" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/takephoto_2_txt" android:layout_centerInParent="true" />
        <RelativeLayout android:id="@+id/re_take_btn" android:visibility="invisible" android:layout_width="wrap_content" android:layout_marginBottom="10.0dip" android:layout_alignParentBottom="true" style="@style/photo_foot_menu_image_button_wrapper">
            <ImageView android:src="@drawable/icon_takephoto_cancel" style="@style/photo_foot_menu_image_button_port" />
        </RelativeLayout>
        <RelativeLayout android:id="@+id/save_btn" android:visibility="invisible" android:layout_marginTop="5.0dip" style="@style/photo_foot_menu_image_button_wrapper">
            <ImageView android:id="@+id/save_photo_icon" android:src="@drawable/icon_takephoto_save" style="@style/photo_foot_menu_image_button_port" />
        </RelativeLayout>
    </RelativeLayout>
</RelativeLayout>

 

 源码下载

转载于:https://www.cnblogs.com/andgoo/archive/2012/08/08/2628579.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将5米格网DEM转换为2米格网DEM的流程如下: 1. 数据准备:首先需要获取5米格网DEM数据。可以从相关机构或地理信息系统中下载或获取此类数据。 2. 数据预处理:对原始5米格网DEM数据进行预处理以准备转换。这可能涉及数据格式的转换和数据的裁剪。 3. 降采样:使用一种合适的插值方法对5米格网DEM数据进行降采样。插值方法可以根据周围点的高程值来估计新格点的高程值。常见的插值方法包括双线性插值和反距离权重插值。 4. 高程调整:由于5米格网DEM数据中包含高程误差,可能需要进行高程调整。可以使用其他可靠的高程来源(如GPS测量)对降采样后的DEM数据进行校正。 5. 数据平滑:为了使2米格网DEM数据更加平滑,可以使用滤波或平滑算法对数据进行处理。这样可以减小高程间的突变,使数据更加连续和一致。 6. 数据转换:将经过降采样、高程调整和平滑处理的5米格网DEM数据转换为2米格网DEM数据。这可以通过对每个2米格点的邻近5米格点进行高程插值来实现。 7. 数据验证:转换完成后,需要对新生成的2米格网DEM数据进行验证,确保其质量和准确性。可以进行与其他高程数据的对比或与现场实测数据的对比来评估结果。 8. 结果保存:最后,将转换后的2米格网DEM数据保存为适当的格式,以便在需要时进行使用和分析。 以上是将5米格网DEM转换为2米格网DEM的主要流程。根据实际情况,还可能需要进行其他处理和步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值