¿Alguien puede sugerir cómo puedo convertir una imagen en una matriz de bytes y viceversa?
Estoy desarrollando una aplicación WPF y usando un lector de flujo.
Código de muestra para cambiar una imagen en una matriz de bytes
public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
using (var ms = new MemoryStream())
{
imageIn.Save(ms,imageIn.RawFormat);
return ms.ToArray();
}
}
C # Image to Byte Array y Byte Array to Image Converter Class
System.Drawing.Imaging.ImageFormat.Gif
, puede usarimageIn.RawFormat
ImageConverter
solución que se encuentra a continuación parece evitar estos errores.(new Bitmap(imageIn)).Save(ms, imageIn.RawFormat);
.Para convertir un objeto de imagen en
byte[]
puede hacer lo siguiente:fuente
.ConvertTo(new Bitmap(x), typeof(byte[]));
.Otra forma de obtener la matriz de bytes de la ruta de la imagen es
fuente
Esto es lo que estoy usando actualmente. Algunas de las otras técnicas que he probado no han sido óptimas porque cambiaron la profundidad de bits de los píxeles (24 bits frente a 32 bits) o ignoraron la resolución de la imagen (dpi).
Imagen a matriz de bytes:
Matriz de bytes a imagen:
Editar: para obtener la imagen de un archivo jpg o png, debe leer el archivo en una matriz de bytes usando File.ReadAllBytes ():
Esto evita problemas relacionados con Bitmap que desea que su flujo de origen se mantenga abierto, y algunas soluciones alternativas sugeridas para ese problema que dan como resultado que el archivo de origen se mantenga bloqueado.
fuente
ImageConverter _imageConverter = new ImageConverter(); lock(SourceImage) { return (byte[])_imageConverter.ConvertTo(SourceImage, typeof(byte[])); }
Donde resultaría intermitentemente en matrices de 2 tamaños diferentes. Esto normalmente sucedería después de aproximadamente 100 iteraciones, pero cuando obtengo el mapa de bitsnew Bitmap(SourceFileName);
y luego lo ejecuto a través de ese código, funciona bien.prueba esto:
fuente
MemoryStream
más rápido, al menos en la implementación actual. De hecho, si lo cierra, no podrá usar elImage
después, obtendrá un error GDI.Puede usar el
File.ReadAllBytes()
método para leer cualquier archivo en una matriz de bytes. Para escribir una matriz de bytes en un archivo, simplemente use elFile.WriteAllBytes()
método.Espero que esto ayude.
Puede encontrar más información y código de muestra aquí .
fuente
¿Solo desea los píxeles o la imagen completa (incluidos los encabezados) como una matriz de bytes?
Para píxeles: utilice el
CopyPixels
método en mapa de bits. Algo como:fuente
Código:
fuente
Si no hace referencia a imageBytes para transportar bytes en la secuencia, el método no devolverá nada. Asegúrese de hacer referencia a imageBytes = m.ToArray ();
[NB] Si aún no ve la imagen en el navegador, escribí un paso de solución de problemas detallado
resuelto! -iis-not-serve-css, -images-and-javascript
fuente
Este es un código para convertir la imagen de cualquier tipo (por ejemplo, PNG, JPG, JPEG) a una matriz de bytes
fuente
Para convertir la imagen en una matriz de bytes, el código se da a continuación.
Para convertir la matriz de bytes a imagen. El código se proporciona a continuación. El código se maneja
A Generic error occurred in GDI+
en Guardar imagen.fuente
Este código recupera las primeras 100 filas de la tabla en SQLSERVER 2012 y guarda una imagen por fila como un archivo en el disco local
fuente