texto online net imagen convertir convertidor convert bytes arreglo array archivo c# wpf image com file-io

online - pdf byte array to image c#



Conversión de una imagen JPEG a una matriz de bytes-Excepción COM (4)

Consulte los ejemplos de este artículo: http://www.codeproject.com/KB/recipes/ImageConverter.aspx

También es mejor usar clases de System.Drawing

Image img = Image.FromFile(@"C:/Lenna.jpg"); byte[] arr; using (MemoryStream ms = new MemoryStream()) { img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); arr = ms.ToArray(); }

Utilizando C #, estoy tratando de cargar un archivo JPEG desde el disco y convertirlo en una matriz de bytes. Hasta ahora, tengo este código:

static void Main(string[] args) { System.Windows.Media.Imaging.BitmapFrame bitmapFrame; using (var fs = new System.IO.FileStream(@"C:/Lenna.jpg", FileMode.Open)) { bitmapFrame = BitmapFrame.Create(fs); } System.Windows.Media.Imaging.BitmapEncoder encoder = new System.Windows.Media.Imaging.JpegBitmapEncoder(); encoder.Frames.Add(bitmapFrame); byte[] myBytes; using (var memoryStream = new System.IO.MemoryStream()) { encoder.Save(memoryStream); // Line ARGH // mission accomplished if myBytes is populated myBytes = memoryStream.ToArray(); } }

Sin embargo, ejecutando la línea ARGH me da el mensaje:

COMException no fue manejado El identificador no es válido. (Excepción de HRESULT: 0x80070006 (E_HANDLE))

No creo que haya nada especial en el archivo Lenna.jpg : lo descargué de http://computervision.wikia.com/wiki/File:Lenna.jpg . ¿Puedes decir qué está mal con el código anterior?


La razón por la que ocurre este error es porque el método BitmapFrame.Create () que está utilizando por defecto es una carga OnDemand. BitmapFrame no intenta leer el flujo al que está asociado hasta la llamada al codificador. Guarda, en cuyo punto el flujo ya está dispuesto.

Puede envolver toda la función en el bloque {} o usar un BitmapFrame.Create () alternativo, como:

BitmapFrame.Create(fs, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);


Otra sugerencia:

byte[] image = System.IO.File.ReadAllBytes ( Server.MapPath ( "noimage.png" ) );

Debería estar trabajando no solo con imágenes.


public byte[] imageToByteArray(System.Drawing.Image imageIn) { MemoryStream ms = new MemoryStream(); imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray(); }