0

私はwinform(C#)を使用しています。画像をビットマップとして持っていて、ビットマップをバイトに変換してデータベースに挿入したいと思います。では、その方法を教えていただけますか?

4

3 に答える 3

6

ImageConverter get byte array form image を使用できます

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

または、BitmapImage を使用して変換を行うことができます。

これら 2 つのメソッドを使用して、ビットマップをバイト配列に、バイト配列をビットマップに変換します。

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 の方がはるかに優れています。SQL Server は、ファイル システムに BLOB をトランザクション的に格納することを直接サポートしています (1MB 以上のファイルには SQL Server を使用することをお勧めします)。

データベースにファイルを格納するときに、SQL Server Compact で読み取りパフォーマンスが大幅に低下するのを見てきました。大きなブロブを保存するときに他のデータベースがどのように機能するかはわかりません。

もう 1 つの解決策として、イメージをファイル システムに保存し、データベースにファイルへのポインターを設定する方法があります。

于 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 に答える