2012-02-10 6 views
0

Il y a une tâche, pour écrire un programme qui sera la recopie d'un fichier JPEG. Mais le problème est que certains fichiers JPEG ont de grandes tailles - des centaines de MegaBytes. Donc la question: Est-il possible de recadrer un fichier jpeg, mais sans charger tous les fichiers dans la RAM, en utilisant quelque chose comme fseek(), et en décodant uniquement les parties qui en ont besoin.Recadrage de grands jpeg

Est-ce possible? Si oui, peut-être que certaines bibliothèques font de même.

Mise à jour. Tout cela sera utilisé pour la technologie de zoom profond. Donc quand le zoom profond demandera un fichier, ce programme le donnera, mais cela devrait être en temps réel

+3

Avez-vous veillé à ce que les gros fichiers posent réellement un problème? Ordinateurs ces jours-ci ont des concerts de RAM et quand il n'y a pas assez de mémoire physique vous le page disque ... Essayez et recadrez un grand jpeg d'abord pour faire pour voir si ce sera une perf. problème. Et ... l'optimisation prématurée est la racine de tous les maux. –

+0

Cela ressemble étrangement à un projet de devoirs. – Edwin

+0

ok, mais en parfait, cet utilitaire, devrait fonctionner en temps réel, et il y a quelques fichiers (cartes) plus gros. Le plus grand est 4 Go, pour travailler avec lui en temps réel est impossible, si tou le chargera pour ram – briskly

Répondre

5

Il y a deux façons d'accomplir cela. Le premier est le rognage sans perte, dans lequel vous ne décodez pas le fichier complètement mais travaillez avec les blocs DCT 8x8. Vous aurez besoin d'utiliser une bibliothèque qui a cette capacité, et il impose certaines restrictions sur la capacité de recadrage. Vous ne pouvez pas recadrer vers une limite qui ne se trouve pas sur le carré DCT, ce qui vous limite à des multiples de 8 ou 16 selon le sous-échantillonnage dans le fichier.

La deuxième méthode consiste à utiliser une bibliothèque qui vous permet de lire et d'écrire une ligne à la fois. Je sais que le IJG library peut le faire, et probablement d'autres aussi. C'est le moyen le plus simple, mais l'inconvénient est que l'image passe par une passe de décompression/recompression et va perdre en qualité et/ou être plus grande.

+0

Merci beaucoup, je vais essayer la première – briskly