【问题标题】:Convert Bitmap to byte将位图转换为字节
【发布时间】:2012-07-05 15:39:23
【问题描述】:

我正在使用 winform (C#)。 我将图像作为位图,我想将位图转换为字节以插入数据库。 那么,你能告诉我怎么做吗?

【问题讨论】:

标签: c# winforms


【解决方案1】:

您可以使用 ImageConverter 获取字节数组形式的图像

public static byte[] GetBytesOfImage(Image img)
{
    ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

或者您可以使用 BitmapImage 进行转换。

使用这两种方法将位图转字节数组和字节数组转位图。

public Byte[] BufferFromImage(BitmapImage imageSource)
{
    Stream stream = imageSource.StreamSource;
    Byte[] buffer = null;
    if (stream != null && stream.Length > 0)
    {
        using (BinaryReader br = new BinaryReader(stream))
        {
            buffer = br.ReadBytes((Int32)stream.Length);
        }
    }

    return buffer;
}
public BitmapImage ImageFromBuffer(Byte[] bytes)
{
    MemoryStream stream = new MemoryStream(bytes);
    BitmapImage image = new BitmapImage();
    image.BeginInit();
    image.StreamSource = stream;
    image.EndInit();
    return image;
}

【讨论】:

  • 此代码将 WPF BitmapImage 转换为字节数组,而不是 Bitmap。当然,您也可以将 Bitmap 转换为 BitmapImage,但为什么要这样做?
【解决方案2】:

您可以使用以下代码:

Bitmap myBitmap = ...;
var imageStream = new MemoryStream();
using (imageStream)
{
    // Save bitmap in some format.
    myBitmap.Save(imageStream, ImageFormat.Jpeg);
    imageStream.Position = 0;

    // Do something with the memory stream. For example:
    byte[] imageBytes = imageStream.ToArray();
    // Save bytes to the database.
}

顺便说一句,我不知道您的图像会有多大以及您使用什么数据库,但是在数据库中存储大 blob 通常不是一个好主意。大型 blob 的文件系统性能比数据库性能好得多。 SQL Server 有 direct support 用于在文件系统上以事务方式存储 blob(他们建议将其用于 1MB 及更大的文件)。

在数据库中存储文件时,我发现 SQL Server Compact 的读取性能严重下降。我不知道其他数据库在存储大 blob 时的表现如何。

另一种可能的解决方案是将图像存储在文件系统上,并在数据库中提供指向文件的指针。

【讨论】:

  • 实际上,我在位图中有图像,我想将此图像插入数据库,但我想将该图像保存为二进制存储在数据库中,例如:1k24343j3j34j35j3k42h123k
【解决方案3】:

您可以使用Bitmap.Save 将位图的内容保存到流中。您可以将其与 MemoryStream 一起使用,如下所示:

    MemoryStream memoryStream = new MemoryStream();
    Bitmap newBitmap = new Bitmap();
    newBitmap.Save(memoryStream, ImageFormat.Bmp);
    byte[] bitmapRecord = memoryStream.ToArray();

【讨论】:

  • 创建 newBitmap 的新实例。Bitmap newBitmap = new Bitmap();.查看新更新。
猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
相关资源
最近更新 更多