0

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

4

3 回答 3

6

您可以使用 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;
}
于 2012-07-05T08:53:15.593 回答
1

您可以为此使用以下代码:

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直接支持在文件系统上以事务方式存储 blob(他们建议将其用于 1MB 或更大的文件)。

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

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

于 2012-07-05T08:56:29.503 回答
1

您可以使用Bitmap.Save将位图的内容保存到流中。您可以将其与这样的一起使用MemoryStream

    MemoryStream memoryStream = new MemoryStream();
    Bitmap newBitmap = new Bitmap();
    newBitmap.Save(memoryStream, ImageFormat.Bmp);
    byte[] bitmapRecord = memoryStream.ToArray();
于 2012-07-05T08:58:03.967 回答