200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > android自定义camera预览区域 android camera摄像surfaceview预览界面特定区域(该区域可移动)...

android自定义camera预览区域 android camera摄像surfaceview预览界面特定区域(该区域可移动)...

时间:2023-08-27 00:20:40

相关推荐

android自定义camera预览区域 android camera摄像surfaceview预览界面特定区域(该区域可移动)...

1.自定义一个imageview用来设定surfaceview上的特定区域。

public class DrawImageView extends ImageView {

private Paint paint;

private int mFristPointX = 100, mFristPointY = 200;

private int mSecondPointX = 400, mSecondPointY = 500;

private boolean isFirstDown = true;

private int mOldX = 0, mOldY = 0;

public DrawImageView(Context context) {

super(context);

// TODO Auto-generated constructor stub

init();

}

public DrawImageView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

init();

}

private void init() {

paint = new Paint();

paint.setAntiAlias(true);

paint.setColor(Color.RED);

paint.setStyle(Style.STROKE);

paint.setStrokeWidth(2.5f);

paint.setAlpha(100);

}

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

canvas.drawRect(new Rect(getmFristPointX(), getmFristPointY(), getmSecondPointX(), getmSecondPointY()), paint);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

if (event.getAction() != MotionEvent.ACTION_UP) {

int x = (int) event.getX();

int y = (int) event.getY();

Rect mRect = new Rect(getmFristPointX(), getmFristPointY(), getmSecondPointX(), getmSecondPointY());

if (mRect.contains(x, y)) {

if (isFirstDown) {

mOldX = x;

mOldY = y;

isFirstDown = false;

} else {

int mXDis = x - mOldX;

int mYDis = y - mOldY;

mOldX = x;

mOldY = y;

ReSetVaue(mXDis, mYDis);

}

}

} else {

isFirstDown = true;

}

return true;

}

public void setValue(int x, int y) {

setmFristPointX(x - 50);

setmFristPointY(y - 50);

setmSecondPointX(x + 50);

setmSecondPointY(y + 50);

invalidate();

}

public void ReSetVaue(int xDis, int yDis) {

setmFristPointX(getmFristPointX() + xDis);

setmFristPointY(getmFristPointY() + yDis);

setmSecondPointX(getmFristPointX() + 100);

setmSecondPointY(getmFristPointY() + 100);

invalidate();

}

public int getmFristPointX() {

return mFristPointX;

}

public void setmFristPointX(int mFristPointX) {

this.mFristPointX = mFristPointX;

}

public int getmFristPointY() {

return mFristPointY;

}

public void setmFristPointY(int mFristPointY) {

this.mFristPointY = mFristPointY;

}

public int getmSecondPointX() {

return mSecondPointX;

}

public void setmSecondPointX(int mSecondPointX) {

this.mSecondPointX = mSecondPointX;

}

public int getmSecondPointY() {

return mSecondPointY;

}

public void setmSecondPointY(int mSeconPointY) {

this.mSecondPointY = mSeconPointY;

}

}

2.定义xml布局。

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1" >

android:id="@+id/open_camera"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_marginLeft="30dp"

android:layout_marginRight="30dp"

android:layout_marginTop="15dp" />

android:id="@+id/draw_rect"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_marginLeft="30dp"

android:layout_marginRight="30dp"

android:layout_marginTop="15dp" />

3.在surfaceChanged中设置参数开始画区域:

DrawImageView.onDraw(new Canvas());

DrawImageView.setValue(mFirstPointX, mFirstPointY);//左上角点的值

4.在camera拍照部分进行压缩裁剪。

private Bitmap mBitmap;

private Camera.PictureCallback takePictureCallback = new Camera.PictureCallback() {

@Override

public void onPictureTaken(byte[] data, Camera camera) {

// TODO Auto-generated method stub

if (data != null) {

mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

camera.stopPreview();

}

Matrix matrix = new Matrix();

matrix.setRotate(90);

Bitmap rotaBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, false);

getSurfaceSize();

Bitmap sizeBitmap = Bitmap.createScaledBitmap(rotaBitmap, SurView_Width, SurView_Height, true);

SaveBitmap(sizeBitmap);

mFirstPointX = mDrawImageView.getmFristPointX() + 50;

mFirstPointY = mDrawImageView.getmFristPointY() + 50;

Bitmap newBitmap = Bitmap.createBitmap(sizeBitmap, mFirstPointX - 50, mFirstPointY - 50, 100, 100);

if (newBitmap != null) {

mTestImageView.setImageBitmap(newBitmap);

}

camera.startPreview();

}

};

private void getSurfaceSize(){

SurView_Width = mSurfaceView.getWidth();

SurView_Height = mSurfaceView.getHeight();

}

private void SaveBitmap(Bitmap bitmap) {

File mpicture = new File(mPath + File.separator + "pic.jpg");

try {

mpicture.createNewFile();

BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(mpicture));

press(CompressFormat.JPEG, 75, outputStream);

outputStream.flush();

outputStream.close();

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

参考文献: /yanzi1225627/article/details/8580034

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。