java捕获图像并通过socket发送
我需要帮助,我没有安卓系统的经验,我需要创建一个应用程序来捕获图像并通过socket将它们发送到我的计算机。 但我不知道怎么做
基本上,该应用程序必须在没有用户交互的情况下以一定的间隔拍摄图像,然后将图像发送到计算机,其他程序将在那里接收图像。 就像一个网络摄像头
有人能帮我吗? 如何做到这一点
我追求了一些东西,但我不确定安卓上的代码结构是如何工作的,所以我不知道我是否可以使用这样的东西:
package com.example.dino;
import 安卓.Manifest;
import 安卓.content.ContentValues;
import 安卓.content.pm.PackageManager;
import 安卓.net.Uri;
import 安卓.provider.MediaStore;
import 安卓.support.v4.app.ActivityCompat;
import 安卓.support.v4.content.ContextCompat;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.view.SurfaceHolder;
import 安卓.view.View;
import 安卓.widget.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.io.IOException;
import 安卓.os.Bundle;
import 安卓.os.Handler;
import 安卓.os.Message;
import 安卓.app.Activity;
import 安卓.content.pm.PackageManager;
import 安卓.graphics.Bitmap;
import 安卓.graphics.BitmapFactory;
import 安卓.hardware.Camera;
import 安卓.hardware.Camera.CameraInfo;
import 安卓.util.Log;
import 安卓.view.SurfaceView;
import 安卓.widget.ImageView;
import 安卓.widget.Toast;
public class MainActivity extends AppCompatActivity {
ImageView photo;
Button button;
Socket socketClient;
private SurfaceView sv;
private Camera mCamera;
private Camera.Parameters parameters;
Bitmap bmp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
photo.findViewById(R.id.imageView);
button.findViewById(R.id.connectButton);
int index = getFrontCameraId();
if (index == -1){
Toast.makeText(getApplicationContext(), "No front camera", Toast.LENGTH_LONG).show();
}
else
{
iv_image = (ImageView) findViewById(R.id.imageView);
sv = (SurfaceView) findViewById(R.id.surfaceView);
sHolder = sv.getHolder();
//sHolder.addCallback(this);
sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this, new String[]{
Manifest.permission.CAMERA
},100);
}
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
socketClient = new Socket("192.168.2.196",8314);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
ImageView iv_image;
SurfaceHolder sHolder;
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
{
parameters = mCamera.getParameters();
mCamera.setParameters(parameters);
mCamera.startPreview();
Camera.PictureCallback mCall = new Camera.PictureCallback()
{
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
Uri uriTarget = getContentResolver().insert//(Media.EXTERNAL_CONTENT_URI, image);
(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new ContentValues());
OutputStream imageFileOS;
try {
imageFileOS = getContentResolver().openOutputStream(uriTarget);
imageFileOS.write(data);
imageFileOS.flush();
imageFileOS.close();
//Toast.makeText(TakePictureActivity.this,
// "Image saved: " + uriTarget.toString(), Toast.LENGTH_LONG).show();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
//mCamera.startPreview();
bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
iv_image.setImageBitmap(bmp);
}
};
mCamera.takePicture(null, null, mCall);
}
int getFrontCameraId() {
CameraInfo ci = new CameraInfo();
for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, ci);
if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i;
}
return -1; // No front-facing camera found
}
public void surfaceCreated(SurfaceHolder holder)
{
int index = getFrontCameraId();
if (index == -1){
Toast.makeText(getApplicationContext(), "No front camera", Toast.LENGTH_LONG).show();
}
else
{
mCamera = Camera.open(index);
Toast.makeText(getApplicationContext(), "With front camera", Toast.LENGTH_LONG).show();
}
mCamera = Camera.open(index);
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
public void surfaceDestroyed(SurfaceHolder holder)
{
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
public void run() {
while(socketClient.isConnected()) {
}
}
}
共 (0) 个答案