Enregistrer à la volée
Cyberbob
Membre
Salut à tous..
J'ai enfin fini mon premier programme Cocoa ! Ce logiciel s'amuse avec les images TIFF. Bref, du bonheur.
Par contre, j'ai un soucis. Lorsque j'ouvre un fichier très gros, j'ai une erreur du sytle malloc : impossible to allocate memory.
Bref, normal, si je fais une image de 34000 x 25000 pixels en format CMJN ou RVB, ca fait une image monstrueuse à allouer en mémoire. Pour info, voici le code de création du NSBitmapImageRep :
En fait, j'aimerais savoir s'il est possible d'écrire les Datas de mon image directement sur le disque dur, plutot que d'allouer toute cette mémoire vive.
J'ai essayé de voir du coté des NSData, mais j'ai pas trouver mon bonheur.
Une idée ?
J'ai enfin fini mon premier programme Cocoa ! Ce logiciel s'amuse avec les images TIFF. Bref, du bonheur.
Par contre, j'ai un soucis. Lorsque j'ouvre un fichier très gros, j'ai une erreur du sytle malloc : impossible to allocate memory.
Bref, normal, si je fais une image de 34000 x 25000 pixels en format CMJN ou RVB, ca fait une image monstrueuse à allouer en mémoire. Pour info, voici le code de création du NSBitmapImageRep :
repDest = [[[NSBitmapImageRep alloc] <br /> initWithBitmapDataPlanes:NULL <br /> pixelsWide:width pixelsHigh:height<br /> bitsPerSample:8 samplesPerPixel:4<br /> hasAlpha:NO isPlanar:NO<br /> colorSpaceName:NSDeviceCMYKColorSpace<br /> bytesPerRow:width*4 bitsPerPixel:32] retain];<br />
En fait, j'aimerais savoir s'il est possible d'écrire les Datas de mon image directement sur le disque dur, plutot que d'allouer toute cette mémoire vive.
J'ai essayé de voir du coté des NSData, mais j'ai pas trouver mon bonheur.
Une idée ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
(ça se fait, mais pas d'un seul tenant...)
Je ne sais pas si les logiciels comme PhotoShop sont capables de traiter ce genre d'images, mais s'ils le font, je pense qu'ils fonctionnent avec des vignettes ou des chargements par morceaux.
Je ne comprends pas?
Et la mémoire virtuelle, alors?
S'il y a plus de 3 Go de disque libre, ça devrait marcher, non?
la mémoire virtuelle a ces limites !
en l'occurrence sous OSX (32b ) les process sont limites a 4Go (architecture 4Go user/ 4Go kernel)
d'autre OS (ex: linux) sont limite a 3Go, d'autre a plus
mais dans tous les cas l'OS fixe une limite. Et donc les soft genre photoshop gère leur propre systeme de tiling/caching des images. (en plus ca permet un redraw plus rapide ...)
note : ca implique d'avoir quand même l'espace disque ;-)
par contre c'est plus compliquer a mettre en oeuvre.
Le problème ce ne sont pas les 3 Go... Ce sont les 3 Go "contigus" !
Déjà , la mémoire virtuelle est découpée en fichiers de moins de 500 Mo il me semble...
Les 3Go contigus ne sont pas un problème, ca c'est le job de l'OS... (quelque soit la manièere dont il le fait, disque ou autre )
par contre allouer 3Go pour un objet, ca c'est un problème (au moins en 32bits ;-). en l'occurence le max c'est 4Go si tout va bien, et comme il faudra bien d'autre allocation que juste l'image ...
Par contre, d'un coup, no way...
Peut être qu'il faut que je fasse tout à la main, écirre le Header puis les data de mon image directement sur le disque. Je trouve ça un peu dommage, et surtout, je ne sais pas si j'en suis capable !
Je ne sais pas sous OS X quelle quantité de RAM un process peut adresser, mais en 32bit, sous les différents OS que je connais, c'est très souvent 2Go. Donc les 3Go ne rentrent pas directement en mémoire pour 1 process.
Le système gère ensuite la RAM et la mémoire virtuelle comme il le veut, et l'allocation non-contigue ne pose pas de problèmes si le système a une bonne gestion de la mémoire (tous les systèmes actuels savent le faire).
C'est ce que je dis. Tu ne peux pas le faire car dans ce cas, l'occupation mémoire du process serait > 2Go. Tu peux par contre le faire en 64bit (si ton processeur est compatible).
Donc jusqu'à 4Go même en 32 bits ça devrait être OK.
Je vous tiens au courant. Si des personnes sont intéressées par la manipulation de données, je pourrais peut être faire un tutoriel pour le site.