Une erreur générique s'est produite lors de l'enregistrement du fichier JPEG dans le flux mémoire dans GDI
Lors de l'enregistrement d'une image JPEG dans un flux mémoire à l'aide de GDI, une exception est levée. Ce problème est particulièrement déroutant car il se produit avec les images JPEG et GIF, mais pas avec les images PNG.
Analyse des causes
La raison de cette erreur est que le flux mémoire doit rester ouvert pendant la sauvegarde de l'objet image. En effet, l'objet est créé avec un flux et les données ne sont vidées que lorsque le flux est fermé.
Solution
Pour résoudre ce problème, assurez-vous que le flux mémoire reste ouvert jusqu'à ce que l'image soit entièrement enregistrée. L'extrait de code suivant illustre l'approche correcte :
<code class="language-csharp">using (var ms = new MemoryStream()) { using (Image image = new Bitmap(...)) { ImageFormat format; switch (image.RawFormat) // 使用 RawFormat 代替 MimeType() { case ImageFormat.Png: format = ImageFormat.Png; break; case ImageFormat.Gif: format = ImageFormat.Gif; break; default: format = ImageFormat.Jpeg; break; } image.Save(ms, format); return ms.ToArray(); } }</code>
Interprétation des messages d'erreur
Le vague message d'exception "Une erreur générique s'est produite dans GDI" déroute de nombreux développeurs. Cependant, la raison de cette ambiguïté est que l’exception n’est pas levée par GDI lui-même, mais par la couche d’interopérabilité COM du système.
Alternatives
Si vous ne pouvez pas garder le flux mémoire ouvert pendant la sauvegarde de l'image, une autre solution consiste à créer un nouveau flux mémoire à partir du flux mémoire d'origine avant de sauvegarder :
<code class="language-csharp"> using (var ms = new MemoryStream()) { // ... using (var newMs = new MemoryStream(ms.ToArray())) { image.Save(newMs, format); return newMs.ToArray(); } } ``` 该方法效率较低,应优先考虑第一种方法。 代码中也修正了使用 `RawFormat` 属性代替 `MimeType()` 方法,因为 `MimeType()` 方法在某些情况下可能无法正确返回图像格式。</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!