在C#中接收图像不显示完整图像

问题描述 投票:0回答:1

我正在使用 Python(服务器)通过 TCP scoket 将图像发送到 C# Winforms 应用程序(客户端)。我的代码似乎可以工作,但输出的图像似乎不完整(见下文)。

发送图像数据的Python代码:

## Connection code...
## Previous protocol code...

# Send image
with open(imagePath, "rb") as image:
    encodedImage = image.read()

socket.sendall(encodedImage)

接收图像数据的C#代码:

// Connection code...
// Previous protocol code...

// Receive image size...

// Receive image
try
{
    byte[] imageData = new byte[imageSize];
    int totalBytesReceived = 0;

    while (totalBytesReceived < imageSize)
    {
        int bytesRead = stream.Read(imageData, totalBytesReceived, imageSize - totalBytesReceived);
        totalBytesReceived += bytesRead;
    }

    using (MemoryStream ms = new MemoryStream(imageData))
    {
        Image image = Image.FromStream(ms);
        image.Save("test.jpg");
    }

    logToConsole("Image saved");    // Custom function
}
catch (Exception ex)
{
    logToConsole(ex.Message);
}

输出图像:

python c# tcp
1个回答
0
投票

int bytesRead =stream.Read(imageData,totalBytesReceived,imageSize -totalBytesReceived);

你的想法是正确的,但是每次调用它都会覆盖 imageData。因此,当您执行

new MemoryStream(imageData)
时,您只获得了最后一块数据。

你可能应该做类似的事情

using var ms = new MemoryStream();
while (totalBytesReceived < imageSize)
{
    int bytesRead = stream.Read(imageData, totalBytesReceived, imageSize - totalBytesReceived);
    ms.Write(imageData, 0, bytesRead);
}

或者只是

using var ms = new MemoryStream();
stream.CopyTo(ms);
© www.soinside.com 2019 - 2024. All rights reserved.