Ce code échoue lorsque vous essayez d'appeler Je reçois l'exception: p> Une valeur ne peut pas être null.paramètre Nom: encodeur " p>
blockQquote> Ça fonctionne si je passe dans un Quelle est la meilleure façon de convertir le merci
BEN P> P> image.Save (MemoryStream, imageFormat) code>.
imageFormat code> objet directement.
imageformat.jpeg code>. p>
RAWFormat code> à
imageFormat code> (idéalement sans instruction de commutateur ou Beaucoup de déclarations si) p>
8 Réponses :
Je suis désolé, je n'ai trouvé aucune possibilité d'extraire directement un "bon" imageFormat de l'objet image analysé ou généré.
Ceci est mon code, vous pouvez l'adopter en stockant le membre statique imageFormat au lieu du MIMETYPE . P>
if (image.RawFormat.Equals(ImageFormat.Jpeg)) binary.MetaInfo.Mimetype = "image/jpeg"; else if (image.RawFormat.Equals(ImageFormat.Bmp)) binary.MetaInfo.Mimetype = "image/bmp"; else if (image.RawFormat.Equals(ImageFormat.Emf)) binary.MetaInfo.Mimetype = "image/emf"; else if (image.RawFormat.Equals(ImageFormat.Exif)) binary.MetaInfo.Mimetype = "image/exif"; else if (image.RawFormat.Equals(ImageFormat.Gif)) binary.MetaInfo.Mimetype = "image/gif"; else if (image.RawFormat.Equals(ImageFormat.Icon)) binary.MetaInfo.Mimetype = "image/icon"; else if (image.RawFormat.Equals(ImageFormat.Png)) binary.MetaInfo.Mimetype = "image/png"; else if (image.RawFormat.Equals(ImageFormat.Tiff)) binary.MetaInfo.Mimetype = "image/tiff"; else if (image.RawFormat.Equals(ImageFormat.Wmf)) binary.MetaInfo.Mimetype = "image/wmf";
J'utilise la méthode Hepler suivant pour la même chose:
public static string GetMimeType(Image i) { var imgguid = i.RawFormat.Guid; foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageDecoders()) { if (codec.FormatID == imgguid) return codec.MimeType; } return "image/unknown"; }
Bien que cela ne soit pas une réponse à la question, c'est une très bonne façon d'éviter des déclarations de grossieurs / si.
Travaillé pour moi aussi! Je l'ai traduite à vb.net pour une tâche de redimensionnement d'image simple. J'ajouterai cela comme une réponse au cas où quelqu'un le souhaite.
cherchez-vous cela?
Il y a aussi un moyen de sauvegarder une image code> dans son pour moi qui fonctionne comme ce qui suit: P> RawFormat code> à un flux
code>. Voir http: // bytes.com/topic/c-shanf/answers/944402-how-access-raw-image-data-resource-file#post3733044
byte[] GetRawImageData(Image img)
{
using(MemoryStream ms = new MemoryStream())
{
img.Save(ms, img.RawFormat);
return ms.ToArray();
}
}
La traduction VB.net de la réponse de Cheudurek:
Private Function GetMimeType(i As Drawing.Image) As String Dim imgguid As Guid = i.RawFormat.Guid For Each codec As ImageCodecInfo In ImageCodecInfo.GetImageDecoders() If (codec.FormatID = imgguid) Then Return codec.MimeType End If Next Return "image/unknown" End Function
J'ai essayé la méthode de Cheburek de comparer le GUID. Mais pour certaines des images PNG, les GUDS ne correspondaient pas. Je devais donc écrire une logique qui utilisera les deux méthodes mentionnées par la solution de Matthias Wutttke et la solution de Cheburek. P>
D'abord, je vérifiais avec l'imagecodecinfo et si le code ne trouve pas l'imageFormat, j'ai comparé l'imageFormat à l'aide de la solution de Matthias Wutttke. P>
Si la solution mentionnée ci-dessus a échoué, utilisez la méthode de l'extension pour obtenir le type de fichier MIME. P>
Si le type MIME change alors, le fichier change également, nous calculions la checksum de fichiers téléchargés pour correspondre à la checksum du fichier d'origine sur le serveur .. donc pour nous, il était important d'obtenir un fichier approprié comme sortie. p>
La réponse de Cesare impériali ci-dessus a fonctionné dans mes tests. Le seul inconvénient (si cela compte) est que le .tostring () pour un retour JPEG revient »[ImageFormat: B96B3CAE-0728-11D3-9D7B-0000F81EF32E]« Au lieu de «JPEG».
Si cela vous importe, un manière que vous puissiez obtenir le code statique précis avec moins de code est de cette façon: p>
Une réponse fraîche, moderne et générale pour trouver une extension d'image de RawFormat et la sauvegarde est comme ceci:
var formatDescription = ImageCodecInfo.GetImageDecoders().FirstOrDefault(w => w.FormatID == image.RawFormat.Guid)?.FormatDescription; filePath = Path.ChangeExtension(filePath, formatDescription); image.Save(filePath);