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