Quelqu'un peut-il suggérer comment je peux convertir une image en un tableau d'octets et vice versa?
Je développe une application WPF et j'utilise un lecteur de flux.
Exemple de code pour transformer une image en tableau d'octets
public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
using (var ms = new MemoryStream())
{
imageIn.Save(ms,imageIn.RawFormat);
return ms.ToArray();
}
}
Classe C # Image to Byte Array et Byte Array to Image Converter
System.Drawing.Imaging.ImageFormat.Gif
, vous pouvez utiliserimageIn.RawFormat
ImageConverter
solution trouvée ci-dessous semble éviter ces erreurs.(new Bitmap(imageIn)).Save(ms, imageIn.RawFormat);
.Pour convertir un objet Image en,
byte[]
vous pouvez procéder comme suit:la source
.ConvertTo(new Bitmap(x), typeof(byte[]));
.Une autre façon d'obtenir un tableau d'octets à partir du chemin de l'image est
la source
Voici ce que j'utilise actuellement. Certaines des autres techniques que j'ai essayées n'ont pas été optimales car elles ont changé la profondeur de bits des pixels (24 bits contre 32 bits) ou ont ignoré la résolution de l'image (dpi).
Image en tableau d'octets:
Tableau d'octets en image:
Edit: Pour obtenir l'image à partir d'un fichier jpg ou png, vous devez lire le fichier dans un tableau d'octets en utilisant File.ReadAllBytes ():
Cela évite les problèmes liés au fait que Bitmap souhaite que son flux source reste ouvert, et certaines solutions de contournement suggérées à ce problème entraînant le maintien du fichier source verrouillé.
la source
ImageConverter _imageConverter = new ImageConverter(); lock(SourceImage) { return (byte[])_imageConverter.ConvertTo(SourceImage, typeof(byte[])); }
Où cela donnerait par intermittence des tableaux de 2 tailles différentes. Cela se produirait normalement après environ 100 itérations, mais lorsque j'obtiens le bitmap en utilisantnew Bitmap(SourceFileName);
puis l'exécute à travers ce code, cela fonctionne bien.essaye ça:
la source
MemoryStream
plus rapidement, du moins dans l'implémentation actuelle. En fait, si vous le fermez, vous ne pourrez plus l'utiliser par laImage
suite, vous obtiendrez une erreur GDI.Vous pouvez utiliser la
File.ReadAllBytes()
méthode pour lire n'importe quel fichier dans un tableau d'octets. Pour écrire un tableau d'octets dans un fichier, utilisez simplement laFile.WriteAllBytes()
méthode.J'espère que cela t'aides.
Vous pouvez trouver plus d'informations et un exemple de code ici .
la source
Voulez-vous uniquement les pixels ou l'image entière (y compris les en-têtes) sous forme de tableau d'octets?
Pour les pixels: utilisez la
CopyPixels
méthode sur Bitmap. Quelque chose comme:la source
Code:
la source
Si vous ne référencez pas les imageBytes pour transporter des octets dans le flux, la méthode ne retournera rien. Assurez-vous de référencer imageBytes = m.ToArray ();
[NB] Si vous ne voyez toujours pas l'image dans le navigateur, j'ai écrit une étape de dépannage détaillée
résolu! -iis-ne-servant-css, -images-et-javascript
la source
Ceci est le code pour convertir l'image de tout type (par exemple PNG, JPG, JPEG) en tableau d'octets
la source
Pour convertir l'image en tableau d'octets, le code est donné ci-dessous.
Pour être convertir le tableau d'octets en image.Le code est donné ci-dessous.Le code est géré
A Generic error occurred in GDI+
dans Image Save.la source
Ce code récupère les 100 premières lignes de la table dans SQLSERVER 2012 et enregistre une image par ligne en tant que fichier sur le disque local
la source