Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Image de plus de 1Go pixels  (Lu 4944 fois)

0 Membres et 2 Invités sur ce sujet

rel4x.r

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Image de plus de 1Go pixels
« le: Juillet 25, 2014, 05:15:06 pm »
Bonjour bonjour,

voila mon souci :

je m'amuse a créer des labyrinthes, les plus grands possible. Le souci c'est qu'au moment de les dessiner, si leurs tailles dépassent 32k pixels de cote environ, j'ai des segfault lors des setpixel de sf::Image car je n'ai l'index des pixels dépassent la taille d'un unsigned int. Si je fais des modif dans le code de SFML et utilise des Uint8 a la place de unsigned int, pensez vous que cela réglerait le problème ?

D'avance merci,

Rel4x.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Image de plus de 1Go pixels
« Réponse #1 le: Juillet 25, 2014, 05:30:20 pm »
Si tu nous exposais le problème, plutôt que les solutions potentielles auxquelles tu as pensé, et qui n'ont rien à voir ? En effet, unsigned int va jusqu'à 2^32 soit plus de 4 milliards, quant à Uint8, 2^8 soit 256.

Utilise ton debugger, regarde où ça plante. Si tu ne t'en sors pas, montre nous un code complet et minimal qui reproduit le problème.
Laurent Gomila - SFML developer

rel4x.r

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Image de plus de 1Go pixels
« Réponse #2 le: Juillet 25, 2014, 06:17:58 pm »
Re bonjour,

oui, j'ai été un peu rapide dans mon explication :]

En fait, c'est assez simple,

je crée une image

final.create(34000, 34000);

Juste derrière, je parcours cette image a l'aide de 2 boucles for imbriquées :

for (unsigned int i = 0; i < l->w; ++i)
                for (unsigned int j = 0; j < l->h; ++j)
                        final.setPixel(j, i, sf::Color::White);

et la je segfault sur la ligne du final setPixel().

Ma supposition était donc : L'image fait donc 34000 * 34000 = 1156000000 pixels. Un pixel faisant 4 octets, l'image doit avoir en interne une rawdata de 4624000000 octets. Hors, pour cette taille un unsigned int ne suffit plus comme index.

Ma question était donc de savoir si il était possible d'utiliser un uint64 (8 octets) plutôt qu'un unsigned int (4octets) comme index et si cela pourrait résoudre la situation ?

Encore désolé pour la confusion dans mon précédent post, j'ai écris uint8 en ayant 8 octets en tête et pas 8 bits ...  Mon idée n'a t'elle du coup rien a voir ou mon souci vient bien de la ?

En espérant avoir été plus correct,

Cdlt,

Rel4x

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Image de plus de 1Go pixels
« Réponse #3 le: Juillet 25, 2014, 07:58:33 pm »
C'est bien ça, mais ça ne se règlera pas en changeant un type. Allouer 4 Go en un seul bloc de mémoire contigüe (ce que fait std::vector, utilisé par sf::Image), ça risque de poser problème.  Ensuite si ton OS est en 32-bits ce sera tout simplement impossible.

Et... au fait tu fais quoi après, avec cette grosse image ? Tu la charges dans une texture ? Parce que côté carte graphique, 4 Go ça risque de poser problème aussi...

Bref, évite les problèmes, découpe ta grosse image en plusieurs petites ;)
Laurent Gomila - SFML developer

rel4x.r

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Image de plus de 1Go pixels
« Réponse #4 le: Juillet 25, 2014, 08:13:42 pm »
Alors, en fait l'image je veux juste la générer pour la remplir et la write en jpeg. J'ai pense a la morceler, mais comme il s'agit en fait d'un (très très très ... très) grand labyrinthe, je me veux pas la morceler ... C'est moins cool.

Mon OS est bien en 64 bits, du coup je pense que ca devrait le faire \o/ ! Je suis en train de finir le code avec des uint64_t, je te tiens au courant dans la soirée si tout se passe bien ^^ !

Rel4x

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Image de plus de 1Go pixels
« Réponse #5 le: Juillet 25, 2014, 08:17:24 pm »
Après, si c'est juste pour enregistrer une image JPEG sur le disque, SFML n'est pas forcément la bibliothèque la plus adaptée.
Laurent Gomila - SFML developer

rel4x.r

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Image de plus de 1Go pixels
« Réponse #6 le: Juillet 25, 2014, 08:22:53 pm »
Non mais bon après, y a aussi le fait que, ayant commence comme ça, j'ai envie de voir si je peux aller au bout xD ... Ce n'est pas un projet pro ou autre, du coup l'objectif n'est pas de faire le truc le plus adapte, mais de s'amuser :))

Edit : Bon pour l instant c'est pas super concluant xD ... Je suis toujours dessus ;p
« Modifié: Juillet 26, 2014, 02:19:04 pm par rel4x.r »

rel4x.r

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Image de plus de 1Go pixels
« Réponse #7 le: Juillet 26, 2014, 04:35:20 pm »
Salut salut,

bon bah ça marche ! J'arrive maintenant a avoir des m_pixels de plus de 4Go \o/ !! Bon, maintenant faut que j'arrive a faire que mes fichiers d output pèsent moins, car la j'ai des jpeg de 1Go ... C'est un peu trop !

Rel4x

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Image de plus de 1Go pixels
« Réponse #8 le: Juillet 26, 2014, 05:44:36 pm »
Il faudrait régler la qualité du JPEG, mais SFML ne te donne pas le contrôle dessus (elle est fixée à 90%, si je me souviens bien). Tu peux toujours aller bidouiller dans les sources, ceci-dit.
Laurent Gomila - SFML developer

kimci86

  • Full Member
  • ***
  • Messages: 128
    • Voir le profil
Re : Image de plus de 1Go pixels
« Réponse #9 le: Juillet 26, 2014, 07:33:53 pm »
Bonjour,
Je pense que le format png est plus approprié que le jpeg pour stocker une image de labyrinthe. Ça mérite de faire de tests.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Image de plus de 1Go pixels
« Réponse #10 le: Juillet 26, 2014, 08:19:43 pm »
Si tu as peu de couleurs, et de grosses zones contigûes de même couleur, alors oui, le PNG sera peut-être plus performant.
Laurent Gomila - SFML developer