3 votes

Une référence nulle ou une valeur invalide a été trouvée [statut GDI+ : InvalidParameter].

J'exécute une application MVC3 sur Mono/linux et tout fonctionne bien à l'exception d'un utilitaire de téléchargement d'images. Chaque fois qu'un téléchargement d'image est tenté, j'obtiens l'erreur Invalid Parameter dans la méthode ci-dessous :

    System.Drawing.GDIPlus.CheckStatus(status As Status) (unknown file): N 00339
    System.Drawing.Bitmap.SetResolution(xDpi As Single, yDpi As Single)

J'ai fait de nombreuses recherches sur cette erreur et j'ai découvert que l'erreur de paramètre invalide peut souvent être trompeuse, et peut se produire si, par exemple, il y a eu une erreur avec le téléchargement lui-même, ou si l'image n'a pas été entièrement lue. Cela fonctionne bien sous IIS/Windows, mais je n'ai pas réussi à le faire fonctionner sous Mono.

Apache2 Mono 2.10.8.1

Est-ce que j'ai raté quelque chose de simple ou dois-je trouver une autre façon de gérer la manipulation des images pour le mono ?

4voto

b0redom Points 387

Après avoir effectué un certain nombre de tests, j'ai pu déterminer la racine de mon erreur. J'essayais d'utiliser le Image.HorizontalResolution y Image.VerticalResolution propriétés pour Résolution bitmap . Bien que ces propriétés aient été définies lors du téléchargement initial (où le fichier est lu dans un flux à partir du répertoire tmp), lorsque j'ai renvoyé la chaîne codée en base64 de l'image elle-même, il semble que ces valeurs aient été perdues. Pour cette raison, la méthode SetResolution a échoué.

Pour une raison quelconque, je n'ai pas ce problème sur IIS/Windows, les propriétés existent dans les deux cas.

0voto

Guy Langston Points 61

J'ai rencontré un problème similaire. Un bitmap chargé à partir du disque indiquait bmp.HorizontalResolution==0 et bmp.VerticalResolution==0 alors qu'ils étaient tous deux==300. Ce comportement ne se produit pas sous Windows.

En creusant un peu plus, j'ai découvert que le test suivant échoue :

    [Test]
    public void GDI_SetResoltion()
    {
        var b1 = new Bitmap (100, 100);
        Assert.That (b1.HorizontalResolution, Is.Not.EqualTo (0));
        Assert.That (b1.VerticalResolution, Is.Not.EqualTo (0));
    }

Je crois que la résolution par défaut de Windows est de 96 dpi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X