2010-05-04 6 views
1

Je dois générer de grandes images (image A4 à 200 DPI, le format PNG serait bien) dans mon application cadre compact. Ceci est impossible à faire de manière standard en raison de limitations de mémoire (une telle grande image va lancer OOMException).comment générer une grande image dans un cadre compact

Y a-t-il une bibliothèque qui offre une génération d'image de flux sauvegardée par fichier? Ou je pourrais générer beaucoup plus petites bandes d'images (chaque bande représentant une rangée de la grande image) en utilisant l'approche Bitmap standard, mais j'ai besoin de les fusionner ensemble après - Y at-il une méthode pour fusionner de nombreuses petites images en une grand sans avoir à instancier une grande instance Bitmap (ce qui causerait de nouveau OOM)?

Répondre

1

Je viens de faire une mise en œuvre de base rapide de la classe d'encodage de flux PNG - il supporte 8bpp et niveaux de gris au moment même, mais assez pour mon scénario . Il devrait être assez facile d'étendre la classe pour prendre en charge RVB et plus de couleurs.

http://gist.github.com/393409

1

Ceci est intéressant ... J'ai fait un peu de googling pour vous, et la seule chose utile que j'ai trouvée est OpenNETCF Smart Device Framework. La référence de la bibliothèque de classes est here Vous propose de jeter un coup d'œil à ImagingFactoryClass. La méthode CreateImageEncoderToStream peut être utile.

L'approche de fusion serait cool si vous aviez une bibliothèque qui le ferait pour vous. J'ai regardé les spécifications PNG et ce n'est pas très prometteur.

Bonne chance et j'espère que cela aidera.

+0

J'utilise déjà OpenNETCF SDF, mais négligé la méthode CreateImageEncoderToStream. Je vais y jeter un coup d'œil et signaler tout progrès .. – Buthrakaur

2

J'avais moi-même un besoin similaire, et je finis d'écrire ma propre bibliothèque. PNGJ Vous pouvez le trouver utile, c'est Java mais il devrait être facile de le porter en C# (complètement indépendant des autres bibliothèques). Il écrit et lit des images PNG (à l'exception des images à palettes), orientées sur la ligne, plutôt de faible niveau, optimisées pour gérer des images volumineuses. Il y a quelques exemples dans le téléchargement.

Mise à jour: Je l'ai fait un C# disponible ici: PNGCS

+0

qui semble prometteur - Je vais essayer de le réécrire en .Net si je ne trouve pas d'autre méthode pour résoudre le problème. Merci – Buthrakaur

Questions connexes