C #을 사용하면 임시 파일로 저장하고 ?를 사용하여 결과를 읽는 것보다 Windows Bitmap
를 변환하는 더 좋은 방법 byte[]
이 FileStream
있습니까?
답변
몇 가지 방법이 있습니다.
ImageConverter
public static byte[] ImageToByte(Image img)
{
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(img, typeof(byte[]));
}
많은 코드가 필요하지 않기 때문에 편리합니다.
메모리 스트림
public static byte[] ImageToByte2(Image img)
{
using (var stream = new MemoryStream())
{
img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
return stream.ToArray();
}
}
이것은 파일이 디스크 대신 메모리에 저장된다는 점을 제외하고는 현재 수행중인 작업과 동일합니다. 더 많은 코드가 있지만 ImageFormat 옵션이 있으며 메모리 또는 디스크에 저장하는 사이에 쉽게 수정할 수 있습니다.
출처 : http://www.vcskicks.com/image-to-byte.php
답변
MemoryStream을은 이 도움이 될 수 있습니다. 확장 방법으로 넣을 수 있습니다.
public static class ImageExtensions
{
public static byte[] ToByteArray(this Image image, ImageFormat format)
{
using(MemoryStream ms = new MemoryStream())
{
image.Save(ms, format);
return ms.ToArray();
}
}
}
다음과 같이 사용할 수 있습니다.
var image = new Bitmap(10, 10);
// Draw your image
byte[] arr = image.ToByteArray(ImageFormat.Bmp);
ImageConverter와 관련하여 prestomanifto의 답변에 부분적으로 동의하지 않습니다. ImageConverter를 사용하지 마십시오. 기술적으로 잘못된 것은 없지만 객체에서 boxing / unboxing을 사용한다는 사실은 .NET 프레임 워크의 오래된 어두운 곳에서 가져온 코드이며 이미지 처리에 사용하기에는 이상적이지 않다는 것을 나타냅니다 (바이트로 변환하기에는 너무 과도합니다) [] 적어도), 특히 다음을 고려할 때.
ImageConverter
.Net 프레임 워크에서 사용 하는 코드를 살펴 보았으며 내부적으로 위에서 제공 한 코드와 거의 동일한 코드를 사용합니다. 새로운을 생성하고 제공했을 때의 형식으로 MemoryStream
저장 Bitmap
하고 배열을 반환합니다. 다음 ImageConverter
을 사용하여 클래스 를 만드는 추가 오버 헤드를 건너 뜁니다.MemoryStream
답변
비트 맵 데이터를 복사 할 수도 있습니다. 중간 메모리 스트림 등이 없으며 빠른 메모리 사본. 24 비트 및 32 비트 비트 맵 모두에서 작동합니다.
public static byte[] BitmapToByteArray(Bitmap bitmap)
{
BitmapData bmpdata = null;
try
{
bmpdata = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat);
int numbytes = bmpdata.Stride * bitmap.Height;
byte[] bytedata = new byte[numbytes];
IntPtr ptr = bmpdata.Scan0;
Marshal.Copy(ptr, bytedata, 0, numbytes);
return bytedata;
}
finally
{
if (bmpdata != null)
bitmap.UnlockBits(bmpdata);
}
}
.
답변
Image를 MemoryStream에 저장 한 다음 바이트 배열을 가져옵니다.
http://msdn.microsoft.com/en-us/library/ms142148.aspx
Byte[] data;
using (var memoryStream = new MemoryStream())
{
image.Save(memoryStream, ImageFormat.Bmp);
data = memoryStream.ToArray();
}
답변
다음과 같이를 MemoryStream
대신 사용하십시오 FileStream
.
MemoryStream ms = new MemoryStream();
bmp.Save (ms, ImageFormat.Jpeg);
byte[] bmpBytes = ms.ToArray();
답변
다음을 시도하십시오 :
MemoryStream stream = new MemoryStream();
Bitmap bitmap = new Bitmap();
bitmap.Save(stream, ImageFormat.Jpeg);
byte[] byteArray = stream.GetBuffer();
다음을 사용 중인지 확인하십시오.
System.Drawing & using System.Drawing.Imaging;
답변
나는 당신이 단순히 할 수 있다고 믿습니다.
ImageConverter converter = new ImageConverter();
var bytes = (byte[])converter.ConvertTo(img, typeof(byte[]));