2022-01-30 Android App java 读取raw图像数据然后显示

一、main/assets路径下有raw图像文件,是一些图片的数据,这些是指纹图像。

二、现在我们需要读取出raw数据然后显示出来。

三、核心源码

1、

2、src\main\java\com\wfh\canvasdemo\DataUtil.java

package com.wfh.canvasdemo;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.content.Context;

public class DataUtil {
	private byte[] image;
	public static String strarry1[] = { "01_00_00.raw", "01_00_01.raw",
			"01_00_02.raw", "01_00_03.raw", "01_00_04.raw", "01_00_05.raw",
			"01_00_06.raw", "01_00_07.raw", "01_00_08.raw", "01_00_09.raw",
			"01_00_10.raw", "01_00_11.raw", "01_00_12.raw", "01_00_13.raw",
			"01_00_14.raw", "01_00_15.raw", "01_00_16.raw", "01_00_17.raw",
			"01_00_18.raw", "01_00_19.raw", "01_00_20.raw", "01_00_21.raw",
			"01_00_22.raw", "01_00_23.raw", "01_00_24.raw", "01_00_25.raw",
			"01_00_26.raw", "01_00_27.raw", "01_00_28.raw", "01_00_29.raw",
			"01_00_30.raw", "01_00_31.raw", "01_00_32.raw", "01_00_33.raw" };
	public static String strarry2[] = { "02_00_00.raw", "02_00_01.raw",
			"02_00_02.raw", "02_00_03.raw" };

	/**
	 * @param �������ֽ�����
	 * @param inStream
	 * @return byte[]
	 * @throws Exception
	 */
	private byte[] readStream(InputStream inStream) throws Exception {
		//byte[] buffer = new byte[15600];
		byte[] buffer = new byte[35600];
		int len = -1;
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		while ((len = inStream.read(buffer)) != -1) {
			outStream.write(buffer, 0, len);
		}
		byte[] data = outStream.toByteArray();
		outStream.close();
		inStream.close();
		return data;
	}

