1.I lấy dữ liệu camera android chuyển đổi sang bitmaoLàm cách nào để chuyển đổi ByteArrayInputStream thành jpeg và hiển thị trên điện thoại di động Android?
if (mBitmap == null) //create Bitmap image first time
{
Camera.Parameters params = camera.getParameters();
width_ima = params.getPreviewSize().width;
height_ima = params.getPreviewSize().height;
mBitmap = Bitmap.createBitmap(width_ima, height_ima, Bitmap.Config.RGB_565);
mRGBData = new int[width_ima * height_ima];
}
decodeYUV420SP(mRGBData, data, width_ima, height_ima);
mBitmap.setPixels(mRGBData, 0, width_ima, 0, 0, width_ima, height_ima);
2.send dữ liệu với udp
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
mBitmap.compress(Bitmap.CompressFormat.JPEG, 50, byteStream); // !!!!!!! change compression rate to change packets size
byte data[] = byteStream.toByteArray();
Log.e(TAG, "SIZE: " + data.length);
int nb_packets = (int) Math.ceil(data.length/(float)DATAGRAM_MAX_SIZE);
int size = DATAGRAM_MAX_SIZE;
/* Loop through slices */
for(i = 0; i < nb_packets; i++)
{
if(i >0 && i == nb_packets-1) size = data.length - i * DATAGRAM_MAX_SIZE;
/* Set additional header */
byte[] data2 = new byte[HEADER_SIZE + size];
data2[0] = (byte)frame_nb;
data2[1] = (byte)nb_packets;
data2[2] = (byte)i;
data2[3] = (byte)(size >> 8);
data2[4] = (byte)size;
/* Copy current slice to byte array */
System.arraycopy(data, i * DATAGRAM_MAX_SIZE, data2, HEADER_SIZE, size);
try
{
size_p = data2.length;
DatagramPacket packet = new DatagramPacket(data2, size_p, serverAddr, 9000);
socket.send(packet);
3.Tôi nhận được dữ liệu trên android di động
while (true)
{
try {
socket.receive(packet);
System.out.println("已经收到信息了!!!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] data = packet.getData();
int frame_nb = (int)data[0];
int nb_packets = (int)data[1];
int packet_nb = (int)data[2];
int size_packet = (int) ((data[3] & 0xff) << 8 | (data[4] & 0xff));
if((packet_nb==0) && (current_frame != frame_nb))
{
current_frame = frame_nb;
slicesStored = 0;
imageData = new byte[nb_packets * DATA_MAX_SIZE];
}
if(frame_nb == current_frame)
{
System.arraycopy(data, HEADER_SIZE, imageData, packet_nb * DATA_MAX_SIZE, size_packet);
slicesStored++;
}
/* If image is complete display it */
if (slicesStored == nb_packets)
{
ByteArrayInputStream bis = new ByteArrayInputStream(imageData);
}
Và câu hỏi của tôi là: làm thế nào tôi có thể hiển thị dữ liệu bis ByteArrayInputStream trên điện thoại di động Android ... Cảm ơn bạn đã trả lời!
Vâng những gì loại đối tượng bạn tìm kiếm trên phía khách hàng? Tôi mong đợi nó có một phương thức khởi tạo hoặc phương thức factory lấy InputStream, hoặc có thể lấy một cái gì đó * else * có một hàm tạo lấy một InputStream. –
Bạn có muốn nói rằng bạn muốn chuyển đổi ByteArrayInputStream thành một ảnh bitmap ?? –
vâng, ý tôi là chuyển đổi ByteArrayInputStream thành hình ảnh bitmap –