0

SqlDataReaderを使用していて、Accessファイルから変換したテーブルから読み取ろうとしています。SQLServer2008を使用しています。

データ型はvarbinary(max)になりました。

これを変換して、System.Drawing.Imageとして使用できるようにするにはどうすればよいですか?

これはWindowsMetaFileであり、PNGまたはGIFに変換して、ファイルシステムに保存したいと思います。

画像に変換できないというエラーが表示されるため、これは正しくないようです。

System.Drawing.Image LocationImage = sdr.GetSqlBinary(2)

ありがとうございました。

4

1 に答える 1

1

SqlBytesを使用します。Image.FromStreamを使用して、 SqlBytes.Streamから画像をロードします。リーダーでCommandBehavior.SequentialAccessを使用して、大きなサイズの画像をロードします。

using (SqlDataReader sdr=cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
...
System.Data.SqlTypes.SqlBytes imageBytes = srd.GetSqBytes(2);
System.Drawing.Image locationImage = Image.FromStream(imageBytes.Stream);
}

PNG / GIFとして保存するには:

SqlCommand cmd = new SqlCommand("update table set image=@image where ...")

MemoryStream streamOutput = new MemoryStream();
image.Save(streamOutput, ImageFormat.Png);
SqlBytes imageBytes = new SqlBytes(streamOutput); 
cmd.Parameters.AddWithValue("@image", imageBytes);
cmd.ExecuteNonQuery()

アップデート

Image.FromStreamがWMF形式をロードできるかどうかはわかりません。EMF afaikをロードできますが、WMFについてはよくわかりません。おそらく、 Metafile(Stream)コンストラクターを介して呼び出しをルーティングすることは機能しますが、私はグラフィックスの専門家ではありません。

于 2009-10-06T03:59:20.967 に答える