gpt4 book ai didi

java - 从android部分发送图像并从pc接收它,但是图像已损坏

转载 作者:行者123 更新时间:2023-11-30 04:16:54 25 4
gpt4 key购买 nike

我正在尝试通过套接字从我的 android 手机和 PC 部分发送一个 jpeg 图像,获取发送的数据并将其存储在一个 jpg 文件中。

我很确定我正确配置了套接字,因为我可以将数据(二进制文件)从 PC 下载到 android 并正确保存。

我还可以读取从 android 发送到 PC 的流。数据包长度和 header 信息正是我所期望的。

问题在于读取图像数据。我获得了相同大小的图像数据,但是当我将它保存到 .jpg 文件时,它已损坏,我无法查看它。

这是我的 Android 代码,它在发送 header 信息后尝试发送图像文件:

try{
//packagesize is header information which is sent in advance
index.putInt(packagesize);

byte c[]= {index.get(3),index.get(2),index.get(1),index.get(0)};

InputStream jpgimage = new FileInputStream(fileimage);

dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());

int writeBytes = 0,len = 0;
byte buffer[] = new byte[1024];

while((len = jpgimage.read(buffer,0,buffer.length))!=-1)
{
writeBytes+=len;
dataOutputStream.write(buffer,0,len);

}

dataOutputStream.flush();
jpgimage.close();
dataInputStream.close();
dataOutputStream.close();

...
...
...
}
catch statements here

这是PC端的接收代码:

    // after reading header information I try to read image data

char *buff = malloc(sizeof(char) * jpeg_length);

unsigned int byteCount = 0;
unsigned int byteCount = 0;
do
{
int ret = recv(socket, buff+readBytes, jpeg_length-readBytes, 0);
if (ret <= 0)
{
fprintf(stderr,"Error receiving jpeg file.\n");
fclose( output );
return 106;
}
readBytes += ret;

fwrite(buff, sizeof(char), readBytes, output);
}
while (readBytes < jpeg_length);

fclose( output );

我还必须提到,当我使用纯 C++ 的 PC 客户端应用程序发送图像数据时,接收部分工作正常。

是否知道问题是什么以及为什么我从 Android 设备发送的图像损坏?

欣赏它。

已编辑我将此添加到 android 应用程序以测试发送字节是否可以形成良好的图像?我保存了图像,没问题。

int writeBytes = 0,len = 0;
byte buffer[] = new byte[1024];
// Here I save all sending bytes to an image called test.jpg
String path = "sdcard/download/images/test.jpg";
FileOutputStream stream = new FileOutputStream(path);

while((len = jpgimage.read(buffer,0,buffer.length))!=-1)
{
writeBytes+=len;
stream.write(buffer);
dataOutputStream.write(buffer,0,len);
dataOutputStream.flush();

}
stream.flush();

dataOutputStream.flush();
jpgimage.close();
dataInputStream.close();
dataOutputStream.close();

最佳答案

我认为你应该使用 Bitmap 类将你的图像转换为 ByteBuffer 然后发送它,在另一端将 ByteBuffer 转换为图片。

在发送方

Bitmap bitmap = BitmapFactory.decodeFile("ImageD2.jpg");
int bytes = bitmap.getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(bytes);
bitmap.copyPixelsToBuffer(buffer);
byte[] array = buffer.array();

现在您可以将 byte[] 作为普通数据发送。

在接收端

正常接收数组并将其转换回Bitmap

 Bitmap bitmap = BitmapFactory.decodeByteArray(array , 0, array .length);

有关更多信息,您可以阅读以下问题

Converting bitmap to byteArray android

How to convert byte array to Bitmap

关于java - 从android部分发送图像并从pc接收它,但是图像已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17461834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com