Alguém pode sugerir como posso converter uma imagem em uma matriz de bytes e vice-versa?
Estou desenvolvendo um aplicativo WPF e usando um leitor de fluxo.
Código de amostra para transformar uma imagem em uma 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 e Byte Array to Image Converter Class
System.Drawing.Imaging.ImageFormat.Gif
, você pode usarimageIn.RawFormat
ImageConverter
solução encontrada abaixo parece evitar esses erros.(new Bitmap(imageIn)).Save(ms, imageIn.RawFormat);
.Para converter um objeto de imagem para
byte[]
você pode fazer o seguinte:fonte
.ConvertTo(new Bitmap(x), typeof(byte[]));
.Outra maneira de obter a matriz de bytes do caminho da imagem é
fonte
Aqui está o que estou usando atualmente. Algumas das outras técnicas que tentei não foram ótimas porque alteraram a profundidade de bits dos pixels (24 bits x 32 bits) ou ignoraram a resolução da imagem (dpi).
Imagem para matriz de bytes:
Matriz de bytes para imagem:
Editar: para obter a imagem de um arquivo jpg ou png, você deve ler o arquivo em uma matriz de bytes usando File.ReadAllBytes ():
Isso evita problemas relacionados ao Bitmap que deseja que seu fluxo de origem seja mantido aberto e algumas soluções alternativas sugeridas para esse problema que resultam em manter o arquivo de origem bloqueado.
fonte
ImageConverter _imageConverter = new ImageConverter(); lock(SourceImage) { return (byte[])_imageConverter.ConvertTo(SourceImage, typeof(byte[])); }
Onde resultaria intermitentemente em matrizes de 2 tamanhos diferentes. Isso normalmente aconteceria após cerca de 100 iterações, mas quando obtenho o bitmap usandonew Bitmap(SourceFileName);
e o executo por meio desse código, ele funciona bem.tente isto:
fonte
MemoryStream
mais rapidez, pelo menos na implementação atual. Na verdade, se você fechá-lo, não será capaz de usar oImage
depois, você obterá um erro de GDI.Você pode usar o
File.ReadAllBytes()
método para ler qualquer arquivo na matriz de bytes. Para escrever a matriz de bytes no arquivo, basta usar oFile.WriteAllBytes()
método.Espero que isto ajude.
Você pode encontrar mais informações e código de amostra aqui .
fonte
Você deseja apenas os pixels ou a imagem inteira (incluindo cabeçalhos) como uma matriz de bytes?
Para pixels: use o
CopyPixels
método em Bitmap. Algo como:fonte
Código:
fonte
Se você não fizer referência a imageBytes para transportar bytes no fluxo, o método não retornará nada. Certifique-se de fazer referência a imageBytes = m.ToArray ();
[NB] Se você ainda não consegue ver a imagem no navegador, escrevi uma etapa de solução de problemas detalhada
resolvido! -iis-not-serving-css, -images-and-javascript
fonte
Este é o código para converter a imagem de qualquer tipo (por exemplo PNG, JPG, JPEG) em uma matriz de bytes
fonte
Para converter a imagem em uma matriz de bytes. O código é fornecido abaixo.
Para converter a matriz de bytes em imagem. O código é fornecido a seguir. O código é manipulado
A Generic error occurred in GDI+
em Salvar imagem.fonte
Este código recupera as primeiras 100 linhas da tabela no SQLSERVER 2012 e salva uma imagem por linha como um arquivo no disco local
fonte