Tout d'abord, bonjour là-bas!Création de grandes images
puis, un peu de contexte:
Je travaille actuellement sur un « générateur Maze ». Je peux, pour l'instant, générer des labyrinthes avec 18500 largeurs et 18500 hauteurs (ce qui me rend un peu heureux !!).
Donc, pas de problème avec la génération. Puis, bien sûr, je voulais les écrire dans un fichier .jpeg/.bmp ou d'autres fichiers. Donc, pour un labyrinthe de 18k5 * 18k5, j'ai besoin d'une image de 37k * 37k.
J'ai d'abord essayé avec .jpeg. Cela a fonctionné, mais les fichiers de sortie étaient grands de 1,2 GigaBytes. Ceux-ci prennent des âges trop ouverts ... mais je peux les ouvrir.
J'ai donc essayé d'utiliser le format BMP à la place car il permet d'encoder des pixels sur 1 bit chacun. Les fichiers de sortie sont maintenant reaaaally plus petits .... mais je ne peux pas les ouvrir ... On me dit que les fichiers sont "corrompus ou trop gros". Je ne pense pas qu'ils soient corrompus car cela fonctionnait avec un labyrinthe 10k * 10k (image 20k * 20k) et il n'a pas réussi à ouvrir, avec le même code, un labyrinthe de 13k * 13k (image 26k * 26k).
Voici donc le code (j'utilise EasyBMP lib):
int main()
{
HandyMaze labz(MAZE_SIDE, MAZE_SIDE); // Maze generator
Labz* l; // Maze iteself
BMP img;
if (labz.Generate() == false)
{
std::cout << "Derp" << std::endl;
return (1);
}
l = labz.GetFormatedLab();
if (l == 0)
{
std::cout << "Dorp" << std::endl;
return (1);
}
std::cout << "Generated" << std::endl;
std::cout << "Creating Image ..." << std::endl;
img.SetSize(l->w, l->h);
if (img.SetBitDepth(1) == false)
{
std::cout << "Failed to change Depth" << std::endl;
return (1);
}
std::cout << "Filling Image ..." << std::endl;
std::cout << l->w << " " << l->h << std::endl;
for (int i = 0; i < l->w; ++i)
for (int j = 0; j < l->h; ++j)
{
if (l->lab[j][i] == WALL)
{
img(j, i)->Red = 0;
img(j, i)->Green = 0;
img(j, i)->Blue = 0;
img(j, i)->Alpha = 0;
}
else
{
img(j, i)->Red = 255;
img(j, i)->Green = 255;
img(j, i)->Blue = 255;
img(j, i)->Alpha = 0;
}
}
std::cout << "Saving Image ..." << std::endl;
std::stringstream ss;
ss << "Laby-" << MAZE_SIDE << ".bmp";
img.WriteToFile(ss.str().c_str());
return (0);
}
Comme vous pouvez le voir, le code de dessin est vraiment simple mais quand même ... Est-ce que je manque quelque chose ou que je tente de faire quelque chose que je ne peux pas faire xD?
Merci d'avance pour vos suggestions. PS: La première fois que je poste ici, j'ai essayé d'être aussi clair que possible, mais dites-moi si j'ai fait quelque chose dans le mauvais sens.
Rel4X
Je crois que les fichiers BMP doivent avoir un en-tête (http://en.wikipedia.org/wiki/BMP_file_format#File_structure) – braindf
Salut cerveau. Oui et il me semble que mes tailles sont bien en deçà de la taille maximale: L'en-tête dit 4 octets pour la hauteur et la largeur et la taille totale. 4 octets signés est quelque chose comme 2000000000 pixels. J'ai 1369000000 pixels. –
Essayez les paramètres du canal alpha à 255. –