	public  byte[] setRawData(Context context, String fileName)
			throws Exception {
		try {
			image = null;
			InputStream inputStream = context.getResources().getAssets()
					.open(fileName);
			image = readStream(inputStream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return image;
	}
}

 2、src\main\java\com\wfh\canvasdemo\MainActivity.java

package com.wfh.canvasdemo;

import java.io.File;
import java.io.FileOutputStream;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import static java.lang.Long.toHexString;

public class MainActivity extends Activity implements View.OnTouchListener{
    private Button btn_save, btn_resume;
    private ImageView iv_canvas;
    private Bitmap baseBitmap;
    private Canvas canvas;
    private Paint paint;
    // 定义手指开始触摸的坐标
    float startX;
    float startY;
    //int[] data= new int[25600];
    byte[] image = null;
    private DataUtil mDataUtil;
    String[] flies = null;


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            // 用户按下动作
            case MotionEvent.ACTION_DOWN:
                int x,y;
                // 第一次绘图初始化内存图片,指定背景为白色
                if (baseBitmap == null) {
                    baseBitmap = Bitmap.createBitmap(iv_canvas.getWidth(),
                            iv_canvas.getHeight(), Bitmap.Config.ARGB_8888);
                    canvas = new Canvas(baseBitmap);
                    canvas.drawColor(Color.YELLOW);
                }
                // 记录开始触摸的点的坐标
                startX = event.getX();
                startY = event.getY();
                String str="#000000";
                x=0;
                int m;
                try {
                    image = mDataUtil.setRawData(MainActivity.this, "1"
                            + "/" + "01_00_00.raw");
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (image == null) {
                    Toast.makeText(MainActivity.this, "Failed to read image", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    Toast.makeText(MainActivity.this, "success to read image",  Toast.LENGTH_SHORT).show();
                    for(y=0;y<160;y++)
                    {
                        for (x = 0; x < 160; x++) {

                            m=(int)image[159-x+y*160]&0xff;
                            if(m<0x10)
                                str = "#" +"0"+toHexString(m) +"0"+ toHexString(m)+"0" + toHexString(m);
                            else
                                str = "#" + toHexString(m) + toHexString(m) + toHexString(m);

                            paint.setColor(Color.parseColor(str));
                            canvas.drawPoint(startX + 3*x, startY+3*y, paint);

                        }
                    }
                }
                iv_canvas.setImageBitmap(baseBitmap);
                break;
            // 用户手指在屏幕上移动的动作
            case MotionEvent.ACTION_MOVE:


                break;
            case MotionEvent.ACTION_UP:

                break;
            default:
                break;
        }
        return true;
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化一个画笔,笔触宽度为5,颜色为红色
        paint = new Paint();
      //  paint.setStrokeWidth(20);
        paint.setStrokeWidth(3);
        paint.setColor(Color.RED);

        iv_canvas = (ImageView) findViewById(R.id.iv_canvas);
        btn_save = (Button) findViewById(R.id.btn_save);
        btn_resume = (Button) findViewById(R.id.btn_resume);

        btn_save.setOnClickListener(click);
        btn_resume.setOnClickListener(click);
       // iv_canvas.setOnTouchListener(touch);
        iv_canvas.setOnTouchListener(this);
        mDataUtil = new DataUtil();
    }

    private View.OnClickListener click = new OnClickListener() {

        @Override
        public void onClick(View v) {

            switch (v.getId()) {
                case R.id.btn_save:
                    saveBitmap();
                    break;
                case R.id.btn_resume:
                    resumeCanvas();
                    break;
                default:
                    break;
            }
        }
    };

    /**
     * 保存图片到SD卡上
     */
    protected void saveBitmap() {
        try {
            // 保存图片到SD卡上
            File file = new File(Environment.getExternalStorageDirectory(),
                    System.currentTimeMillis() + ".png");
            FileOutputStream stream = new FileOutputStream(file);
            baseBitmap.compress(CompressFormat.PNG, 100, stream);
            Toast.makeText(MainActivity.this, "保存图片成功", Toast.LENGTH_SHORT).show();

            // Android设备Gallery应用只会在启动的时候扫描系统文件夹
            // 这里模拟一个媒体装载的广播,用于使保存的图片可以在Gallery中查看
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
            intent.setData(Uri.fromFile(Environment
                    .getExternalStorageDirectory()));
            sendBroadcast(intent);
        } catch (Exception e) {
            Toast.makeText(MainActivity.this, "保存图片失败", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }

    /**
     * 清除画板
     */
    protected void resumeCanvas() {
        // 手动清除画板的绘图,重新创建一个画板
        if (baseBitmap != null) {
            baseBitmap = Bitmap.createBitmap(iv_canvas.getWidth(),
                    iv_canvas.getHeight(), Bitmap.Config.ARGB_8888);
            canvas = new Canvas(baseBitmap);
            canvas.drawColor(Color.YELLOW);
            iv_canvas.setImageBitmap(baseBitmap);
            Toast.makeText(MainActivity.this, "清除画板成功,可以重新开始绘图", Toast.LENGTH_LONG).show();
        }
    }
 }

四、运行测试效果图

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用usb-serial-for-android编写一个完整的安卓项目来读取和发送数据,您需要遵循以下步骤: 1. 首先,您需要在您的项目中添加usb-serial-for-android库。您可以将其作为模块导入项目中,或者将其作为Gradle依赖项添加到build.gradle文件中。 2. 接下来,您需要在AndroidManifest.xml文件中添加一些权限和特性。这些权限和特性将使您的应用程序能够访问USB设备并进行通信。以下是一个示例: ```xml <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.USB_PERMISSION" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 3. 然后,您需要创建一个UsbSerialPort对象,并使用它来读取和写入数据。以下是一个示例: ```java private UsbSerialPort port; ... // 获取USB设备和端口 UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); UsbDevice device = ...; // 获取USB设备 UsbDeviceConnection connection = manager.openDevice(device); port = UsbSerialDevice.createUsbSerialDevice(device, connection); // 打开端口并设置参数 port.open(); port.setParameters(9600, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); // 读取数据 byte[] buffer = new byte[1024]; int numBytesRead = port.read(buffer, 1000); // 读取最多1000个字节 String data = new String(buffer, 0, numBytesRead); // 写入数据 String message = "Hello, world!"; byte[] messageBytes = message.getBytes(); port.write(messageBytes, 1000); // 写入最多1000个字节 ``` 4. 最后,您需要在应用程序中处理USB权限请求和设备连接/断开事件。以下是一个示例: ```java private final BroadcastReceiver usbReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if (device != null) { // 用户已授权USB权限,可以进行通信 // 获取USB设备和端口,打开端口并设置参数 ... } } else { // 用户未授权USB权限 ... } } } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { // USB设备已连接 ... } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { // USB设备已断开 ... } } }; ... // 注册USB广播接收器 IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_USB_PERMISSION); filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); registerReceiver(usbReceiver, filter); // 请求USB权限 UsbDevice device = ...; // 获取USB设备 UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); manager.requestPermission(device, permissionIntent); ``` 希望这些步骤能帮助您编写一个完整的安卓项目,以读取和发送数据使用usb-serial-for-android库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值