Raj Swami Ответов: 2

Как создать bmp файлы изображений для последовательного представления всех цветов


ниже приведен мой код, в котором я пытаюсь создать 1000 bmp-изображений для представления некоторых цветов. я пишу значения пикселей из значений цикла. вывод этого кода генерирует только 508 изображений, Если я установлю любой цикл for, то он снова генерирует только 508 изображений.
моя главная цель-создать 16581375 изображений всех цветов.
так что, пожалуйста, помогите мне в этом.

Что я уже пробовал:

#include<stdio.h>
#include<conio.h>

void main()
{
    FILE *fp,*pt;
    unsigned char b=66,c=77,aa[54],x=0,jjj=0,jjjj=0,jjjjj=0,buf[1000];
    unsigned short int d=0,v=1,u=24,o=16973;
    unsigned int g,k=0;
    unsigned long siz=102,i=0,r=0,n=0,s=0,l=1200054,h=54,e=54,f=40,q=4,w=4,a=0,z=0,m=200,ss=0,sss=0;//h=16581375,siz=497441304,w=10
    //printf("%c",b);
    i=0;

   for(i=0;i<10;i++)
    {

        for(r=0;r<10;r++)
        {

            for(n=0;n<10;n++)
           {
               //str=ss+str+stdr;
               sprintf(buf,"all%d.bmp",ss);
               fp=fopen(buf,"wb");
               fwrite(&b,sizeof(char),1,fp);
               fwrite(&c,sizeof(char),1,fp);
               fwrite(&siz,sizeof(long),1,fp);
               fwrite(&d,sizeof(short int),1,fp);
               fwrite(&d,sizeof(short int),1,fp);
               fwrite(&e,sizeof(long),1,fp);
               fwrite(&f,sizeof(long),1,fp);
               fwrite(&q,sizeof(long),1,fp);
               fwrite(&w,sizeof(long),1,fp);
               fwrite(&v,sizeof(short int),1,fp);
               fwrite(&u,sizeof(short int),1,fp);
               fwrite(&z,sizeof(long),1,fp);
               fwrite(&z,sizeof(long),1,fp);
               fwrite(&a,sizeof(long),1,fp);
               fwrite(&a,sizeof(long),1,fp);
               fwrite(&z,sizeof(long),1,fp);
               fwrite(&z,sizeof(long),1,fp);
               for(s=0;s<16;s++)
               {
                 fwrite(&i,sizeof(char),1,fp);
                 fwrite(&r,sizeof(char),1,fp);
                 fwrite(&n,sizeof(char),1,fp);

              }
              ss++;

            }

        }

     }

    getch();
}

RedDk

Мне нравится, как ты думаешь, мой друг. Быстрый 60-байтовый 1 x 1 пиксель .bmp с 16581375 вариациями RGB-триады (гребень/перестановка ... scheesch я помню, как это делается с помощью программы QBasic в "кодон" дисплей на консоли двадцати лет назад ... просто для палтуса) .. очень замечательная задача в C. S'gonna взять больше, чем несколько 4-гигабайтных дисков для хранения (как сказал ОГ там, в шкафчике) ... но все равно восхитительно.

Rick York

Может быть, в том смысле, что редко у нас бывает такой мазохизм.

KarstenK

Создавать столько файлов - это глупо. Это серьезно повредит производительности вашей системы и может привести к сбою системы. Поэтому сделайте резервную копию, чтобы защитить свои данные.

2 Ответов

Рейтинг:
13

OriginalGriff

Если я правильно вас понял, вы хотите создать файл для каждого из возможных цветов, которые может содержать растровое изображение. Это не обязательно проблема, но причина, по которой она не работает для вас, заключается в том, что у вас заканчиваются дескрипторы файлов.
Поскольку вы не закрываете свои файлы, когда вы закончите с ними, система не может автоматически освободить дескриптор для повторного использования, и вы заканчиваетесь, поэтому ваше приложение перестает работать должным образом.

Закройте файл, Когда вы закончите с ним, и вы можете перейти к следующей проблеме, с которой вы собираетесь встретиться ... заканчиваются имена файлов ... 64K-это максимальный лимит файлов на папку для FAT32, 300 000-это лимит для exFAT, когда у вас заканчиваются имена файлов 8.3, а время поиска зашкаливает на расширенных. Вы можете обойти это с помощью отдельных папок, но ... тогда вы сталкиваетесь со следующей проблемой: дисковое пространство.
16777216 файлов по 146 байт каждый достаточно плох: 2,449,473,536 байт, но поскольку каждый из них является отдельным файлом, для хранения каждого из них потребуется единица распределения, и есть вероятность, что каждая единица составляет 4096 байт. Таким образом, вам понадобится по крайней мере 68 719 476 736 байт свободного места для их хранения...


Рейтинг:
11

Patrice T

Цитата:
моя главная цель-создать 16581375 изображений всех цветов.

Вся эта идея кажется мне очень неправильной.
Просто потому, что каталог не отсортирован, поиск файла включает в себя последовательное чтение всех имен файлов, пока вы не найдете 1, который ищете. Я боюсь, что будет быстрее построить файл на лету для каждого запроса.
Цитата:
вывод этого кода генерирует только 508 изображений

Может быть, вам стоит научиться писать в файлах.
fp=fopen(buf,"wb");

В C вы должны закрыть то, что открыли.