每60毫秒用c创建一个文件以保存位图图像

每60毫秒用c创建一个文件以保存位图图像,c,C,我每60毫秒从服务器(摄像头传感器)获取原始rgb 24位格式的图像数据(752x480像素)。我成功地尝试使用fopen(“imageinfo.txt”,“w+”)打开一个文件 发生的情况是,图像原始数据被一遍又一遍地写入同一个文件中,在我在服务器中的模拟结束时,我只有一个文件包含过去60毫秒内的原始数据 如何为每60毫秒创建一个新文件,并将图像数据保存在使用winsock recv函数接收的变量“char img”中 模拟时间不是恒定的。例如,模拟将持续10分钟、20分钟或30分钟,但我希望

我每60毫秒从服务器(摄像头传感器)获取原始rgb 24位格式的图像数据(752x480像素)。我成功地尝试使用fopen(“imageinfo.txt”,“w+”)打开一个文件

发生的情况是,图像原始数据被一遍又一遍地写入同一个文件中,在我在服务器中的模拟结束时,我只有一个文件包含过去60毫秒内的原始数据

如何为每60毫秒创建一个新文件,并将图像数据保存在使用winsock recv函数接收的变量“char img”中

模拟时间不是恒定的。例如,模拟将持续10分钟、20分钟或30分钟,但我希望每60毫秒创建一个新文件

              if (sscanf(VDScfg.sbuf, "*VDS %d %s %f %dx%d %d", &Channel,ImgType,                            &SimTime, &ImgWidth, &ImgHeight, &ImgLen) == 6) 
               {
                   if (ImgLen > 0) {
                      if (strcmp(ImgType, "rgb") == 0) {
                        char *img = (char *)malloc(ImgLen);
                            for (len=0; len<ImgLen; len+=res) {
                               if ((res=recv(VDScfg.sock, img+len, ImgLen-len, VDScfg.RecvFlags)) < 0) {
                                 printf ("VDS: Socket Reading Failure\n");
                                   break;
                                    }
            }
            if (len == ImgLen) {
                FILE *fp; 
                fp=fopen("imageinfo.txt","w+");
                fprintf(fp,"%s",img);
                fclose(fp);
                MinDepthPixel = 0;

                nPixel = ImgLen/sizeof(float);
                f_img = (float *)img;

                for (Pixel = 0; Pixel < nPixel; Pixel++) {
                    if(f_img[Pixel] < f_img[MinDepthPixel])
                        MinDepthPixel = Pixel;
                }
                VDSIF.MinDepth = f_img[MinDepthPixel];

                if (VDScfg.Verbose) {
                    /* Print general image information */
                    printf ("> %s\n", VDScfg.sbuf);

                    printf (" Minimal distance: %6.3f m\n Pixel position: x = %u, y = %u\n\n",VDSIF.MinDepth, MinDepthPixel%ImgWidth, MinDepthPixel/ImgWidth);
                }
                }
            free (img);
        }
    }if (ImgLen > 0) {
             `if (strcmp(ImgType, "rgb") == 0) {
              char *img = (char *)malloc(ImgLen);
              for (len=0; len<ImgLen; len+=res) {
                if ((res=recv(VDScfg.sock, img+len, ImgLen-len, VDScfg.RecvFlags)) < 0)
                 {                                        
                    printf("VDS: Socket Reading Failure\n");
                    break;
                }
              }
              if (len == ImgLen) {
                FILE *fp; 
                fp=fopen("imageinfo.txt","w+");
                fprintf(fp,"%s",img);
                  }
            }
if(sscanf(VDScfg.sbuf,“*VDS%d%s%f%dx%d%d”、&Channel、ImgType、&SimTime、&ImgWidth、&ImgHeight、&ImgLen)=6)
{
如果(ImgLen>0){
if(strcmp(ImgType,“rgb”)==0){
char*img=(char*)malloc(ImgLen);
对于(len=0;len 0){
`if(strcmp(ImgType,“rgb”)==0){
char*img=(char*)malloc(ImgLen);

对于(len=0;len您需要创建具有不同文件名的新文件。如果您总是打开相同的文件名,当然您将始终写入相同的文件

下面的简单代码示例将创建10个不同的文件并将其写入“hi”:imginfo0.txt-imginfo9.txt。我相信您可以根据自己的需要进行调整

#include <stdio.h>
#include <string.h>

char filename[32];

int main()
{
    FILE * fp;
    char img[3];
    strcpy(img, "hi");
    int i;
    for(i=0;i<10;i++)
    {
        sprintf(filename, "imageinfo%d.txt", i);
        fp=fopen(filename,"w+");
        fprintf(fp, "%s", img);
        fclose(fp);
    }
}
#包括
#包括
字符文件名[32];
int main()
{
文件*fp;
charimg[3];
strcpy(img,“hi”);
int i;

对于(i=0;i)请显示您的代码。如果您一直在写入“imageinfo.txt”,当然您只有这个文件。请编辑原始问题并将您的代码放在那里。您不能将其全部作为注释发布,而且它是不可读的。@davir:我是这里的新手,所以不知道如何添加代码。请查看原始问题和代码。谢谢。没关系。我想您刚才发布的代码是循环的?P请再显示一点。整个循环应该足够了。@davir:是的,请检查一下,在创建文件后,我会进行一些图像处理。但是,主要的焦点是,如果len==Imglen,则每次控件进入时都会创建一个文件。可能每60毫秒就会发生一次,因为服务器被配置为以该速率发送图像数据。