gpt4 book ai didi

c - 在控制台应用程序中显示像素值的二维数组

转载 作者:行者123 更新时间:2023-11-30 15:40:30 24 4
gpt4 key购买 nike

我通过 TCP/IP 连续将二维像素值数组 (uint32) 从 LabVIEW 发送到 C 程序,分辨率为 160x120。 C 程序的目的是在控制台应用程序中将接收到的像素值显示为 2D 数组。我将像素作为字节流发送,并使用 Ws2_32.lib 中的 recv 函数来接收 C 程序中的字节。然后,我将字节转换为 uint32 值,并使用 2D 数组在控制台应用程序中显示它们,因此每个 2D 数组都代表一个图像。

不过我对帧速率有疑问。我能够在 LabVIEW 中每秒发送 30 帧,但是当我使用 C 程序打开 TCP/IP 连接时,帧速率降至每秒 1 帧。这肯定是 C 程序的问题,因为我设法使用相同的 LabVIEW 程序将每秒所需的帧发送到相应的 C# 程序。

C 代码:

#define DEFAULT_BUFLEN 256
#define IMAGEX 120
#define IMAGEY 160

WSADATA wsa;
SOCKET s , new_socket;
struct sockaddr_in server , client;
int c;
int iResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
typedef unsigned int uint32_t;
unsigned int x=0,y=0,i,n;
uint32_t image[IMAGEX][IMAGEY];
size_t len;
uint32_t* p;

p = (uint32_t*)recvbuf;

do
{

iResult = recv(new_socket, recvbuf, recvbuflen, 0);

len = iResult/sizeof(uint32_t);

for(i=0; i < len; i++)
{
image[x][y] = p[i];
x++;
if (x >= IMAGEX)
{
x=0;
y++;
}
if (y >= IMAGEY)
{
y = 0;
x = 0;
//print image
for (n=0; n< IMAGEX*IMAGEY; n++)
{
printf("%d",image[n%IMAGEX][n/IMAGEY]);
if (n % IMAGEX)
{
printf(" ");
}
else
{
printf("\n");
}
}

}
}

} while ( iResult > 0 );

最佳答案

尝试减少打印..由于您在同一个线程中读取和打印,TCP连接中的数据将填满,然后会对另一端(LABView)产生反压,LABView将停止发送数据,直到它从另一端获取绿色信号(你的 C 程序)

首先,您可以通过替换此内容进行调试

    for (n=0; n< IMAGEX*IMAGEY; n++)
{
printf("%d",image[n%IMAGEX][n/IMAGEY]);
if (n % IMAGEX)
{
printf(" ");
}
else
{
printf("\n");
}
}

与 printf("一帧接收\n");

看看它是否有什么不同。我假设您的 TCP 连接有足够的带宽

关于c - 在控制台应用程序中显示像素值的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20980159/

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