在子线程中接收并解析出帧头为0x01,0xFE帧尾为0xFE,0x01的二进制rgb565数据流宽为120高为120,直接decode成bitmap,然后生成图片 ,把图片路径广播出去 ,再首页或者二级页面监听广播并展示,不存储到sd卡
时间: 2023-12-20 12:06:50 浏览: 93
好的,那么你需要在子线程中进行以下步骤:
1. 接收二进制rgb565数据流,直到读取到帧头为0x01,0xFE。
2. 解析数据流,获取数据的宽度和高度。
3. 继续接收数据流,直到读取到帧尾为0xFE,0x01。
4. 将接收到的数据流解码成bitmap。
5. 将bitmap生成图片,并获取图片的路径。
6. 使用广播将图片路径广播出去。
代码示例:
```java
public class ImageReceiverRunnable implements Runnable {
private DatagramSocket socket;
private Handler handler;
public ImageReceiverRunnable(DatagramSocket socket, Handler handler) {
this.socket = socket;
this.handler = handler;
}
@Override
public void run() {
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
try {
// 循环接收二进制rgb565数据流
while (true) {
// 接收数据包
socket.receive(packet);
// 判断是否为帧头
if (buffer[0] == 0x01 && buffer[1] == 0xFE) {
// 解析数据流,获取宽度和高度
int width = ((buffer[2] & 0xFF) << 8) | (buffer[3] & 0xFF);
int height = ((buffer[4] & 0xFF) << 8) | (buffer[5] & 0xFF);
// 创建bitmap
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
ByteBuffer byteBuffer = ByteBuffer.wrap(buffer, 6, buffer.length - 8);
bitmap.copyPixelsFromBuffer(byteBuffer);
// 生成图片
String imagePath = saveBitmap(bitmap);
// 广播图片路径
Intent intent = new Intent("com.example.image.action");
intent.putExtra("imagePath", imagePath);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
// 判断是否为帧尾
if (buffer[buffer.length - 2] == 0xFE && buffer[buffer.length - 1] == 0x01) {
// 清空缓存
Arrays.fill(buffer, (byte) 0);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
private String saveBitmap(Bitmap bitmap) {
String imagePath = context.getCacheDir().getAbsolutePath() + File.separator + "image.jpg";
File file = new File(imagePath);
try {
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
return imagePath;
}
}
```
在主线程中注册广播接收器:
```java
private BroadcastReceiver imageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String imagePath = intent.getStringExtra("imagePath");
// 显示图片
imageView.setImageBitmap(BitmapFactory.decodeFile(imagePath));
}
};
protected void onResume() {
super.onResume();
// 注册广播接收器
LocalBroadcastManager.getInstance(this).registerReceiver(imageReceiver, new IntentFilter("com.example.image.action"));
}
protected void onPause() {
super.onPause();
// 取消广播接收器
LocalBroadcastManager.getInstance(this).unregisterReceiver(imageReceiver);
}
```
阅读全文
相关推荐


















