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();
}