有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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()) {

        }
    }
}

字体:Take a photo automatically without user interaction


共 (0) 个答案