日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 图片长方形_android 相机只拍摄矩形区域图片

發布時間:2024/9/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 图片长方形_android 相机只拍摄矩形区域图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【實例簡介】

【實例截圖】

【核心代碼】

package org.yanzi.activity;

import org.yanzi.camera.CameraInterface;

import org.yanzi.camera.CameraInterface.CamOpenOverCallback;

import org.yanzi.camera.preview.CameraSurfaceView;

import org.yanzi.playcamera.R;

import org.yanzi.ui.MaskView;

import org.yanzi.util.DisplayUtil;

import android.app.Activity;

import android.graphics.Point;

import android.graphics.Rect;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.SurfaceHolder;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup.LayoutParams;

import android.widget.ImageButton;

public class CameraActivity extends Activity implements CamOpenOverCallback {

private static final String TAG = "YanZi";

CameraSurfaceView surfaceView = null;

ImageButton shutterBtn;

MaskView maskView = null;

float previewRate = -1f;

int DST_CENTER_RECT_WIDTH = 200; //單位是dip

int DST_CENTER_RECT_HEIGHT = 200;//單位是dip

Point rectPictureSize = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Thread openThread = new Thread(){

@Override

public void run() {

// TODO Auto-generated method stub

CameraInterface.getInstance().doOpenCamera(CameraActivity.this);

}

};

openThread.start();

setContentView(R.layout.activity_camera);

initUI();

initViewParams();

shutterBtn.setOnClickListener(new BtnListeners());

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.camera, menu);

return true;

}

private void initUI(){

surfaceView = (CameraSurfaceView)findViewById(R.id.camera_surfaceview);

shutterBtn = (ImageButton)findViewById(R.id.btn_shutter);

maskView = (MaskView)findViewById(R.id.view_mask);

}

private void initViewParams(){

LayoutParams params = surfaceView.getLayoutParams();

Point p = DisplayUtil.getScreenMetrics(this);

params.width = p.x;

params.height = p.y;

Log.i(TAG, "screen: w = " p.x " y = " p.y);

previewRate = DisplayUtil.getScreenRate(this); //默認全屏的比例預覽

surfaceView.setLayoutParams(params);

//手動設置拍照ImageButton的大小為120dip×120dip,原圖片大小是64×64

LayoutParams p2 = shutterBtn.getLayoutParams();

p2.width = DisplayUtil.dip2px(this, 80);

p2.height = DisplayUtil.dip2px(this, 80);;

shutterBtn.setLayoutParams(p2);

}

@Override

public void cameraHasOpened() {

// TODO Auto-generated method stub

SurfaceHolder holder = surfaceView.getSurfaceHolder();

CameraInterface.getInstance().doStartPreview(holder, previewRate);

if(maskView != null){

Rect screenCenterRect = createCenterScreenRect(DisplayUtil.dip2px(this, DST_CENTER_RECT_WIDTH)

,DisplayUtil.dip2px(this, DST_CENTER_RECT_HEIGHT));

maskView.setCenterRect(screenCenterRect);

}

}

private class BtnListeners implements OnClickListener{

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch(v.getId()){

case R.id.btn_shutter:

if(rectPictureSize == null){

rectPictureSize = createCenterPictureRect(DisplayUtil.dip2px(CameraActivity.this, DST_CENTER_RECT_WIDTH)

,DisplayUtil.dip2px(CameraActivity.this, DST_CENTER_RECT_HEIGHT));

}

CameraInterface.getInstance().doTakePicture(rectPictureSize.x, rectPictureSize.y);

break;

default:break;

}

}

}

/**生成拍照后圖片的中間矩形的寬度和高度

* @param w 屏幕上的矩形寬度,單位px

* @param h 屏幕上的矩形高度,單位px

* @return

*/

private Point createCenterPictureRect(int w, int h){

int wScreen = DisplayUtil.getScreenMetrics(this).x;

int hScreen = DisplayUtil.getScreenMetrics(this).y;

int wSavePicture = CameraInterface.getInstance().doGetPrictureSize().y; //因為圖片旋轉了,所以此處寬高換位

int hSavePicture = CameraInterface.getInstance().doGetPrictureSize().x; //因為圖片旋轉了,所以此處寬高換位

float wRate = (float)(wSavePicture) / (float)(wScreen);

float hRate = (float)(hSavePicture) / (float)(hScreen);

float rate = (wRate <= hRate) ? wRate : hRate;//也可以按照最小比率計算

int wRectPicture = (int)( w * wRate);

int hRectPicture = (int)( h * hRate);

return new Point(wRectPicture, hRectPicture);

}

/**

* 生成屏幕中間的矩形

* @param w 目標矩形的寬度,單位px

* @param h目標矩形的高度,單位px

* @return

*/

private Rect createCenterScreenRect(int w, int h){

int x1 = DisplayUtil.getScreenMetrics(this).x / 2 - w / 2;

int y1 = DisplayUtil.getScreenMetrics(this).y / 2 - h / 2;

int x2 = x1 w;

int y2 = y1 h;

return new Rect(x1, y1, x2, y2);

}

}

總結

以上是生活随笔為你收集整理的android 图片长方形_android 相机只拍摄矩形区域图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。