C# “Paramètre n'est pas valide.” création d'une nouvelle image bitmap
si j'essaie de créer une image bitmap plus de 19000 px j'obtiens l'erreur: Paramètre n'est pas valide.
Comment puis-je contourner ce problème??
System.Drawing.Bitmap myimage= new System.Drawing.Bitmap(20000, 20000);
- Préciser un petit PixelFormat? La valeur par défaut est 32bpp
Vous devez vous connecter pour publier un commentaire.
Gardez à l'esprit, c'est BEAUCOUP de mémoire que vous essayez d'attribuer à l'image Bitmap.
Reportez-vous à http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/37684999-62c7-4c41-8167-745a2b486583/
.NET est susceptible de refuser de créer une image qui utilise beaucoup de mémoire contiguë à la fois.
Un peu plus difficile à lire, mais cette référence permet ainsi:
http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.drawing/2005-06/msg00176.html
19000 pixels carrés, à 32bpp, nécessiterait 11552000000 bits (1.37 GO) pour stocker des images dans la mémoire. C'est juste les premières données de pixels; toute charge supplémentaire inhérent au Système.De dessin.Bitmap ajouterai. Aller jusqu'à 20k pixels carrés à la même profondeur de couleur nécessiterait 1.5 GO de ram juste pour le brut de pixel de la mémoire. Dans un objet unique, vous êtes à l'aide de 3/4 de l'espace réservé pour l'ensemble de l'application dans un environnement 32 bits. Un environnement 64 bits a looser limites (en général), mais vous êtes toujours à l'aide de 3/4 de la taille maximale d'un objet unique.
Pourquoi avez-vous besoin d'une telle colossale de la taille de l'image? Consulté à 1280x1024 res sur un écran d'ordinateur, une image 19000 pixels sur un côté serait de 14 écrans de large par 18 écrans de haut. Je peux seulement imaginer que vous êtes en train de faire imprimer en haute qualité graphique, dans ce cas, un 720dpi image serait un 26" le carré de l'affiche.
Je soupçonne que vous êtes frapper la mémoire de la pac questions. Cependant, il existe de nombreuses raisons d'une image bitmap constructeur peut échouer. Les principaux sont énumérés dans cet article de Base de Connaissances parler de GDI+ limites dans
CreateBitmap
.System.Drawing.Bitmap
, en interne, utilise le GDI API native lorsque l'image est construite.Cela étant dit, une image de cette taille est bien plus d'un GO de RAM, et il est probable que vous êtes frapper la ligne de balayage limitation de taille (64 ko) ou à court de mémoire.
Définir la PixelFormat lorsque vous avez un nouveau bitmap, comme:
et avec le nombre exact ci-dessus, cela fonctionne pour moi. Ceci pourrait en partie résoudre le problème.
Eu cette erreur lors de l'ouverture d'un fichier TIF. Le problème était dû à pas en mesure d'ouvrir CMJN. Changé de couleur de RVB vers CMJN et ne pas obtenir une erreur.
J'ai donc utilisé une bibliothèque taglib pour obtenir la taille du fichier d'image à la place.
Exemple de Code: