2012-01-20 3 views
33

Je travaille actuellement sur une application qui nécessite une conversion haute performance d'un tableau d'octets non-padded en format PNG ou JPEG. Le format d'image n'a pas d'importance, tant que c'est rapide.Conversion d'un tableau d'octets en PNG/JPG

J'ai essayé les bibliothèques .NET et les performances sont très mauvaises. Quelqu'un peut-il recommander une bonne bibliothèque de freeware pour cela?

EDIT: l'octet [] est un bitmap en niveaux de gris de 8 bits

+0

Ce que vous voulez dire n'est pas clair - à quoi sert ce tableau d'octets? Pourriez-vous donner plus de détails? –

+0

Votre question n'est pas entièrement claire. Que représente le 'byte []'? Est-ce le contenu de l'image réelle? S'agit-il d'un bitmap non compressé que vous souhaitez enregistrer au format JPG/PNG? – vcsjones

Répondre

55

Vous devriez être en mesure de faire quelque chose comme ceci:

byte[] bitmap = GetYourImage(); 

using(Image image = Image.FromStream(new MemoryStream(bitmap))) 
{ 
    image.Save("output.jpg", ImageFormat.Jpeg); // Or Png 
} 

Regardez here pour plus d'informations.

Espérons que cela aide.

+1

+1 ... à peu près la façon habituelle de le faire. En fonction des besoins de l'utilisateur, cependant, pas besoin de l'enregistrer dans le système de fichiers. –

+0

Parfait. J'aime ça! C'était exactement ce que je cherchais. –

+2

Salut, je suis en train d'essayer la même chose pour convertir l'image brute en jpeg butgetting * Paramètre n'est pas valide * exception. Des idées? 'byte [] bytes = System.IO.File.ReadAllBytes (@" C: \ Entrée.CR2 "); en utilisant (Image image = Image.FromStream (nouveau MemoryStream (octets))) { image.Sauvegarde (@ "C: \ output.jpg", ImageFormat.Jpeg); } ' –

0
+0

Je sais que c'est pour utiliser la bibliothèque de programmation, mais quelle serait la ligne de commande pour l'outil dans ce cas? – user2284570

+0

@ user2284570 Si vous l'utilisez sur la ligne de commande, vous travaillerez avec un fichier et non un tableau d'octets. En supposant que votre entrée est PNG (une signature PNG suivie de morceaux), alors 'convert input.png output.jpg' fonctionnerait probablement. – ahoffer

1

Il y a deux problèmes avec cette question:

Supposons que vous avez une image bitmap en échelle de gris, vous avez deux facteurs à considérer:

  1. Pour JPGs ... quelle perte de qualité est tolérable ?
  2. Pour les pngs ... quel niveau de compression est tolérable? (Bien que pour la plupart des choses que j'ai vues, vous n'avez pas beaucoup de choix, donc ce choix pourrait être négligeable.) Pour quelqu'un qui pense que cette question n'a pas de sens: oui, vous pouvez changer la quantité de compression/nombre de passages tentés de compresser; Découvrez soit Ifranview ou certains de ses plugins.

Répondez à ces questions et vous pourrez peut-être trouver votre réponse d'origine.