[c#] 이미지를 바이트 배열로 변환하는 방법

아무도 이미지를 바이트 배열로 또는 그 반대로 변환하는 방법을 제안 할 수 있습니까?

WPF 애플리케이션을 개발 중이며 스트림 리더를 사용하고 있습니다.



답변

이미지를 바이트 배열로 변경하는 샘플 코드

public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
   using (var ms = new MemoryStream())
   {
      imageIn.Save(ms,imageIn.RawFormat);
      return  ms.ToArray();
   }
}

C # 이미지-바이트 배열 및 바이트 배열-이미지 변환기 클래스


답변

이미지 개체를로 변환하려면 byte[]다음과 같이 할 수 있습니다.

public static byte[] converterDemo(Image x)
{
    ImageConverter _imageConverter = new ImageConverter();
    byte[] xByte = (byte[])_imageConverter.ConvertTo(x, typeof(byte[]));
    return xByte;
}


답변

이미지 경로에서 바이트 배열을 얻는 또 다른 방법은

byte[] imgdata = System.IO.File.ReadAllBytes(HttpContext.Current.Server.MapPath(path));


답변

여기 내가 현재 사용하고있는 것이 있습니다. 내가 시도한 다른 기술 중 일부는 픽셀의 비트 심도 (24 비트 대 32 비트)를 변경하거나 이미지 해상도 (dpi)를 무시했기 때문에 최적화되지 않았습니다.

  // ImageConverter object used to convert byte arrays containing JPEG or PNG file images into 
  //  Bitmap objects. This is static and only gets instantiated once.
  private static readonly ImageConverter _imageConverter = new ImageConverter();

이미지를 바이트 배열로 :

  /// <summary>
  /// Method to "convert" an Image object into a byte array, formatted in PNG file format, which 
  /// provides lossless compression. This can be used together with the GetImageFromByteArray() 
  /// method to provide a kind of serialization / deserialization. 
  /// </summary>
  /// <param name="theImage">Image object, must be convertable to PNG format</param>
  /// <returns>byte array image of a PNG file containing the image</returns>
  public static byte[] CopyImageToByteArray(Image theImage)
  {
     using (MemoryStream memoryStream = new MemoryStream())
     {
        theImage.Save(memoryStream, ImageFormat.Png);
        return memoryStream.ToArray();
     }
  }

이미지에 대한 바이트 배열 :

  /// <summary>
  /// Method that uses the ImageConverter object in .Net Framework to convert a byte array, 
  /// presumably containing a JPEG or PNG file image, into a Bitmap object, which can also be 
  /// used as an Image object.
  /// </summary>
  /// <param name="byteArray">byte array containing JPEG or PNG file image or similar</param>
  /// <returns>Bitmap object if it works, else exception is thrown</returns>
  public static Bitmap GetImageFromByteArray(byte[] byteArray)
  {
     Bitmap bm = (Bitmap)_imageConverter.ConvertFrom(byteArray);

     if (bm != null && (bm.HorizontalResolution != (int)bm.HorizontalResolution ||
                        bm.VerticalResolution != (int)bm.VerticalResolution))
     {
        // Correct a strange glitch that has been observed in the test program when converting 
        //  from a PNG file image created by CopyImageToByteArray() - the dpi value "drifts" 
        //  slightly away from the nominal integer value
        bm.SetResolution((int)(bm.HorizontalResolution + 0.5f),
                         (int)(bm.VerticalResolution + 0.5f));
     }

     return bm;
  }

편집 : jpg 또는 png 파일에서 이미지를 가져 오려면 File.ReadAllBytes ()를 사용하여 파일을 바이트 배열로 읽어야합니다.

 Bitmap newBitmap = GetImageFromByteArray(File.ReadAllBytes(fileName));

이렇게하면 소스 스트림이 열린 상태로 유지되기를 원하는 Bitmap과 관련된 문제와 소스 파일이 잠긴 상태로 유지되는 문제에 대한 몇 가지 제안 된 해결 방법을 피할 수 있습니다.


답변

이 시도:

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

public Image byteArrayToImage(byte[] byteArrayIn)
{
    MemoryStream ms = new MemoryStream(byteArrayIn);
    Image returnImage = Image.FromStream(ms);
    return returnImage;
}


답변

File.ReadAllBytes()메소드를 사용 하여 모든 파일을 바이트 배열로 읽을 수 있습니다 . 바이트 배열을 파일에 쓰려면 File.WriteAllBytes()메소드를 사용하십시오 .

도움이 되었기를 바랍니다.

여기에서 자세한 정보와 샘플 코드를 찾을 수 있습니다 .


답변

픽셀 또는 전체 이미지 (헤더 포함) 만 바이트 배열로 원하십니까?

픽셀의 경우 : CopyPixels비트 맵 에서 방법을 사용합니다 . 다음과 같은 것 :

var bitmap = new BitmapImage(uri);

//Pixel array
byte[] pixels = new byte[width * height * 4]; //account for stride if necessary and whether the image is 32 bit, 16 bit etc.

bitmap.CopyPixels(..size, pixels, fullStride, 0);